具有 3 个接口的路由表

具有 3 个接口的路由表

我正在尝试在服务器上设置 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

这招奏效了!

相关内容