创建以太网环路网络-如何配置路由

创建以太网环路网络-如何配置路由

我有一个必须配置为循环的网络。它由 3 个节点组成,每个节点都有两个接口。下图对此进行了说明。

+--->(eth0) Node 1 (eth1)--->(eth0) Node 2 (eth1)--->(eth0) Node 3 (eth1)--->+
|    10.0.3.1     10.0.1.1  10.0.1.2     10.0.2.2  10.0.2.3      10.0.3.3    |
+--<----------------------------<--------------------------------------------+

我想从节点 1 ping 到节点 3,这样请求就会经过节点 2,而答复则会从节点 3 直接发往节点 1。

node1$ ping 10.0.2.3

我已将节点配置为:

node1# route add -net 10.0.2.0/24 gw 10.0.1.2

node2# route add -net 10.0.3.0/24 gw 10.0.2.3

node3# route add -net 10.0.1.0/24 gw 10.0.3.1

运行 ping 时,来自节点 1 的请求到达节点 3。但是节点 3 没有回复,甚至没有生成回复(至少我可以用 wireshark 捕获到)。

你能给我一些提示吗?

助教

答案1

当一个节点选择来源数据包的来源 IP 地址,除非另有限制,它通常会选择到数据包目的地路由上下一跳“最接近”的 IP 地址。

从节点 1 的角度来看,到节点 3 的下一跳是10.0.1.2。最接近 的节点 1 IP 地址10.0.1.210.0.1.1,而不是10.0.3.1。(与目标位于同一子网上的 IP 地址被认为比不在同一子网上的 IP 地址“更接近”目标。)

检查 ping 的源 IP 地址。最有可能的是 ,而不是10.0.1.110.0.3.1如果节点 3 没有到 的路由10.0.1.1,它就无法回复。

答案2

节点正确地重复失败以防止失控桥接广播。我建议您运行生成树协议。这将允许您在所有节点之间设置完全正常运行的路由。除非您愿意限制第 2 层或第 3 层某些链路之间的连接,否则我想不出其他方法来做到这一点。

答案3

/sbin/route已弃用,请改用ip route)。

如果您希望数据包仅在一个方向上传输,则意味着每个节点都需要使用下一个节点作为其网关,无论目的地是什么。

node1# ip route add 10.0.0.0/22 via 10.0.1.2
node2# ip route add 10.0.0.0/22 via 10.0.2.3
node3# ip route add 10.0.0.0/22 via 10.0.3.1

但是,在大多数发行版中,反向路径过滤通常默认启用。反向路径过滤是针对传入数据包的过滤器,它尝试检查对此数据包的响应是否会发送到接收数据包的同一接口。这在路由对称的常见网络上是一件好事,但在您的情况下,您需要非对称路由,因此您可能只需在接收数据包的接口上禁用反向路径过滤,或者至少减少它,以便它只检查源 IP 是否可路由:

node1# sysctl -w net.ipv4.conf.eth0.rp_filter=2
node2# sysctl -w net.ipv4.conf.eth0.rp_filter=2
node3# sysctl -w net.ipv4.conf.eth0.rp_filter=2

关于反向路径过滤和其他选项的文档可以在内核文档中找到,网址为Documentation/networking/ip-sysctl.txt。在哪里可以找到这些内容取决于您的发行版(或者只需浏览网页即可ip-sysctl.txt)。

快乐循环!

相关内容