
tl;dr Der Host verbindet sich über VPN mit dem Internet und eine VM auf diesem Host läuft nicht über dieses VPN (sollte es aber). Ich glaube, die Netzwerkkonfiguration ist nicht ganz korrekt.
Der Gastgeber
Der Host (Arch Linux) stellt über OpenVPN und eine Konfigurationsdatei eine Verbindung zu einem VPN-Netzwerk her. Daher wird tun0
von OpenVPN ein TUN-Gerät ( ) erstellt. Das physische Gerät heißt eno1
.
Ich habe viel im Internet gesucht und ein Skript geschrieben, um ein überbrücktes Netzwerk zu erstellen, mit dem sich die VM verbinden kann. Dieses Skript erstellt eine Brücke br0
und ein TAP-Gerät tap0
. Es bearbeitet auch die Routing-Tabelle, sodass ich über mein VPN normalen Internetzugang auf dem Host habe. Die Tabelle sieht folgendermaßen aus:
~# netstat -rn
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 10.1.102.1 128.0.0.0 UG 0 0 0 tun0
10.1.102.0 0.0.0.0 255.255.255.0 U 0 0 0 tun0
81.95.5.34 192.168.178.1 255.255.255.255 UGH 0 0 0 br0
128.0.0.0 10.1.102.1 128.0.0.0 UG 0 0 0 tun0
192.168.178.0 0.0.0.0 255.255.255.0 U 0 0 0 br0
Die Adressen und die Konfiguration sehen wie folgt aus:
~# ip addr
2: eno1: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc fq_codel master br0 state UP group default qlen 1000
link/ether e0:3f:49:48:eb:6e brd ff:ff:ff:ff:ff:ff
inet 192.168.178.29/24 brd 192.168.178.255 scope global eno1
valid_lft forever preferred_lft forever
95: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 100
link/none
inet 10.1.102.248/24 brd 10.1.102.255 scope global tun0
valid_lft forever preferred_lft forever
inet6 fdbf:1d37:bbe0:0:22:6:0:1248/112 scope global
valid_lft forever preferred_lft forever
inet6 fe80::5ee5:c367:ab47:5928/64 scope link stable-privacy
valid_lft forever preferred_lft forever
96: tap0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel master br0 state DOWN group default qlen 1000
link/ether 7a:22:5d:99:01:06 brd ff:ff:ff:ff:ff:ff
97: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 7a:22:5d:99:01:06 brd ff:ff:ff:ff:ff:ff
inet 192.168.178.120/24 brd 192.168.178.255 scope global noprefixroute br0
valid_lft forever preferred_lft forever
inet6 fe80::d731:e2c8:a4f8:224e/64 scope link
valid_lft forever preferred_lft forever
inet6 fe80::7822:5dff:fe99:106/64 scope link
valid_lft forever preferred_lft forever
98: vnet0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master br0 state UNKNOWN group default qlen 1000
link/ether fe:54:00:10:76:e0 brd ff:ff:ff:ff:ff:ff
inet6 fe80::790c:464b:74f6:6754/64 scope link
valid_lft forever preferred_lft forever
inet6 fe80::fc54:ff:fe10:76e0/64 scope link
valid_lft forever preferred_lft forever
Die VM
Wie oben erwähnt, handelt es sich um eine CentOS 7-VM, die ich mit dem Virt-Manager und /usr/bin/qemu-system-x86_64
als Emulator ausführe. In den Netzwerkeinstellungen verwende ich ein freigegebenes Gerät ( br0
) mit virtio
als Gerätemodell.
Auf der VM-Seite sieht es viel einfacher aus. Die Routing-Tabelle:
~# netstat -rn
Kernel IP Routentabelle
Ziel Router Genmask Flags MSS Fenster irtt Iface
0.0.0.0 192.168.178.1 0.0.0.0 UG 0 0 0 eth0
192.168.178.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
Und die Adressen:
~# ip addr
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 52:54:00:10:76:e0 brd ff:ff:ff:ff:ff:ff
inet 192.168.178.105/24 brd 192.168.178.255 scope global noprefixroute dynamic eth0
valid_lft 860890sec preferred_lft 860890sec
inet6 fe80::47ed:5e58:2c27:6b50/64 scope link noprefixroute
valid_lft forever preferred_lft forever
Mein Problem:
Die VM scheint den Datenverkehr nicht über mein VPN zu senden (die VM hat schnellere Ping-Zeiten zu Google als der Host und mtr
ist auch anders). Stattdessen direkt ins Internet. Ich glaube, ich muss die Routing-Tabellen bearbeiten, aber ich weiß nicht wie.
Ich habe versucht, die IP der Standardroute in 192.168.178.120
( br0
IP) und auch in 192.168.178.29
( eno1
IP) zu ändern, aber das hat nicht funktioniert. Ich habe auch eine IP für die erstellt tap0
und sie als Standardroute in der VM festgelegt, aber das hat auch nicht funktioniert.