Как я могу заставить гостей VirtualBox совместно использовать VPN-соединение хоста?

Вопрос

Когда я запускаю свой VPN на своем настольном компьютере Ubuntu, который действует как маршрутизатор, подключенная подсеть теряет подключение к Интернету, но по-прежнему доступна (локальная сеть). В идеале я хотел бы знать, как включить подключенную подсеть для повторного получения доступа в Интернет путем маршрутизации через VPN-туннель, когда VPN активен.

Контекст

У меня есть следующая схема сети:

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

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

Это показано в файле /etc/network/interfaces:

auto loiface lo inet loopback# This is the subnet dedicated to VBauto eth0iface 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 internetauto eth0:0iface 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 Ifacedefault         10.8.0.9        128.0.0.0       UG    0      0        0 tun0default         192.168.0.1     0.0.0.0         UG    100    0        0 eth010.8.0.0        10.8.0.9        255.255.255.0   UG    0      0        0 tun010.8.0.9        *               255.255.255.255 UH    0      0        0 tun037.139.23.49    192.168.0.1     255.255.255.255 UGH   0      0        0 eth0128.0.0.0       10.8.0.9        128.0.0.0       UG    0      0        0 tun0link-local      *               255.255.0.0     U     1000   0        0 eth0172.16.0.0      *               255.255.0.0     U     0      0        0 eth0192.168.0.0     *               255.255.255.0   U     0      0        0 eth0

и следующее когда туннель неактивен:

Destination     Gateway         Genmask         Flags Metric Ref    Use Ifacedefault         192.168.0.1     0.0.0.0         UG    100    0        0 eth0link-local      *               255.255.0.0     U     1000   0        0 eth0172.16.0.0      *               255.255.0.0     U     0      0        0 eth0192.168.0.0     *               255.255.255.0   U     0      0        0 eth0

Конфигурация Virtualbox для виртуальных машин:

enter image description here

Одна из виртуальных машин /etc/network/interfaces файл:

# The loopback network interfaceauto loiface lo inet loopback# The primary network interfaceauto eth0iface 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

>Для VirtualBox с хостом Windows и гостем linux(mint) перейдите на вкладку Network UI и установите для "Adapter" = "Подключено к : NAT" и "Тип адаптера : Паравиртуализированная сеть". После этого запустите свою виртуальную машину, и вы сможете использовать VPN-сеть.

Это не будет работать в Мостовая сеть установка. Из Документация VirtualBox:

Мостовая сеть

Это предназначено для более сложных сетевых задач, таких как моделирование сети и запуск серверов в гостевой системе. Когда он включен, VirtualBox подключается к одной из установленных вами сетевых карт и обменивается сетевыми пакетами напрямую, обходя сетевой стек операционной системы вашего хоста.

Поскольку ваши виртуальные машины используют eth0 непосредственно, они не знают о tun0 интерфейс к туннелю, проходящему над ним. Вам нужно будет использовать другую конфигурацию виртуальной сети.

У вас есть (среди прочего) следующие варианты:

  • Преобразование сетевых адресов (NAT) это, безусловно, самое простое решение. VirtualBox будет подключать виртуальные машины через любое интернет-соединение, доступное хосту. Это полностью прозрачно для виртуальных машин. Однако это исключает подключения от хоста к виртуальным машинам или соединения между виртуальными машинами.

  • Воспользуйся Сеть только для хоста чтобы создать правильную подсеть, содержащую виртуальные машины и хост. Это не потребует никаких изменений в конфигурации интерфейса, которая у вас сейчас есть в виртуальных машинах, но вам нужно будет настроить хост в качестве шлюза и маршрутизатора, и сделайте это NAT виртуальных машин снаружи (независимо от того, через его eth0 или tun0).

  • Объедините вышесказанное: предоставьте каждой виртуальной машине два интерфейса, один из которых ведет к внешнему миру (через VirtualBox натуральный) и другой , прикрепленный к Локальная сеть только для хоста.

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

После поиска этого решения повсюду я, наконец, нашел рабочее решение, которое не требует большого количества изменений конфигурации и действительно простое. Используйте сеть NAT по умолчанию и введите это в терминале:

VBoxManage modifyvm "VM name" --natdnsproxy1 on

источник: https://www.virtualbox.org/ticket/13993

У меня была та же проблема. Вот как я решил эту проблему:

  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.5iptables -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's gateway и 192.168.5.0/24 это ваш диапазон сети vboxnet0.

Примечание: Это решение позволяет обрабатывать гостевую ОС так же, как обрабатывается хост-ОС. Только IP-адреса, настроенные для прохождения через VPN в хост-ОС, будут проходить через него в гостевой.

Вот некоторая полезная информация для бродячих ящиков, использующих host 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-guesthttp://blog.geekslikeshinythings.com/2016/05/sharing-host-vpn-with-vagrant-rob-allen.html

Как настроены сети вашей виртуальной машины в VirtualBox?