Enrutar el tráfico de QEMU VM a través de hosts VPN

Enrutar el tráfico de QEMU VM a través de hosts VPN

tl;dr Host se conecta a través de VPN a Internet y una VM en este host no pasa por esta VPN (pero debería hacerlo). Creo que la configuración de la red no es del todo correcta.

El anfitrión

El host (arch Linux) se conecta a una red VPN usando openvpn y un archivo de configuración, por lo que hay un dispositivo TUN ( tun0) creado por openvpn. El dispositivo físico se llama eno1.

Busqué mucho en Internet y escribí un script para crear una red puente a la que se pueda conectar la VM. Este script crea un puente br0y un dispositivo TAP tap0. También edita la tabla de enrutamiento, para que tenga acceso normal a Internet en el host a través de mi VPN. La tabla se ve así:

~# 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

Las direcciones y la configuración se ven así:

~# 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

la máquina virtual

Como se mencionó anteriormente, es una máquina virtual centos 7 que ejecuto usando virt-manager y /usr/bin/qemu-system-x86_64como emulador. En la configuración de red utilizo un dispositivo compartido ( br0) virtiocomo modelo de dispositivo.

En el lado de las máquinas virtuales, parece mucho más simple. La tabla de enrutamiento:

~# 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

Y las direcciones:

~# 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

Mi problema:

La VM no parece enviar el tráfico a través de mi VPN (la VM tiene tiempos de ping a Google más rápidos que el host y mtrtambién es diferente). En lugar de eso, directamente a Internet. Creo que tengo que editar las tablas de enrutamiento, pero no sé cómo.

Me cansé de cambiar la IP de la ruta predeterminada a 192.168.178.120( br0IP) y también a 192.168.178.29( eno1IP), pero no funcionó. También creé una IP para tap0y la configuré como ruta predeterminada en la VM, pero tampoco funcionó.

información relacionada