我在我的设置中有零星的路由问题,我怀疑是路由和两个networking接口的问题。
虚拟机也有两个(虚拟)网卡,eth0拥有自己的公有IP,eth1用于本地stream量。
偶尔我可以从外面到达服务器,但是他们不能在本地ping到/到达对方。
configuration:
Public IP local IP xh01 aa.bb.10.214 192.168.1.1 xh02 aa.bb.10.215 192.168.1.2 lb01 aa.bb.10.242 192.168.1.3 lb02 aa.bb.10.241 192.168.1.4 be01 aa.bb.10.239 192.168.1.5 be02 aa.bb.10.240 192.168.1.6
lb01上的示例路线:
Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 aa.bb.10.215 0.0.0.0 UG 100 0 0 eth0 aa.bb.10.192 aa.bb.10.193 255.255.255.192 UG 0 0 0 eth0 aa.bb.10.193 0.0.0.0 255.255.255.255 UH 0 0 0 eth0 192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
现在,有时例如我不能从be01 ping lb01。
使用lb01上的'tcpdump',我可以看到ICMP回应请求到达lb01,但是我看不到答案。 另外,如果我在其中一台主机上发送tracepath,ping会突然收到回复。
我的怀疑是,既然机器可以通过两个接口互相连接,一个连接的输出stream量就不会和input一样。 我想这意味着我必须build立不同的路由表?
能有一个更深入的知识在整个路由的东西给我一些提示如何解决这个问题?
从发布的主机上的路由表中看不到路由问题。 但是,我注意到你正在使用一些非常尴尬的行为,即你在没有地址的子网中设置了两个网关,其中一个你没有本地路由,这让我想知道你是否击中了一些未定义的行为。 我会好奇的看到主机上的ARP表的内容,而ping不通过。
我想我明白你在这里要做什么 – 这种事情是非标准的。 试图通过一个networking上的网关强制stream量似乎有些没有意义,但是对于那些直接连接到其他子网的主机来说,似乎有些没有意义,但是如果您想要通过路由器发送stream量,正确的解决scheme是configuration/ 30每个主机的子网。
如果不这样做,那么网关可能会进行某种有状态的处理(如m_conntrack,如果它正在运行linux),并且严重未被configuration,或者您可能会丢失数据包。 或者,Xen服务器可能需要花费一些时间来确定数据包的位置,尤其是在使用openvswitch的时候,会出现很多令人惊讶的状态行为。 也可能要求在接收入站stream量之前发送一些出站stream量,虽然这是不常见的。
如果路由表看起来像是这样,肯定不是通过eth1传输到非RFC1918networking的stream量。 没有路线可以做到这一点。 另外,请记住,每个主机都有一个路由表,其中路由与接口关联。 任何需要路由的数据包(基本上是一个出站数据包)都会遍历同一个表,并遵循相同的规则,匹配最具体的路由,使用度量标准来断开关系。