使用带有两个 NIC 的 Linux 机器在两个子网之间进行路由

使用带有两个 NIC 的 Linux 机器在两个子网之间进行路由

我有一个带有两个 NIC 的 Linux 机器,每个 NIC 连接到不同的 LAN:

  • 网络 A: 192.168.1.0 255.255.255.0
  • 网络B: 192.168.2.0 255.255.255.0

路由器包括:

  • 192.168.1.1
  • 192.168.2.1

Linux NIC 包括:

  • 192.168.1.2
  • 192.168.2.2

我希望网络 A 中的所有主机都能够 ping 通网络 B 中的所有主机,反之亦然。

我目前所做的:

在 Linux 机器上sudo sysctl -w net.ipv4.ip_forward=1

在 192.168.1.1 上route add 192.168.2.0 255.255.255.0 gw 192.168.1.2

在 192.168.2.1 上route add 192.168.1.0 255.255.255.0 gw 192.168.2.2

我尝试使用两个不同的 Linux 发行版(Zentyal 和 Ubuntu),但没有任何效果。

网络 A 中的主机只能 ping 通192.168.2.2,但无法 ping 通网络 B 中的任何其他主机,反之亦然。我做错了什么?

答案1

您应该设置以下静态路由:

192.168.1.1路由器上:

192.168.2.0/24 next hop 192.168.1.2

192.168.2.1路由器上:

192.168.1.0/24 next hop 192.168.2.2

这样,这些网络中的其他计算机就会将数据包发送到其默认网关 (.1),然后默认网关使用其静态路由表条目将数据包转发到 Linux 机,然后将数据包转发到另一个网络。

答案2

如果我没记错的话,你有这个网络:

+-------+       +----------+       +-----------+       +----------+       +-------+
| LAN A | <---> | Router A | <---> | Linux Box | <---> | Router B | <---> | LAN B |
+-------+       +----------+       +-----------+       +----------+       +-------+

因此,这是正确的:

  • LAN A中所有主机的默认网关配置为192.168.1.1;
  • LAN B中所有主机的默认网关配置为192.168.2.1;

事实上,LAN A 中的主机和 LAN B 中的主机都不知道其他网络的存在,因此它们会将数据包发送到默认网关。如果默认网关知道它并且有一条进入那里的路由,它们就会使用它。所以,基本上,你要做的就是在路由器中创建这些路由,或者将主机的默认网关更改为 Linux Box。如果你的路由器没有创建静态路由的选项,或者你根本无法访问它们,那么你应该选择第二个选项。

如果我错了,请稍微澄清一下......

再见!

答案3

您必须在其他网络中的各个盒子上设置路由。例如,在 192.168.1.14 上,您必须route add 192.168.2.0 255.255.255.0 gw 192.168.1.2

答案4

如果您的 2 个网络应该直接连接到 Linux Box,则应该在每个主机中添加路由(并在需要时配置默认网关)。

如果网络连接到通过 Linux Box 连接的路由器,则应该为每个主机配置其正确的网关(路由器 1 或 2)并在每个路由器中配置路由。

您还应该验证 Linux Box 是否也阻止了 ICMP 流量。

相关内容