![使用带有两个 NIC 的 Linux 机器在两个子网之间进行路由](https://linux22.com/image/632387/%E4%BD%BF%E7%94%A8%E5%B8%A6%E6%9C%89%E4%B8%A4%E4%B8%AA%20NIC%20%E7%9A%84%20Linux%20%E6%9C%BA%E5%99%A8%E5%9C%A8%E4%B8%A4%E4%B8%AA%E5%AD%90%E7%BD%91%E4%B9%8B%E9%97%B4%E8%BF%9B%E8%A1%8C%E8%B7%AF%E7%94%B1.png)
我有一个带有两个 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 流量。