多个子网之间的路由

gre*_*ine 11 linux networking routing iptables subnets

假设我想创建一个具有 4 个子网的内部网络。没有中央路由器或交换机。我有一个“管理子网”可用于链接所有四个子网 (192.168.0.0/24) 上的网关。一般图表如下所示:

10.0.1.0/24 <-> 10.0.2.0/24 <-> 10.0.3.0/24 <-> 10.0.4.0/24
Run Code Online (Sandbox Code Playgroud)

换句话说,我在每个子网上配置了一个 linux box,有 2 个接口,一个 10.0.x.1 和 192.168.0.x。它们用作每个子网的网关设备。每个 10.x/24 子网将有多个主机。其他主机将只有 1 个接口可用作 10.0.xx

我希望每个主机都能够 ping 任何其他子网上的其他主机。我的第一个问题是:这可能吗?其次,如果是这样,我需要一些帮助来配置 iptables 和/或路由。我一直在试验这个,但只能提出一个允许在一个方向上进行 ping 的解决方案(icmp 数据包只是一个例子,我最终想要主机之间的完整网络功能,例如 ssh、telnet、ftp 等) .

Joh*_*éen 8

好的,所以您有五个网络10.0.1.0/2410.0.2.0/2410.0.3.0/2410.0.4.0/24192.168.0.0/24,以及在它们之间路由的四个框。比方说,路由框有地址10.0.1.1/192.168.0.110.0.2.1/192.168.0.210.0.3.1/192.168.0.3,和10.0.4.1/192.168.0.4

您需要10.0.x.0/24使用如下命令(已编辑!)将静态路由添加到每个路由器盒上的其他网络:

# on the 10.0.1.1 box
ip route add 10.0.2.0/24 via 192.168.0.2
ip route add 10.0.3.0/24 via 192.168.0.3
ip route add 10.0.4.0/24 via 192.168.0.4
Run Code Online (Sandbox Code Playgroud)

以及其他路由器盒上的相应路由。在只有一个接口的非路由框上,将默认路由设置为指向10.0.x.1。当然,您还必须在所有接口上添加静态地址和网络掩码。

另请注意,默认情况下 linux 不用作路由器,您需要使用以下命令启用数据包转发:

echo 1 > /proc/sys/net/ipv4/ip_forward
Run Code Online (Sandbox Code Playgroud)

ip上面的命令不会使设置持久化,如何做到这一点取决于发行版。

正如我所说,我没有测试过这个,可能忘记了一些东西。