我有两台机器连接到同一个交换机。机器有多个以太网接口连接到不同的网络。计算机 A 可以 ping 连接到同一个交换机的天线,但无法使用正确的接口 ping 计算机 B。(在我的情况下通过 ping -I eth2),但计算机 B 可以 ping 天线,也可以使用正确的接口 ping 计算机 A(在我的情况下通过 ping -I eth9)。
我检查了接口详细信息,它们都有相同的子网掩码,我尝试了 tracert -i,结果与我上面提到的问题一致,但没有发现太多信息。计算机 A 上的 tracert 进行了 30 跳,最终无法到达计算机 B. route 命令显示路由表相似,我看到的唯一区别是计算机 B 在子网中定义了两个接口,但当时只有一个物理连接,这会导致这个奇怪的问题吗?任何建议都将不胜感激。
计算机A
eth0 Link encap:Ethernet HWaddr 68:05:ca:02:e3:5c
inet addr:16.1.8.61 Bcast:16.1.63.255 Mask:255.255.192.0
inet6 addr: fe80::6a05:caff:fe02:e35c/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:144031 errors:0 dropped:0 overruns:0 frame:0
TX packets:11423 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:11302308 (10.7 MiB) TX bytes:853551 (833.5 KiB)
Memory:fe8e0000-fe900000
eth2 Link encap:Ethernet HWaddr 00:d0:c9:ce:6d:7c
inet addr:192.168.1.15 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::2d0:c9ff:fece:6d7c/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:168 errors:0 dropped:0 overruns:0 frame:0
TX packets:402 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:17398 (16.9 KiB) TX bytes:41787 (40.8 KiB)
Memory:fe9e0000-fea00000
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:120 errors:0 dropped:0 overruns:0 frame:0
TX packets:120 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:8480 (8.2 KiB) TX bytes:8480 (8.2 KiB)
计算机B
eth7 Link encap:Ethernet HWaddr 00:d0:c9:ce:6c:b2
inet addr:16.1.8.64 Bcast:16.1.63.255 Mask:255.255.192.0
inet6 addr: fe80::2d0:c9ff:fece:6cb2/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:134026 errors:0 dropped:0 overruns:0 frame:0
TX packets:3212 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:10611871 (10.1 MiB) TX bytes:272509 (266.1 KiB)
Memory:fe9e0000-fea00000
eth8 Link encap:Ethernet HWaddr 68:05:ca:02:e1:c2
inet addr:192.168.1.60 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST MULTICAST MTU:8228 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Memory:fe8e0000-fe900000
eth9 Link encap:Ethernet HWaddr 68:05:ca:02:e1:c3
inet addr:192.168.1.57 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::6a05:caff:fe02:e1c3/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:383 errors:0 dropped:0 overruns:0 frame:0
TX packets:157 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:40794 (39.8 KiB) TX bytes:15778 (15.4 KiB)
Memory:fe880000-fe8a0000
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:250 errors:0 dropped:0 overruns:0 frame:0
TX packets:250 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:22872 (22.3 KiB) TX bytes:22872 (22.3 KiB)
路由表 A
Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.1.0 * 255.255.255.0 U 0 0 0 eth2 localnet * 255.255.192.0 U 0 0 0 eth0 default pfizmir.xxxx 0.0.0.0 UG 0 0 0 eth0
答案1
如果您在同一网络上有两个独立的物理接口,并连接到同一个 VLAN,则需要设置一些特定的路由规则,确保服务器在接收数据包的同一接口上做出响应。
您ip
可以创建附加表,这些表仅在其中一个接口上接收到流量时使用。
首先,您需要创建两个单独的路由表。
echo 201 E9 >> /etc/iproute2/rt_tables
echo 200 E8 >> /etc/iproute2/rt_tables
这将创建决定如何路由数据包的表。
ip route add 192.168.1.0 dev eth9 src 192.168.1.57 table E9
ip route add default via <your gateway for 192.168.1.0> table E9
ip route add 192.168.1.0 dev eth8 src 192.168.1.60 table E8
ip route add default via <your gateway for 192.168.1.0> table E8
ip rule add from 192.168.1.57 table E9
ip rule add from 192.168.1.60 table E8
这应该可以确保到达 eth9 的数据包在 eth9 上得到响应,依此类推。
与往常一样,我建议你阅读一下页,它很好地解释了这些概念,并且还为您提供了更多示例。