iptables NAT

SNAT,DNAT,MASQUERADE都是NAT

Netfilter Packet Traversal

iptables-5-steps

MASQUERADE是SNAT的一个特例,要允许带有内部 IP 地址的 LAN 节点和外部的公共网络通信,需要配置防火墙的 IP 伪装(IP masquerading)。这会把来自 LAN 节点的请求都伪装成防火墙的外部设备的 IP 地址

SNAT是指在数据包从网卡发送出去的时候,把数据包中的源地址部分替换为指定的IP,这样,接收方就认为数据包的来源是被替换的那个IP的主机

DNAT 修改数据包中的目的IP,如果你想让内部网络内的某个服务器能够被外部利用,你可以使用 NAT 内 PREROUTING 链的 -j DNAT 目标来指定该向哪个目标 IP 地址以及端口转发请求连接到内部服务的分组

-j MASQUERADE 用发送数据的网卡上的IP来替换源IP

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 172.16.36.0/24 -j SNAT --to-source `ifconfig  | grep 'inet addr:'| grep -v '127.0.0.1' | cut -d: -f2 | awk 'NR==1 { print $1}'`  
iptables -A FORWARD -p tcp --syn -s 172.16.36.0/24 -j TCPMSS --set-mss 1356

来自 LAN 以外的到端口80的 HTTP 连接都会被路由发送到和内部网络分离的另一个网络上的 HTTP 服务器上

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT \
        --to-destination 10.0.4.2:80