Вопрос
Когда я запускаю 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 / interfaces:
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
Конфигурация Virtualbox для Vms:
Один из файлов виртуальных машин /etc/network/interfaces
:
# 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
Это не будет работать в Соединенной мостом Сетевой установке. Из документации VirtualBox:
Соединенные мостом сети
Это для более усовершенствованных сетевых потребностей, таких как сетевые моделирования и рабочие серверы в госте. При включении, подключения VirtualBox к одной из установленных сетевых плат и обмене сетевыми пакетами непосредственно, обходя сетевой стек хостовой операционной системы.
Так как Ваши виртуальные машины используют eth0
непосредственно, они не знают tun0
взаимодействуйте через интерфейс к туннелю, работающему на основе его. Необходимо будет использовать другую виртуальную сетевую конфигурацию.
У Вас есть (среди других) эти опции:
Преобразование сетевых адресов (NAT) является безусловно простым решением. VirtualBox будет NAT, VMs через любое интернет-соединение доступен хосту. Это полностью очевидно для VMs. Однако это устраняет соединения от хоста до VMs или соединения между VMs.
Используйте Сети Только для хоста для создания надлежащей подсети, содержащей VMs и хост. Это не потребует никаких изменений в интерфейсной конфигурации, которую Вы теперь имеете в VMs, но необходимо будет настроить хост, чтобы быть шлюзом и маршрутизатором, и сделать его NAT VMs к внешней стороне (ли через eth0
или tun0
).
Вышеупомянутое объединения: дайте каждому VM два интерфейса, один gatewaying к внешнему миру (через NAT VirtualBox) и другое приложенное к LAN Только для хоста.
Попробуйте экспериментальную Сетевую конфигурацию NAT VirtualBox. Обновление 2019: эта функция с тех пор назрела: присоедините к NAT хоста и выберите сеть Paravirtualized (virtio-сеть) тип адаптера.
Для VirtualBox с хостом Windows и гостевым linux (mint) перейдите на вкладку «Интерфейс сети» и установите для «Adapter» => «Attached to: NAT» и «Тип адаптера: паравиртуализированная сеть». После этого запустите виртуальную машину, и вы сможете использовать сеть VPN.
После поиска этого решения повсюду, я наконец нашел рабочее решение, которое не требует больших изменений конфигурации и действительно простое. Используйте сеть NAT по умолчанию и введите ее в терминале:
VBoxManage modifyvm "VM name" --natdnsproxy1 on
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, будут проходить через него в гостевой системе.
Вот некоторая полезная информация для бродячих ящиков, использующих хост vpn. По сути, вам нужно установить параметр natdnshostresolver1 . Обратите внимание, что это НЕ будет работать при использовании настройки Vagrant public_network.
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. ком / 2016/05 / распределения хост-VPN-с-бродяга-грабят-allen.html