数据包经过linux时的流向图:
源地址发送数据--> {PREROUTING-->路由规则-->POSTROUTING} -->目的地址接收到数据
当你使用:iptables -t nat -A PREROUTING -i eth1 -d 1.2.3.4 -j DNAT --to 192.168.1.40
时,你访问1.2.3.4,linux路由器会在“路由规则”之前将目的地址改为192.168.1.40,并且Linux路由器(iptables)会同时记录下这个连接,并在数据从192.168.1.40返回时,经过linux路由器将数据发送到那台发出请求的机器。
当你使用:iptables -t nat -A POSTROUTING -d 192.168.1.40 -j SNAT --to 192.168.1.1时,数据在出了机器之后,数据源地址改为192.168.1.1,记录该链接,发送到192.168.1.40后,192.168.1.40会将数据返回到地址192.168.1.1。机器192.168.1.1将数据转发到请求的地址