Используя VirtualBox в Ubuntu, я хочу соединить две виртуальные машины Linux (debian 9) вместе, чтобы первая действовала как маршрутизатор для второй (VM2), трафик которой полностью маршрутизируется через первую (VM1). VM1 (шлюз) подключен к службе VPN, и, таким образом, весь трафик от VM2 подключен к VPN.
Мне удалось заставить VM2 успешно пинговать внешние IP-адреса, такие как 8.8.8.8. Но все остальные сети не удается. Я думаю, что проблема заключается в разрешении DNS, которое по неизвестной мне причине не решается VM1.
Вот что я сделал до сих пор:
В VirtualBox VM1 подключен к интерфейсу NAT и второму интерфейсу, который является внутренней сетью с именем "testvpn". VM2 подключен только к этой внутренней сети, а не к NAT.
VM1 имеет следующую конфигурацию /etc /network /interfaces:
auto lo
iface lo inet loopback
allow-hotplug enp0s3
iface enp0s3 inet dhcp
allow-hotplug enp0s8
iface enp0s8 inet static
address 10.152.152.10
netmask 255.255.192.0
VM2 имеет следующую конфигурацию /etc /network /interfaces:
auto lo
iface lo inet loopback
allow-hotplug enp0s3
iface enp0s3 inet static
address 10.152.152.15
gateway 10.152.152.10
netmask 255.255.255.0
dns-nameservers 10.152.152.10
Файл /etc/resolv.conf для VM2 указывает на VM1:
nameserver 10.152.152.10
В этой простой конфигурации VM2 может пропинговать VM1, но не имеет доступа к внешнему интернету. Для этого я должен разрешить пересылку ip и настроить iptables на VM1:
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
iptables -A FORWARD -i tun0 -o enp0s8 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i enp0s8 -o tun0 -j ACCEPT
Обратите внимание, что я специально использую tun0 для сетевого интерфейса VPN, но результаты в точности совпадают с enp0s3 вместо tun0 без активированного туннеля VPN. Теперь я могу пропинговать внешние адреса на VM2, но все другие сетевые подключения не работают
$ curl google.com
curl: (6) Could not resolve host: google.com
После некоторого онлайн-чтения я попытался добавить предположительно связанные с DNS правила iptables на первую виртуальную машину шлюза:
iptables -t nat -A PREROUTING -i enp0s8 -p udp --dport 53 -j REDIRECT
iptables -t nat -A PREROUTING -i enp0s8 -p tcp --dport 53 -j REDIRECT
Не работает Обратите внимание, что работа в сети на VM1 работает нормально, с или без VPN.
Я не очень экспериментировал с iptables и действительно не знаю, что делать дальше. Я пытался найти часы в Интернете для поиска решений, но не смог найти решение. Я не хотел бы использовать решения dhcp/dnsmasq, так как я уверен, что iptables должно быть достаточно.
T