我正在尝试在服务器上设置 2 个网络,通过第三个接口连接到互联网。拓扑如下:
- eth0 :192.168.0.1 是互联网接口,通过 192.168.0.254 路由
- eth1 :是本地网络之一:172.16.1.0
- eth2 :是另一个:172.16.2.0 eth1 和 eth2 在 /etc/network/interfaces 中的设置方式完全相同
我从路线获得以下结果:
> Kernel IP routing table
> Destination Gateway Genmask Flags Metric Ref Use Iface
> default 192.168.0.254 0.0.0.0 UG 100 0 0 eth0
> 172.16.1.0 * 255.255.255.0 U 0 0 0 eth1
> 172.16.2.0 * 255.255.255.0 U 0 0 0 eth2
> 192.168.0.0 * 255.255.255.0 U 0 0 0 eth0
从 172.16.1.0 上的任何机器,我都可以 ping 8.8.8.8 或我网络内的任何地址。从 172.16.2.0 上的机器,只能 ping 本地机器,而不能访问互联网。所以ping 8.8.8.8
失败了。
这是为什么?我尝试过启用和禁用 ufw。我不明白为什么 eth2 没有通过 eth0 路由到互联网!
感谢您建议使用 traceroute。服务器很好地连接了 2 个子网络。我从 172.16.1.x 上的任何机器连接到 172.16.2.x 上的任何机器,反之亦然。似乎对互联网接口的数据包的处理给 172.16.2.0 带来了问题。以下是 2 条 traceroute:
来自机器 172.16.1.6 :
traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets
1 gaudi.wombats.org (172.16.1.1) 0.264 ms 0.257 ms 0.484 ms
2 192.168.0.254 (192.168.0.254) 1.132 ms 1.130 ms 1.122 ms
3 88.161.205.254 (88.161.205.254) 24.379 ms 24.837 ms 26.092 ms
来自机器 172.16.2.2:
traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets
1 172.16.2.1 (172.16.2.1) 0.338 ms 0.336 ms 0.318 ms
2 * * *
3 * * *
4 * * *
5 * * *
6 * * *
7 *^C
因此,尽管路由表明默认值为 192.168.0.254,但它似乎并不适用于来自 172.16.2.0 的数据包。
答案1
这个技巧很简单,我忘了允许来自接口 eth2 的伪装。所以我在 /etc/ufw/before.rules 中添加了以下行(在 eth1 的同一行之后):
-A POSTROUTING -s 172.16.2.0/24 -o eth0 -j MASQUERADE
这招奏效了!