在Linux服务器的2个networking接口上设置MASQUERADE可以吗?

有一个Linux服务器有3个networking接口, eth0, eth1, eth2 。 此服务器中已启用IP转发。

  1. eth0连接到10.0.1.0/24。 它的IP是10.0.1.1
  2. eth1连接到172.16.1.0/24。 它的IP是172.16.1.1 。 服务器A可以ping 172.16.1.2的路由器C.
  3. eth2连接到192.168.1.0/24。 它的IP是192.168.1.1 。 服务器A可以ping 192.168.1.2的服务器B.
  4. 路由器C能够路由到172.16.2.0/24和172.16.3.0/24。
                                           [10.0.1.0/24]
                                                 |
 172.16.2.0/24 ------ |  |
                    [C] ------ 172.16.1.0/24------[A]------192.168.1.0/24------[B]
 172.16.3.0/24 ------ |

我们在eth0上设置了MASQUERADE。 当服务器B(192.168.1.2)连接到10.0.1.0/24时,IP MASQUERADE将在eth0发生。

我们可以在eth1上设置MASQUERADE吗? 在Linux的多个networking接口上设置MASQUERADE可以吗?

是的,可以有多个MASQUERADE规则。 通常情况下,每个规则将匹配出去特定接口的数据包,例如:

 iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE 

第一个规则匹配eth0数据包,第二个匹配eth1数据包。