如何对 LAN 进行路由?

如何对 LAN 进行路由?

我有一个包含一台 PC 和 3 台树莓派的私人网络。

PC--RPi1--RPi2--RPi3
  • PC:192.168.0.101/24(ssh 到 RPi1)
  • RPi1:192.168.0.102/24(eth0 链接到 PC)&& 192.168.0.103/24(eth1 链接到 Rpi2)
  • Rpi2:192.168.0.104/24(eth0 链接到 Rpi1)&& 192.168.0.105/24(eth1 链接到 Rpi3)
  • RPi3:192.168.0.106/24(eth0 链接到 Rpi2)

我想从 RPi1 向 RPi3 发送一条消息。它不起作用

我应该更改路由表吗?该如何更改?

答案1

首先,这不是常规 IP 路由和子网的工作方式。

路由器一般位于之间网络(子网)。它们将多个网络连接在一起 - 一个接口属于子网 A,另一个接口属于子网 B。它们转发 IP 数据包,但不转发以太网帧(实际上它们可能连接根本不像以太网的网络)。

(例如,连接 PC–RPi1 将使用 192.168.0.0/24 中的地址,而连接 RPi1–RPi2 将使用 192.168.1.0/24 等等。)

您的配置期望相反。您已将设备上的所有接口配置为位于同一子网中,这有两个问题:

  1. 所有设备都希望其余设备在以太网级别上可直接访问(因为子网掩码告诉它们如此),但实际上并非如此:例如,PC 和 RPi2 被路由器(RPi1)隔开。当 PC 发送 ARP 查询(广播)时,该查询不会通过路由器。如果 PC 将以太网帧直接发送到 RPi2 的 MAC 地址,它也不会到达任何位置,因为 RPi2 不在同一个以太网上。

  2. 为同一子网配置了多个接口的设备无法神奇地知道哪个地址可以通过哪个接口访问。例如,当 RPi2 想要将数据包发送到 192.168.0.102 时,它需要在两个冲突的路由之间进行选择:“eth0 上的 192.168.0.0/24”和“eth1 上的 192.168.0.0/24”。它如何知道要使用哪条路由?

如果你必须使用单个子网,那么像这样的“链”可以通过两种方式工作:

  • 您可以为每个设备上的每个设备添加单独的主机路由。(例如,RPi2 将有一条到 PC 的路由、一条到 RPi1 的路由和一条到 RPi3 的路由。)这很快就会产生大量路由,因此最好使用路由协议例如 Babel 或 OSPF。

    当所有接口都配置为 /32(即网络掩码 255.255.255.255)时,此方法效果最佳,这样它们就不会假设每个人都在子网中。

  • 你可以接口代替它们之间的路由。在 IP 级别,网桥就像一个具有多个“输出”的单个接口(单个 IP 地址等),并将在它们之间转发所有以太网帧,就像以太网交换机/集线器一样。因此,br0在 RPi1/2 上创建一个并将 eth0 和 eth1 放入其中后,然后两个接口将创建一个大型子网。

相关内容