Eu tenho um host baseado em CentOS e uma máquina virtual baseada em Debian KVM. Um host possui uma ponte Ethernet em sua interface de rede externa, essa ponte é usada pelo KVM:
br0 Link encap:Ethernet HWaddr 00:25:90:01:5E:92
inet addr:5.XX.XX.84 Bcast:5.XX.XX.255 Mask:255.255.255.0
inet6 addr: fe80::fc54:ff:feaf:95b3/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:2893439068 errors:0 dropped:0 overruns:0 frame:0
TX packets:2943859744 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:3109906781642 (2.8 TiB) TX bytes:3271403241664 (2.9 TiB)
br0:0 Link encap:Ethernet HWaddr 00:25:90:01:5E:92
inet addr:10.228.0.1 Bcast:10.228.0.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
A ponte tem dois IPs, um externo e outro de uma LAN virtual entre o host e o convidado. Ele age como um gateway padrão para o convidado. O STP está desligado na ponte.
O problema é que o convidado recebeu uma regra de roteamento estranha de alguma forma:
root@new:~# ip route get 50.31.164.148
50.31.164.148 via 5.XX.XX.81 dev eth0 src 10.228.0.250
cache ipid 0x0dfb rtt 4.781s rttvar 4.297s ssthresh 7 cwnd 9
root@new:~#
5.XX.XX.81
é um gateway padrão do host e não consigo encontrar esse IP em nenhum lugar nas tabelas de roteamento estático do convidado:
root@new:~# ip route list
default via 10.228.0.1 dev eth0
10.116.0.0/16 via 10.116.0.146 dev tun0
10.116.0.146 dev tun0 proto kernel scope link src 10.116.0.145
10.228.0.0/24 dev eth0 proto kernel scope link src 10.228.0.250
Eu me pergunto como isso foi possível e o que devemos fazer para evitar situações como essa?
É claro que ip route flush cache
nos salvou, mas definitivamente queremos eliminar o problema em si mesmo para não liberar cegamente o cache de roteamento periodicamente.