端口转发到本地networking用户的本地networking机器

我的networking中的所有机器都基于linux。 主服务器有192.168.0.1,邮件服务器有192.168.0.2,客户机有192.168.0.3 ip。

我已经添加

iptables -t nat -A PREROUTING -d 192.168.0.1 -p tcp -m tcp --dport 25 -j DNAT --to-destination 192.168.0.2:25 

在主服务器,因为我希望所有的客户端在我的主服务器上使用smtp。

但我认为,这个解决scheme不起作用,因为当邮件服务器192.168.0.2决定发送数据包回到客户端(192.168.0.3),它没有网关(192.168.0.1)的帮助,因为它是一个本地networking。

如何强制192.168.0.2通过网关发送所有的软件包?

你是正确的,包将被发回到源地址,而不是通过192.168.0.1。

 iptables -t nat -A POSTROUTING -p tcp --dport 25 -j SNAT --to-source 192.168.0.1 

这将使所有的连接看起来都是从192.168.0.1开始的,因此数据包将以相同的方式返回。

这样做的一个缺点就是真正的服务器不知道原来的IP地址。

如果原始IP是一个问题,可以创build一个单独的子网(比如说192.168.220.0/30 – 掩码只允许IP 1和2),并将stream量路由到另外一个路由表,以使stream量stream向在进入该地址后,从smtp服务器正确地返回包裹。