我有一台基于 CentOS 的主机和一台基于 KVM Debian 的虚拟机。主机在其外部网络接口上有一个以太网桥,该桥由 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
网桥有两个 IP,一个是外部 IP,另一个是主机和客户机之间的虚拟 LAN。它充当客户的默认网关。网桥上的 STP 已关闭。
问题是客人以某种方式得到了一条奇怪的路由规则:
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
是主机的默认网关,但我在客户机的静态路由表中找不到此 IP:
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
我想知道这怎么可能发生,我们应该怎么做才能防止这种情况发生?当然,这ip route flush cache
拯救了我们,但我们肯定希望消除问题本身,而不是盲目地定期刷新路由缓存。