VirtualBox VM durch VPN Routen, aber wie?

Aefan

Ensign
Registriert
Jan. 2011
Beiträge
215
Hallo,

ich habe aktuell eine VM über Oracle VM VirtualBox laufen. Diese funkt ganz einfach über mein Host via NAT.
Allerdings möchte ich nun, dass nur die VM ausschließlich via VPN nach außen kommuniziert, aber nicht der Host.

Auf dem Host habe ich eine VPN-Verbindung direkt in Windows (7) angelegt. Aktivier ich diese Verbindung, geht alles durch das VPN, aber eben auch der Host. :freak:

Weiß jemand wie oder was ich einrichten muss, damit nur die VM via VPN kommuniziert, aber nicht der Host?
Die VPN-Verbindung direkt in der VM anzulegen, könnte evtl. gehen, aber das ist irgendwie unschön. Hätte das gerne alles über den Host geregelt.

MfG :)
 
naja die VM auf deinem Host nicht im Host-NAT betreiben

der VM eine eigene IP aus demLAN geben
und der VM ein eigenes VPN spendieren (konfigurieren)
 
OK. habe die VM jetzt auf "Netzwerkbrücke" eingestellt. Hängt also regulär im Netzwerk.

Aber wie gebe ich dem Teil jetzt einen VPN Tunnel? Die VM braucht ja einen VPN-Client (OpenVPN, IKEv2... whatever).
Naheliegend: VPN-Client auf die die VM packen. Funktioniert mit einer Ubuntu-VM problemlos.

Das Problem ist, dass meine VM ein Android x86 4.4 ist und da gibt es Probleme mit VPN-Clients.
Deshalb wollte ich die VM ungetunnelt rausfunken lassen und auf dem Host die Daten dann durch einen VPN-Client schieben, was ich aber nicht gebacken bekomme.
 
Hm.. Das Problem ist, dass Windows ausschließlich nach Ziel-IP routet. Fortgeschrittene Routingmechanismen (PBR = Policy Based Routing) sind gar nicht oder nur eingeschränkt möglich. Unter Linux könnte man beispielsweise ganz simpel per iptables Regeln definieren, die Traffic von der VM-IP nicht über den Internet-Router, sondern über das VPN routen.

Normalerweise würde ich das VPN daher in der VM selbst anlegen, da die VM ja eine eigene Routingtabelle hat und somit eben auch anders routen kann, zB über ein VPN. Kann man das VPN nicht in der VM anlegen und muss es stattdessen im Host einrichten, ist das aber ein Problem. Änlich wie man als Kunde zB bei der Telekom keinen Einfluss darauf hat welchen Weg die Daten nach dem Internetrouter nehmen - die gehen danach ja zum Provider-Gateway und der Provider routet das quer durch sein Netz und dann irgendwie zum Ziel - hat die VM keinen Einfluss darauf welchen Weg die Daten hinter der VM, im Host-System gehen (der Host ist quasi der Provider).
Der Host wiederum behandelt den Traffic von der VM ganz normal wie von jedem anderen Programm auch und routet stur nach der Ziel-IP - sofern eben nicht wie oben beschrieben PBR verwendet wird.

Mir ist unter Windows leider keine allgemeingültige Lösung für erweitertes Routing bekannt, außer vielleicht ForceBindIP. Das ist ein Tool, bei dem man bestimmten Programmen vorgeben kann, dass sie explizit über ein anderes Interface (zB WLAN oder eben auch VPN) geroutet werden sollen. Das könntest du mal ausprobieren und die VM-Applikation dort eintragen und via VPN routen. Verwendet habe ich das Tool selbst aber noch nicht, daher kann ich keine Garantie geben, dass es funktioniert.


Alternativ dazu wäre eine externe Lösung über einen separaten Router/PC denkbar. Linux drauf und mit iptables entsprechendes Routing einrichten und natürlich den VPN-Tunnel. Die VM würde dann ohne NAT direkt im LAN hängen und als Standard-Gateway nicht den Internet-Router, sondern den "VPN-Router" verwenden. Dafür eignet sich zB ein Router mit OpenWRT oder DD-WRT, aber auch ein Raspberry PI o.ä. Allerdings sollte man bedenken, dass sowohl Router als auch ein PI je nach Hardware, Verschlüsselung, etc. in der Regel maximal 10-15 Mbit/s VPN schafft, teilweise auch deutlich weniger. Mit viel Handarbeit habe ich meinen PI (B) auf 35 Mbit/s OpenVPN getrimmt. Je nach Internetanbindung und Verwendungszweck ist das aber zu verschmerzen. Ich hab zB eh nur VDSL25 (25 / 5) und da wären 15 Mbit/s nu auch kein Weltuntergang.
 
Zuletzt bearbeitet:
Erstmal danke für die ausführliche Antwort.

ForceBindIP habe ich mir gerade mal angeschaut. Das ist im Prinzip schon relativ praktisch und würde theoretisch funktionieren. Der Haken ist hier, dass sobald ich eine VPN-Verbindung in Windows direkt aktiviere, geh der komplette Traffic über den Tunnel und nicht nur der, den ich über ForceBindIP eingestellt habe. Man müsste eben einstellen können, dass trotz aktivierter VPN-Verbindung alles erstmal ohne rausgeht und über ForceBindIP dann die VM auf den Tunnel umbiegen... scheint aber nicht zu gehen.

Ich habe vor ein paar Tagen den "SoftEther VPN Client" ausprobiert. Hier kann man VPN-Verbindungen und virtuelle Netzwerkkarten anlegen. Praktisch, da ich damit die Verbindung auf eine seperate Karte lege und in der VirtualBox entsprechend diese Karte als "Netzwerkbrücke" angebe. Hier hägt es aber am VPN-Anbieter, der mit SoftEther klar kommen muss. Man kann hier offenbar nicht sagen, welches Protokoll er verwenden soll, sondern das wird scheinbar vom Server entschieden. Bisher habe ich nur einen VPN-Anbieter gefunden, der das aber nur mit Premium-Account erlaubt. Das wird sich so nicht großartig lohnen.

Der Weg über einen PI klingt gar nicht so blöd. Habe sogar noch einen PI B hier rumfliegen. Aber auch hier wird doch das Umleiten des Traffics das Problem sein, oder? Du meinst, den Traffic erst durch das PI zu jagen und der routet das dann entsprechend?

Was ich auch probiert habe, ist eine Ubuntu VM mit VPN-Client und darin dann eine weitere Android VM. Nicht schön, aber wäre ok. Wegen fehlender Virtualisierung für VM's in der VM, leider kein Weg.
 
Aefan schrieb:
Der Haken ist hier, dass sobald ich eine VPN-Verbindung in Windows direkt aktiviere, geh der komplette Traffic über den Tunnel und nicht nur der, den ich über ForceBindIP eingestellt habe.
Grundsätzlich sag ich da mal nein. Ein VPN ist lediglich ein virtuelles Netzwerk. Inwiefern geroutet wird ist eine Frage des Setups. Man kann zB ohne Probleme 3 VPNs gleichzeitig betreiben und zB zwei ins Büro bzw. nach Hause und eine dritte zB zu Cyberghost. Je nach Routingtabelle wird dann zB 192.168.1.0/24 über VPN#1, 192.168.2.0/24 über VPN#2 und der Rest über VPN#3. Es ist alles nur eine Frage des Standardgateways und der Routen.

Du kannst dir das unter Windows so anschauen:

Start -> cmd -> route print

Mach das einmal ohne und einmal mit VPN. So wie du das beschreibst, wird der VPN-Client das Standardgateway ändern. Normalerweise kann man das in der Konfiguration des Clients bzw. der Verbindung anpassen.


Zu ForceBindIP kann ich wie gesagt nichts sagen, weil ich es selbst nicht nutze. Der Beschreibung nach zu urteilen kann man dort aber einer Anwendung (zB einem VM-Player) eine Netzwerkkarte zuweisen, zB den VPN-Adapter. Dann sollte diese Anwendung demnach über das VPN online gehen. Keine Ahnung ob das so funktioniert oder nicht, sorry..



