Wie kann ich VirtualBox-Gäste dazu bringen, die VPN-Verbindung des Hosts gemeinsam zu nutzen?

50

Frage

Wenn ich mein VPN auf meinem Ubuntu-Desktop-Computer starte, der als Router fungiert, verliert das angeschlossene Subnetz die Internetverbindung, ist jedoch weiterhin verfügbar (LAN). Im Idealfall möchte ich wissen, wie das angeschlossene Subnetz durch Routing durch den VPN-Tunnel wieder auf das Internet zugreifen kann, wenn das VPN aktiv ist.

Kontext

Ich habe folgendes Netzwerklayout:

Subnetz 172.16.0.0/20 auf eth0 für meine virtuellen VirtualBox-Maschinen.

Subnetz 192.168.0.0/24 auf eth0: 0, das eine Verbindung zum Gateway 192.168.0.1 mit Internetzugang herstellt.

Dies wird in der Datei / etc / network / interfaces gezeigt:

auto lo
iface lo inet loopback

# This is the subnet dedicated to VB
auto eth0
iface eth0 inet static
    address 172.16.0.1
    netmask 255.255.0.0
    gateway 192.168.0.164
    dns-nameservers 8.8.8.8

# normal DHCP internet
auto eth0:0
iface eth0:0 inet static
    address 192.168.0.164
    netmask 255.255.255.0
    dns-nameservers 8.8.8.8
    gateway 192.168.0.1

Die Pakete auf dem eth0 werden mit Masquerading über eth0: 0 weitergeleitet, und eine normale Internetverbindung ist in Ordnung. Wenn ich jedoch meinen VPN-Tunnel auf diesem Router starte, geht die Internetverbindung für die VMs im eth0-Subnetz verloren (bleibt jedoch für den Router bestehen).

Nachfolgend sehen Sie die Ausgabe von ifconfig, wenn der Tunnel aktiv ist:

eth0      Link encap:Ethernet  HWaddr 00:1f:bc:01:c3:ab  
          inet addr:172.16.0.1  Bcast:172.16.255.255  Mask:255.255.0.0
          inet6 addr: fe80::21f:bcff:fe01:c3ab/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:165426 errors:0 dropped:0 overruns:0 frame:0
          TX packets:182601 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:208264321 (208.2 MB)  TX bytes:16660945 (16.6 MB)
          Interrupt:16 

eth0:0    Link encap:Ethernet  HWaddr 00:1f:bc:01:c3:ab  
          inet addr:192.168.0.164  Bcast:192.168.0.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          Interrupt:16 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:381963 errors:0 dropped:0 overruns:0 frame:0
          TX packets:381963 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:22755054 (22.7 MB)  TX bytes:22755054 (22.7 MB)

tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  
          inet addr:10.8.0.10  P-t-P:10.8.0.9  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

Ich vermute, dass die Lösung etwas mit der Routingtabelle zu tun hat . Wenn der Tunnel aktiv ist, wird Folgendes angezeigt :

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         10.8.0.9        128.0.0.0       UG    0      0        0 tun0
default         192.168.0.1     0.0.0.0         UG    100    0        0 eth0
10.8.0.0        10.8.0.9        255.255.255.0   UG    0      0        0 tun0
10.8.0.9        *               255.255.255.255 UH    0      0        0 tun0
37.139.23.49    192.168.0.1     255.255.255.255 UGH   0      0        0 eth0
128.0.0.0       10.8.0.9        128.0.0.0       UG    0      0        0 tun0
link-local      *               255.255.0.0     U     1000   0        0 eth0
172.16.0.0      *               255.255.0.0     U     0      0        0 eth0
192.168.0.0     *               255.255.255.0   U     0      0        0 eth0

und Folgendes, wenn der Tunnel inaktiv ist :

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         192.168.0.1     0.0.0.0         UG    100    0        0 eth0
link-local      *               255.255.0.0     U     1000   0        0 eth0
172.16.0.0      *               255.255.0.0     U     0      0        0 eth0
192.168.0.0     *               255.255.255.0   U     0      0        0 eth0

Virtualbox-Konfiguration für Vms:

Bildbeschreibung hier eingeben

Eine der VMs- /etc/network/interfacesDateien:

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet static
        address 172.16.0.3
        netmask 255.255.0.0
        network 172.16.0.0
        broadcast 172.16.255.255
        gateway 172.16.0.1
        dns-nameservers 8.8.8.8
Programster
quelle
Wie sind die Netzwerke Ihrer VMs in VirtualBox konfiguriert?
zwets
bridges to eth0 - Info zur Frage hinzugefügt.
Programster
Ich weiß, es ist nicht genau die Antwort auf Ihre Frage, aber für mich stellte sich heraus, dass es einfacher war, stattdessen zwei VPN-Verbindungen einzurichten: eine vom Host-Computer, eine andere vom Gast-Computer
Zhenya

Antworten:

28

Dies funktioniert in einem Bridged Networking- Setup nicht. Aus der VirtualBox-Dokumentation :

Überbrückte Vernetzung

Dies ist für erweiterte Netzwerkanforderungen wie Netzwerksimulationen und das Ausführen von Servern in einem Gast vorgesehen. Wenn diese Option aktiviert ist, stellt VirtualBox eine Verbindung zu einer Ihrer installierten Netzwerkkarten her und tauscht Netzwerkpakete direkt aus, um den Netzwerkstack Ihres Host-Betriebssystems zu umgehen.

Da Ihre virtuellen Maschinen eth0direkt verwendet werden, ist ihnen die tun0Schnittstelle zu dem Tunnel, der darüber läuft, nicht bekannt. Sie müssen eine andere virtuelle Netzwerkkonfiguration verwenden.

