En utilisant VirtualBox sur Ubuntu, je veux connecter deux machines virtuelles Linux (debian 9) ensemble, de sorte que la première agisse comme un routeur pour la deuxième (VM2), dont le trafic est complètement routé à travers la première (VM1). Le VM1 (passerelle) est connecté à un service VPN et donc tout le trafic du VM2 est connecté au VPN.
J'ai réussi à faire en sorte que le VM2 puisse pinguer avec succès des IP externes telles que 8.8.8.8. Mais tout le reste du réseau échoue. Je pense que le problème est la résolution DNS, qui pour une raison inconnue pour moi n'est pas résolue par le VM1.
Voici ce que j'ai fait jusqu'à présent:
Sur VirtualBox, VM1 est connecté à une interface NAT, et à une deuxième interface, qui est un réseau interne nommé "testvpn". VM2 est uniquement connecté à ce réseau interne, pas au NAT.
VM1 a la configuration suivante dans /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 a la configuration suivante dans /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
Le /etc/resolv.conf de VM2 pointe vers VM1:
nameserver 10.152.152.10
Avec cette configuration simple, VM2 peut pinguer VM1, mais n'a pas accès à Internet externe. Pour cela, je dois autoriser le transfert IP et configurer iptables sur 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
À noter que j'utilise délibérément tun0 pour l'interface réseau VPN, mais les résultats sont exactement les mêmes avec enp0s3 à la place de tun0 sans le tunnel VPN activé. Maintenant je peux pinguer des adresses externes sur VM2, mais toutes les autres connexions réseau échouent:
$ curl google.com
curl: (6) Could not resolve host: google.com
Après avoir lu en ligne, j'ai essayé d'ajouter des règles iptables supposément liées aux DNS sur la première passerelle VM:
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
Ça ne marche pas. À noter que le réseau fonctionne bien sur le VM1, avec ou sans VPN.
Je ne suis pas très expérimenté avec iptables et je ne sais vraiment pas quoi faire ensuite. J'ai passé des heures à chercher des solutions en ligne mais je n'ai pas pu trouver de solution. Je préférerais ne pas utiliser de solutions dhcp/dnsmasq car je suis assez sûr que iptables devrait suffire.
T