1

Используя 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

1 ответ1

1

РЕДАКТИРОВАТЬ: я работал, изменив правила PREROUTING следующим образом:

iptables -t nat -A PREROUTING -i enp0s8 -p udp --dport 53 -j DNAT --to-destination 10.4.0.1
iptables -t nat -A PREROUTING -i enp0s8 -p tcp --dport 53 -j DNAT --to-destination 10.4.0.1

10.4.0.1 является DNS-сервером по умолчанию для VPN (AirVPN), как в /etc/resolv.conf.

Я не уверен, что это правильный способ сделать это, но это работает ...

Итак, теперь все мои правила iptables выглядят следующим образом:

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
iptables -t nat -A PREROUTING -i enp0s8 -p udp --dport 53 -j DNAT --to-destination 10.4.0.1
iptables -t nat -A PREROUTING -i enp0s8 -p tcp --dport 53 -j DNAT --to-destination 10.4.0.1

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .