Buges
2020-01-27 21:48:46 +08:00
从路由的角度来说,因为包没有进行 SNAT,所以内网建立的连接,把包发到路由器的外网 ip 地址,但回来的包源地址是运行服务的设备的内网 ip 地址,本机就会将其丢弃。解决方法是为 DNAT 添加对应的 SNAT:
假设你的端口转发由以下 DNAT 规则实现:
#iptables -t nat -A PREROUTING --dst <路由器的公网 ip 地址> -p tcp --dport <路由器上暴露的端口> -j DNAT --to-destination <内网运行服务的 ip:端口>
那么添加一条对应的 SNAT 规则修正包的源地址:
#iptables -t nat -A POSTROUTING -p tcp --dst <内网运行服务的 ip> --dport <内网运行服务的端口> -j SNAT --to-source <路由器的内网地址>
这样回复的包会被发给路由器,防火墙在对其进行 Un-DNAT 操作将包发回本机。