SNAT 和 DNAT 是 iptables(防火墙firewall) 中使用 NAT 规则相关的的两个重要概念。如果内网主机访问外网而经过路由时,源 IP 会发生改变,这种变更行为就是 SNAT;反之,当外网的数据经过路由发往内网主机时,数据包中的目的 IP (路由器上的公网 IP) 将修改为内网 IP,这种变更行为就是 DNAT 。图是借的。
与 SNAT 和 DNAT所对应的两个链分别是 POSTROUTING和PREROUTING 。
通常内网到外网是pre,外网到内网是post,但是外还是内只是个相对概念,在一定条件下是可以转换的。落实到网卡上,对于每个网卡数据流入的时候必然经过pre,数量流出必然经过post
POSTROUTING是源地址转换,要把你的内网地址转换成公网地址才能让你上网。
PREROUTING是目的地址转换,要把别人的公网IP换成你们内部的IP,才让访问到你们内部受防火墙保护的机器
PREROUTING
当外网的数据包进入到内网时,我们需要修改数据包中的公网 IP 为内网的主机 IP,这种 DNAT 的行为规则就要在 PREROUTING 链里添加。
POSTROUTING
和 PREROUTING 不同,在执行 SNAT 任务时的行为规则就添加在 POSTROUTING 链中。