Rotear o tráfego de VM do QEMU por meio de VPN de hosts

Rotear o tráfego de VM do QEMU por meio de VPN de hosts

dr Host se conecta via VPN à Internet e uma VM neste host não passa por essa VPN (mas deveria). Acho que a configuração da rede não está correta.

O host

O host (arch Linux) se conecta a uma rede VPN usando openvpn e um arquivo de configuração, então há um dispositivo TUN ( tun0) criado por openvpn. O dispositivo físico é chamado eno1.

Pesquisei muito na internet e escrevi um script para criar uma rede em ponte onde a VM possa se conectar. Este script cria uma ponte br0e um dispositivo TAP tap0. Ele também edita a tabela de roteamento, para que eu tenha acesso normal à Internet no host através da minha VPN. A tabela fica assim:

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

Os endereços e configuração são assim:

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

A máquina virtual

Como mencionado acima, é uma VM centos 7 que executo usando o virt-manager e /usr/bin/qemu-system-x86_64como emulador. Nas configurações de rede eu uso um dispositivo compartilhado ( br0) virtiocomo modelo de dispositivo.

Do lado das VMs parece muito mais simples. A tabela de roteamento:

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

E os endereços:

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

Meu problema:

A VM não parece enviar o tráfego através da minha VPN (a VM tem tempos de ping mais rápidos para o Google do que para o host e mtrtambém é diferente). Em vez disso, diretamente para a Internet. Acho que tenho que editar as tabelas de roteamento, mas não sei como.

Cansei de mudar o IP da rota padrão para 192.168.178.120( br0IP) e também para 192.168.178.29( eno1IP) mas não funcionou. Também criei um IP para tap0e configurei-o como rota padrão na VM, mas também não funcionou.

informação relacionada