Як я можу змусити гостей VirtualBox поділитися VPN-з'єднанням хоста?


50

Питання

Коли я запускаю VPN на своєму настільному комп’ютері ubuntu, який діє як маршрутизатор, приєднана підмережа втрачає підключення до Інтернету, але все ще доступна (LAN). В ідеалі я хотів би знати, як дозволити приєднаній підмережі знову отримати доступ до Інтернету шляхом маршрутизації через тунель VPN, коли VPN активний.

Контекст

У мене є така мережна компоновка:

підмережа 172.16.0.0/20 на eth0 для моїх віртуальних машин VirtualBox.

підмережа 192.168.0.0/24 на eth0: 0, яка підключається до шлюзу 192.168.0.1, який має доступ до Інтернету.

Це показано у файлі / etc / network / interface:

auto lo
iface lo inet loopback

# This is the subnet dedicated to VB
auto eth0
iface eth0 inet static
    address 172.16.0.1
    netmask 255.255.0.0
    gateway 192.168.0.164
    dns-nameservers 8.8.8.8

# normal DHCP internet
auto eth0:0
iface eth0:0 inet static
    address 192.168.0.164
    netmask 255.255.255.0
    dns-nameservers 8.8.8.8
    gateway 192.168.0.1

Пакети на eth0 передаються через eth0: 0 з маскуванням та нормальним підключенням до Інтернету. Однак коли я запускаю свій тунель VPN на цьому маршрутизаторі, підключення до Інтернету втрачається для віртуальних машин у підмережі eth0 (поки залишається для маршрутизатора).

Нижче наведено висновок ifconfig, коли тунель активний:

eth0      Link encap:Ethernet  HWaddr 00:1f:bc:01:c3:ab  
          inet addr:172.16.0.1  Bcast:172.16.255.255  Mask:255.255.0.0
          inet6 addr: fe80::21f:bcff:fe01:c3ab/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:165426 errors:0 dropped:0 overruns:0 frame:0
          TX packets:182601 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:208264321 (208.2 MB)  TX bytes:16660945 (16.6 MB)
          Interrupt:16 

eth0:0    Link encap:Ethernet  HWaddr 00:1f:bc:01:c3:ab  
          inet addr:192.168.0.164  Bcast:192.168.0.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          Interrupt:16 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:381963 errors:0 dropped:0 overruns:0 frame:0
          TX packets:381963 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:22755054 (22.7 MB)  TX bytes:22755054 (22.7 MB)

tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  
          inet addr:10.8.0.10  P-t-P:10.8.0.9  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

Я підозрюю, що рішення матиме щось спільне з таблицею маршрутизації . Він показує наступне, коли тунель активний :

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         10.8.0.9        128.0.0.0       UG    0      0        0 tun0
default         192.168.0.1     0.0.0.0         UG    100    0        0 eth0
10.8.0.0        10.8.0.9        255.255.255.0   UG    0      0        0 tun0
10.8.0.9        *               255.255.255.255 UH    0      0        0 tun0
37.139.23.49    192.168.0.1     255.255.255.255 UGH   0      0        0 eth0
128.0.0.0       10.8.0.9        128.0.0.0       UG    0      0        0 tun0
link-local      *               255.255.0.0     U     1000   0        0 eth0
172.16.0.0      *               255.255.0.0     U     0      0        0 eth0
192.168.0.0     *               255.255.255.0   U     0      0        0 eth0

і наступне, коли тунель неактивний :

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         192.168.0.1     0.0.0.0         UG    100    0        0 eth0
link-local      *               255.255.0.0     U     1000   0        0 eth0
172.16.0.0      *               255.255.0.0     U     0      0        0 eth0
192.168.0.0     *               255.255.255.0   U     0      0        0 eth0

Конфігурація віртуальної скриньки для Vms:

введіть тут опис зображення

Один з /etc/network/interfacesфайлів VM :

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet static
        address 172.16.0.3
        netmask 255.255.0.0
        network 172.16.0.0
        broadcast 172.16.255.255
        gateway 172.16.0.1
        dns-nameservers 8.8.8.8

Як налаштовані мережі вашого VM в VirtualBox?
zwets

мости до eth0 - додано інформацію до запитання.
Programster

Я знаю, що це не зовсім відповідь на ваше запитання, але для мене виявилося простіше встановити натомість 2 VPN-з'єднання: 1 від хост-машини, інше - від гостьової машини
Женя

Відповіді:


28

У налаштуваннях мостової мережі це не працюватиме . З документації на VirtualBox :

Мостові мережі

Це для більш розвинених потреб в мережі, таких як моделювання мережі та запуск серверів у гостях. Якщо ввімкнено, VirtualBox підключається до однієї з встановлених мережевих карт та обмінюється мережевими пакетами безпосередньо, обходячи мережевий стек вашої операційної системи.

