下圖為linux下netfilter的流量處理鏈。
舉例環境:
NAT網關機2個網絡接口:
Lan口:10.1.1.254/24 eth0 , Wan口:60.1.1.1/24 eth1
Lan內web server: 10.1.1.1:80
分兩塊:
1、NAT
最前面的PREROUTING,做DNAT操作,改變destination ip從網關機ip到內網目標機器ip。
iptables -t nat -A PREROUTING -d 60.1.1.1 -p tcp --dport 80 -j DNAT --to 10.1.1.1:80
中間的FORWARD,非本地機器的轉發規則控制,需要打開 /proc/sys/net/ipv4/ip_forward 為 1
iptables -A FORWARD -d 10.1.1.1 -p tcp --dport 80 -j ACCEPT
最後的POSTROUTING,做SNAT操作,改變source ip,從外網客戶端ip改變為網關機ip地址
iptables -t nat -A POSTROUTING -d 10.1.1.1 -p tcp --dport 80 -j SNAT --to 10.1.1.254
2、FILTER
在NAT.PREPOSTING之後,如果目標ip地址是本機地址,則數據包將走FILTER通道。
同樣包括INPUT、FORWARD、OUTPUT階段。
例如:拒絕某個地址包 iptables -A INPUT -s 10.250.4.49 -i eth0 -j DROP
舉例:
本機端口轉發,不需要管SNAT:
/sbin/iptables -t nat -A PREROUTING -d 10.249.192.168 -p tcp --dport 44000 -j DNAT --to 10.249.192.168:43000