Comment acheminer le trafic depuis une VM VirtualBox uniquement via un VPN?

10

J'ai une machine virtuelle VirtualBox (hôte et invité Ubuntu Maverick). Mon fournisseur VPN utilise OpenVPN pour configurer les TUN. Je voudrais configurer les choses pour que le trafic de la machine virtuelle ne passe que par le VPN et soit simplement supprimé si le VPN tombe en panne (c'est arrivé). Suggestions? Mon iptables-fu est un peu faible

Ce que j'ai essayé: utiliser la "mise en réseau uniquement hôte" de VirtualBox qui vous donne une interface de bouclage vboxnet0 sur l'hôte à l'invité, mais n'a pas pu obtenir les bonnes iptables / routes. Je voudrais éviter NAT sur VM, car je suis déjà double NAT (FAI et routeur domestique) et un niveau de plus me fera sauter la tête.

Autres possibilités: passer à TAP (comment?) Et passer à VM. Créer un VPN à l'intérieur de la machine virtuelle et filtrer tout le trafic eth0, à l'exception des connexions VPN avec iptables (mais voir ci-dessous)

Points bonus: si vous pouvez me dire comment utiliser différents points de sortie VPN sur l'hôte et l'invité sans doubler le trafic de l'invité via le VPN de l'hôte.

pfein
la source

Réponses:

4

Il y aura d'autres solutions, mais c'est ce que je pense:

  1. Configurez la machine virtuelle en mode pont. Cela donnera à votre machine virtuelle une adresse IP sur le même réseau que votre hôte.
  2. Configurez le VPN sur l'hôte, disons que c'est tun0.
  3. Activer le routage sur l'hôte echo 1 > /proc/sys/net/ipv4/ip_forward
  4. Configurez la machine virtuelle avec l'adresse IP hôte comme gw par défaut.

À ce stade, l'hôte dispose de la connexion VPN et la machine virtuelle achemine tout le trafic vers l'hôte. Tout ce qui reste à faire est de restreindre l'hôte afin qu'il ne permette pas à l'invité d'acheminer le trafic qui ne passera pas par le périphérique tun0. Vous pouvez le faire avec un ensemble de règles iptables comme ceci:

iptables -P FORWARD DROP
iptables -A FORWARD -o tun0 -j ACCEPT
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT

Ça devrait marcher. La première règle définit une stratégie par défaut pour les paquets DROP dans la chaîne FORWARD. Cela n'affecte que les paquets que votre hôte achemine, pas les paquets vers l'hôte (INPUT) ou depuis l'hôte (OUTPUT). La deuxième règle autorise tout trafic qui achemine tun0 - vous pouvez resserrer cela avec une --source si vous le souhaitez. Et la dernière règle devrait laisser les réponses revenir de tun0 pour les renvoyer à la machine virtuelle.

Votre VPN s'attendra-t-il à ce que tous les paquets sur l'interface tun proviennent d'une seule IP? Si c'est le cas, vous souhaiterez également ajouter une règle NAT. Probablement quelque chose comme:

iptables -t nat -A POSTROUTING -o tun0 -j SNAT --to-source {your host tun0 ip}
grep
la source