我有一个基于CentOS的主机和基于KVM Debian的虚拟机。 主机在其外部networking接口上有一个以太网网桥,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,一个来自外部,另一个来自主机和来宾之间的虚拟局域网。 它充当访客的默认网关。 STP在桥上closures。
问题是客人有某种奇怪的路由规则:
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是主机的默认网关,我无法在guest 5.XX.XX.81上的静态路由表中的任何位置find此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保存了我们,但是我们绝对不想盲目刷新路由caching。
(将我的评论转换为答案)
ICMPredirect,请参阅linux-ip.net/html/routing-icmp.html
你的解决scheme是非常不寻常的,通常不会桥接到一个真正的接口,但在主机上设置路由和伪装。