为本地网络用户提供到本地网络机器的端口转发

为本地网络用户提供到本地网络机器的端口转发

我网络中的所有机器都基于 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 上与我的主服务器一起工作。

但我认为,这个解决方案不起作用,因为当邮件服务器 192.168.0.2 决定将数据包发送回客户端(192.168.0.3)时,它不需要网关(192.168.0.1)的帮助,因为它是一个本地网络。

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

答案1

您说得对,数据包将被发送回源地址,而不是通过 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 是一个问题,则可以创建一个单独的子网(例如 192.168.220.0/30 - 掩码只允许 ip 1 和 2)并路由流量,需要一个额外的路由表才能使流量从 smtp 服务器正确流出,以便在进入该地址后返回包。

相关内容