它是一个路由循环?节点无法通信


0

在图片情况1中,所有网络节点都能够相互ping通, 如图2所示添加另一个节点,我开始遇到问题

情况1: CASE 1 案例2: case 2

  • 机器h1充当具有两个以太网卡的路由器。
  • h1通过开关连接到h2,
  • h1通过带有交叉电缆的以太网端口直接连接到机器h3
  • h3通过开关连接到h4。

h1上的设置是

#ip addr add 172.16.192.1/22 dev eth0
#ip addr add 172.16.131.254/25 dev eth1
#ip forwarding is set to 1 in /etc/sysctl.conf

h2上的设置是

#ip addr add 172.16.192.2/22 dev eth0
#ip route add 172.16.131.128/25 via 172.16.192.1

h3上的设置是

#ip addr add 172.16.131.130/25 dev eth1
#ip addr add 172.16.131.129/25 dev eth0
#ip route add 172.16.192.0/22 via 172.16.131.254

h4上的设置是

#ip addr add 172.16.131.131/25 dev eth0
#ip route add 172.16.192.0/22 via 172.16.131.254

如果查看案例1和案例2的图片,将会注意到,如果添加了两个节点h4,则执行此机器h2不能再ping机器h3,但是在案例1中,ping是可能的。

现在请不要告诉我改变网络拓扑。它必须完全像这样......条件是不能使用桥!

我想知道是否存在一种循环,因为在h3的路由表中,它通过eth0和eth1有两个条目到它自己的子网。

无论如何我怎么能让h4能够ping h2?这个完全相同的设置?

Answers:


1

没有循环,恰恰相反。

第一个问题,当你的子网中间有路由器时,它的相邻设备无法通过它发送ARP查询。在你的情况下,h1认为h4的IP地址在eth1上是“本地的”(因为子网掩码是这样的)并且为它进行ARP查询,但ARP查询不能跨越路由器 - 即使它们这样做,结果也将无法使用因为到h4的MAC的数据包也无法通过路由器。

(而如果 他们 可以越过路由器,然后它将不再是路由器:它将成为一个桥梁。你说你不想要一座桥。)

通常,为了解决这个问题,h1-h3和h3-sw-h4连接需要是不同的子网。

要在不更改子网的情况下解决此问题,您需要在中间的路由器h3上启用“代理ARP”。它将回答h1用于h4的ARP查询 它自己的 MAC地址(并且将针对用于h1的h4的ARP查询执行相同的操作)。

Proxy-ARP是内置的内核功能,但如果它太有限或不灵活,它也可以由用户空间守护进程(parpd,parprouted)执行。


当你有两个同一子网的路由时,第二个问题是操作系统不知道 哪一个 要使用的路由 - 无论设备背后是哪个接口,它总是选择相同的路径。在你的情况下,很可能ping回复总是通过eth0,即使h2的网关是eth1。

如果您事先知道哪些设备在哪一侧,则可以为它们添加更具体的静态路由(并删除所有一个子网路由):

# ip route del 172.16.131.128/25 dev eth0
# ip route add 172.16.131.131/32 dev eth0

(您可以通过将eth0 IP地址直接配置为/ 32而不是/ 25来简化此操作。)

要自动执行此操作,您还可以使用“parprouted”等守护程序执行ARP代理并自动添加与ARP响应相对应的主机路由。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.