Оскільки ваші віртуальні машини використовують eth0безпосередньо, вони не знають про tun0інтерфейс до тунелю, що працює над ним. Вам потрібно буде використовувати іншу конфігурацію віртуальної мережі.

Ви маєте (серед інших) такі варіанти:

  • Переклад мережевих адрес (NAT) - це найпростіше рішення. VirtualBox буде NAT-VM через будь-яке з'єднання з Інтернетом для хоста. Це повністю прозоро для ВМ. Однак це виключає з'єднання від хоста до VM або з'єднання між VM.

  • Використовуйте мережу, що використовується лише для хостів, щоб створити належну підмережу, що містить VM та хост. Для цього не знадобиться жодних змін у конфігурації інтерфейсу, який ви маєте зараз у віртуальних машинах, але вам потрібно буде встановити хост, який буде шлюзом та маршрутизатором, і зробити його НАТ вимкненими машинами назовні (незалежно від того, eth0чи вони є tun0).

  • Поєднайте вищезгадане: надайте кожному VM два інтерфейси, один - шлюз у зовнішній світ (через NAT VirtualBox ), а інший - до локальної локальної мережі .

  • Спробуйте експериментальну конфігурацію NAT-мережі VirtualBox . Оновлення 2019: ця функція з тих пір визріла: підключіться до NAT хосту та виберіть тип адаптера Паравіртуалізована мережа (virtio-net) .


34

Для VirtualBox з гостем Windows і Linux (монетним двором) перейдіть на вкладку Мережевий інтерфейс і встановіть "Адаптер" => "Приєднано до: NAT" і "Тип адаптера: Паравіртуалізована мережа". Після цього запустіть свій VM, і ви зможете використовувати мережу VPN.


1
Це чудово працювало для мене, дякую! Використання Ubuntu 16.04LTS в якості мого гостя та хоста Windows 10, з Virtual Box 5.0.24.
утроба

1
Блискуче! Це працює для мого хоста Windows 10 та VirtualBox (5.0.26) CentOS 7 гість.
Закі

1
Дивовижний! Повинна бути прийнята відповідь. Шукав це рішення століттями. Дуже дякую!
MrSpock

1
найкраща відповідь тут!
Майк

Чому чорт це не прийнята відповідь? Так просто і правильно!
Майкл Голдштейн

6

Шукаючи це рішення скрізь, я нарешті знайшов робоче рішення, яке не потребує великих змін у конфігурації, і це дуже просто. Використовуйте NAT мережу за замовчуванням і введіть це в терміналі:

VBoxManage modifyvm "VM name" --natdnsproxy1 on

джерело: https://www.virtualbox.org/ticket/13993


4

Була така ж проблема. Ось як я це вирішив:

  1. Змініть тип мережі гостьової системи на "Тільки хост"
  2. Зробіть за замовчуванням шлюз для гостей на ip-адресу хоста, ifconfig vboxnet0щоб знайти його.

Останнім кроком є ​​маршрутизація пакетів, що надходять з vboxnet0 у вашу VPN.

Якщо ви спрямовуєте весь трафік через VPN:

iptables -t nat -A POSTROUTING -s 192.168.5.0/24 ! -d 192.168.5.0/24 -o tun0 -j SNAT --to-source 10.8.0.5

Де 10.8.0.5ваш шлюз tun0 і 192.168.5.0/24ваш діапазон мережі vboxnet0.

Якщо ви орієнтуєте лише певний трафік через VPN:

iptables -t nat -A POSTROUTING -s 192.168.5.0/24 ! -d 192.168.5.0/24 -o tun0 -j SNAT --to-source 10.8.0.5
iptables -t nat -A POSTROUTING -s 192.168.5.0/24 ! -d 192.168.5.0/24 -o wlan0 -j SNAT --to-source 192.168.43.95

Де 10.8.0.5ваш шлюз tun0 і 192.168.43.95ваш wlan0шлюз і 192.168.5.0/24ваш діапазон мереж vboxnet0.

Примітка. Це рішення дозволяє гості ОС обробляти так само, як і хост ОС. Лише IP-адреси, налаштовані для проходження через VPN в Host OS, перейдуть через нього в Guest.


3

Ось корисна інформація для бродячих коробок із використанням vpn хоста. В основному вам потрібно встановити параметр natdnshostresolver1. Зверніть увагу, що це НЕ буде працювати при використанні налаштування public_network Vagrant.

  config.vm.provider :virtualbox do |vb|
      # ---- other options....
      vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
  end

http://renier.morales-rodriguez.net/post/90674523562/sharing-host-vpn-with-virtualbox-guest http://blog.geekslikeshinythings.com/2016/05/sharing-host-vpn-with-vagrant -rob-allen.html


1
Перше посилання мало для мене рішення. Він показує, як увімкнути варіант natdnshostresolver1 для VM.
кол
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.