Wie leite ich Datenverkehr von einer VirtualBox-VM nur über ein VPN weiter?

10

Ich habe eine VirtualBox-VM (sowohl Host als auch Gast Ubuntu Maverick). Mein VPN-Anbieter verwendet OpenVPN, um TUNs einzurichten. Ich möchte die Dinge so einrichten, dass der Datenverkehr von der VM nur über das VPN geleitet wird und nur dann gelöscht wird, wenn das VPN ausfällt (es ist passiert). Vorschläge? Mein iptables-fu ist etwas schwach

Was ich versucht habe: Verwenden des "Nur-Host-Netzwerks" von VirtualBox, das dem Gast eine vboxnet0-Loopback-Schnittstelle auf dem Host zum Gast bietet, aber die iptables / Routen nicht richtig ausführen konnte. Ich möchte NAT auf VM vermeiden, da ich bereits doppelt NAT-fähig bin (ISP & Heimrouter) und eine weitere Ebene meinen Kopf zum Platzen bringt.

Weitere Möglichkeiten: Umstellung auf TAP (wie?) Und Überbrückung auf VM. Erstellen eines VPN innerhalb der VM und Filtern des gesamten eth0-Datenverkehrs mit Ausnahme von VPN-Verbindung mit iptables (siehe unten)

Bonuspunkte: Wenn Sie mir sagen können, wie Sie verschiedene VPN-Exit-Punkte auf Host und Gast verwenden können, ohne den Datenverkehr vom Gast über das VPN des Hosts doppelt zu tunneln.

pfein
quelle

Antworten:

4

Es wird andere Lösungen geben, aber das denke ich:

  1. Richten Sie die VM im Bridge-Modus ein. Dadurch erhält Ihre virtuelle Maschine eine IP-Adresse im selben Netzwerk wie Ihr Host.
  2. Richten Sie das VPN auf dem Host ein, sagen wir, es ist tun0.
  3. Aktivieren Sie das Routing auf dem Host echo 1 > /proc/sys/net/ipv4/ip_forward
  4. Richten Sie die VM mit der Host-IP-Adresse als Standard-GW ein.

Zu diesem Zeitpunkt verfügt der Host über die VPN-Verbindung, und die VM leitet den gesamten Datenverkehr an den Host weiter. Alles, was Sie tun müssen, ist, den Host so einzuschränken, dass der Gast keinen Datenverkehr weiterleiten kann, der nicht über das tun0-Gerät geleitet wird. Sie können dies mit einer Reihe von iptables-Regeln wie folgt tun:

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

Das sollte funktionieren. Die erste Regel legt eine Standardrichtlinie für DROP-Pakete in der FORWARD-Kette fest. Dies wirkt sich nur auf Pakete aus, die Ihr Host weiterleiten würde, nicht auf Pakete zum Host (INPUT) oder vom Host (OUTPUT). Die zweite Regel erlaubt jeglichen Datenverkehr, der tun0 ausleitet - Sie können dies mit einer Quelle verschärfen, wenn Sie möchten. Und die letzte Regel sollte zulassen, dass Antworten von tun0 zurückkommen, um zur VM zurückzukehren.

Erwartet Ihr VPN, dass alle Pakete auf der Tun-Schnittstelle von einer einzigen IP stammen? In diesem Fall möchten Sie auch eine NAT-Regel hinzufügen. Wahrscheinlich so etwas wie:

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