Der Weg über einen PI klingt gar nicht so blöd. Habe sogar noch einen PI B hier rumfliegen. Aber auch hier wird doch das Umleiten des Traffics das Problem sein, oder? Du meinst, den Traffic erst durch das PI zu jagen und der routet das dann entsprechend?

Was ich auch probiert habe, ist eine Ubuntu VM mit VPN-Client und darin dann eine weitere Android VM. Nicht schön, aber wäre ok. Wegen fehlender Virtualisierung für VM's in der VM, leider kein Weg.
Die VM ohne NAT ins Netzwerk hängen. Dann gibst du ihr eine statische IP in deinem Subnetz (zB 192.168.2.123). Als Standard-Gateway gibst du dann die IP des PI an anstelle der Router-IP, also zB 192.168.2.2. Als DNS nimmst du entweder ebenfalls die PI-IP oder zB 8.8.8.8. Im ersten Fall muss auf dem PI aber ein DNS-Server laufen, sonst klappt das nicht.
Nun wird die VM den PI als Internetgateway verwenden und der wiederum schickt alles via VPN ins www.

Schau mal hier: https://www.kadder.de/2013/12/raspberry-pi-als-vpn-gateway/
 
Zuletzt bearbeitet:
Verstehe. Das mit dem Netzwerken ist soweit einleuchtend.

Wenn ich die VPN-Verbindung aufbaue, steht über "route print" die Adresse vom VPN als 0.0.0.0/0 drin. Das müsste ja dann quasi der Standardgateway sein. Meine Adresse steht zusätzlich ebenfalls als 0.0.0.00 drin, allerdings bekommen alle Routen eine deutlich höhere Metrik, als die VPN-Routen.

Bei der VPN-Verbindung habe ich nun den Haken raus bei "Standardgateway für das Remotenetzwerk verwenden". Aktiviere ich jetzt die Verbindung, gehen alle Programme auf dem System am VPN vorbei. Soweit, so gut.
Über "route print" sind die Metriken nun unverändert und die Route steht als 10.0.0.0/8 drin.

Das heißt, alles was an dieser 10er-Netz geht, läuft dann ja über das VPN?
Ich habe einfach mal einen Microsoft-Loopback-Adapter angelegt und eine 10er IP vergeben. Geht aber irgendwie nicht. Er baut zwar die Verbindung laut Netzwerkverbindungen auf, aber z.B. im Browser auf der VM lässt sich nichts aufrufen.
 
Jep, so funktioniert die Routingtabelle ;)

Aefan schrieb:
Das heißt, alles was an dieser 10er-Netz geht, läuft dann ja über das VPN?
Ganz genau, weil 10.0.0.0/8 vermutlich das VPN-Subnetz ist. Die Route muss sogar sein, weil sonst das VPN per Definition nicht funktioniert. Ist vergleichbar mit der Route ins heimische LAN (zB 192.168.2.0/24)




Wie gesagt, wenn es mit ForceBindIP nicht klappt, sehe ich schwarz. Es ist bei Windows schlicht und ergreifend nicht vorgesehen, nach anderen Kriterien als der Ziel-IP zu routen. Gewissermaßen failure by design. Du wirst jetzt wohl den Weg via Router/PI gehen müssen.
 
Zuletzt bearbeitet:
OK. Dann versteh ich das soweit.

Aber dann müsste doch eigentlich der Weg möglich sein, einem neuen Adapter, z.B. einem Loopback-Adapter eine 10er IP zu geben, oder?

Das blöde ist ja, dass es über die Windows-Firewall easy wäre. Heimnetz einfach als Heimnetz definieren, das VPN als "öffentliches Netz" und die VM einfach für das Heimnetz blocken. Er läuft dann über das nächste erreichbare Netz, was das VPN wäre.
Mit Norton so aber nicht einstellbar.
 
Hm.. Da kann ich dir leider nicht helfen. Mit dem Loopback-Adapter habe ich das offen gestanden nie ausprobiert, weil ich bei mir sowieso einen Ubuntu-Server stehen habe, der das Routing übernimmt.
 
OK danke auf jeden fall für die Infos :)
 
Zurück
Oben