Sie haben (unter anderem) folgende Möglichkeiten:

  • Network Address Translation (NAT) ist bei weitem die einfachste Lösung. VirtualBox wird die VMs über die Internetverbindung NAT, die dem Host zur Verfügung steht. Dies ist für die VMs vollständig transparent. Dies schließt jedoch Verbindungen vom Host zu den VMs oder Verbindungen zwischen den VMs aus.

  • Verwenden Sie Host-only Networking , um ein ordnungsgemäßes Subnetz zu erstellen, das die VMs und den Host enthält. Dies erfordert keine Änderungen an der Schnittstellenkonfiguration, die Sie jetzt in den VMs haben. Sie müssen jedoch den Host als Gateway und Router einrichten und die VMs als NAT nach außen bringen (unabhängig davon, ob es sich um VMs handelt eth0oder nicht tun0).

  • Kombinieren Sie das Obige: Geben Sie jeder VM zwei Schnittstellen, von denen eine ein Gateway zur Außenwelt (über das NAT der VirtualBox ) und die andere an das Nur-Host-LAN ​​angeschlossen ist .

  • Probieren Sie die experimentelle NAT-Netzwerkkonfiguration von VirtualBox aus . Update 2019: Diese Funktion ist seit gereift: heften sich an die NAT - Host und wählen Sie das paravirtualisierte Netzwerk (virtio-net) Adaptertyp.

zwets
quelle
34

Gehen Sie für VirtualBox mit Windows Host und Linux (Minze) Gast zur Registerkarte Netzwerk-UI und stellen Sie "Adapter" => "Attached to: NAT" und "Adaptertyp: Paravirtualized Network" ein. Danach starten Sie Ihre VM und Sie sollten in der Lage sein, das VPN-Netzwerk zu verwenden.

Aks
quelle
1
Das hat bei mir super geklappt, danke! Verwenden von Ubuntu 16.04LTS als Gast und Windows 10-Host mit Virtual Box 5.0.24.
Womp
1
Brillant! Dies funktioniert für meinen Windows 10-Host & VirtualBox (5.0.26) CentOS 7-Gast.
Zaki
1
Tolle! Sollte die akzeptierte Antwort sein. War auf der Suche nach dieser Lösung für Ewigkeiten. Danke vielmals!
MrSpock
1
beste antwort hier!
Mike
Warum zum Teufel ist das nicht die akzeptierte Antwort? So einfach und richtig!
Michael Goldshteyn
6

Nachdem ich überall nach dieser Lösung gesucht hatte, fand ich endlich eine funktionierende Lösung, die nicht viele Konfigurationsänderungen erfordert und wirklich einfach ist. Verwenden Sie das Standard-NAT-Netzwerk und geben Sie dies im Terminal ein:

VBoxManage modifyvm "VM name" --natdnsproxy1 on

Quelle: https://www.virtualbox.org/ticket/13993

Arier
quelle
4

Hatte das selbe Problem. So habe ich es gelöst:

  1. Ändern Sie den Netzwerktyp des Gastsystems in "Nur Host".
  2. Stellen Sie das Standard-Gateway von Guest auf die IP-Adresse des Hosts ifconfig vboxnet0, um sie zu finden.

Der letzte Schritt ist das Weiterleiten der von vboxnet0 kommenden Pakete in Ihr VPN.

Wenn Sie den gesamten Datenverkehr über VPN weiterleiten:

iptables -t nat -A POSTROUTING -s 192.168.5.0/24 ! -d 192.168.5.0/24 -o tun0 -j SNAT --to-source 10.8.0.5

Wo 10.8.0.5ist dein tun0 Gateway und wo 192.168.5.0/24ist deine vboxnet0 Netzwerkreichweite?

Wenn Sie nur bestimmten Datenverkehr über VPN weiterleiten:

iptables -t nat -A POSTROUTING -s 192.168.5.0/24 ! -d 192.168.5.0/24 -o tun0 -j SNAT --to-source 10.8.0.5
iptables -t nat -A POSTROUTING -s 192.168.5.0/24 ! -d 192.168.5.0/24 -o wlan0 -j SNAT --to-source 192.168.43.95

Wo 10.8.0.5ist Ihr tun0 Gateway und 192.168.43.95ist Ihr wlan0Gateway und 192.168.5.0/24ist Ihre vboxnet0 Netzwerkreichweite.

Hinweis: Mit dieser Lösung kann das Gastbetriebssystem genauso behandelt werden wie das Hostbetriebssystem. Nur IP-Adressen, die für die VPN-Übertragung im Host-Betriebssystem konfiguriert sind, werden in Guest übertragen.

Ramast
quelle
3

Hier finden Sie einige nützliche Informationen für Vagabund-Boxen, die Host-VPN verwenden. Grundsätzlich müssen Sie die Option natdnshostresolver1 festlegen. Beachten Sie jedoch, dass dies NICHT funktioniert, wenn Sie die Einstellung public_network des Vagrant verwenden.

  config.vm.provider :virtualbox do |vb|
      # ---- other options....
      vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
  end

http://renier.morales-rodriguez.net/post/90674523562/sharing-host-vpn-with-virtualbox-guest http://blog.geekslikeshinythings.com/2016/05/sharing-host-vpn-with-vagrant -rob-allen.html

Artistan
quelle
1
Der erste Link hatte die Lösung für mich. Es wird gezeigt, wie die Option natdnshostresolver1 für die VM aktiviert wird.
Kol