Linux-NAT原理總結
阿新 • • 發佈:2022-05-05
NAT
NAT: network address translation,支援PREROUTING,INPUT,OUTPUT,POSTROUTING四個鏈
請求報文:修改源/目標IP,由定義如何修改
響應報文:修改源/目標IP,根據跟蹤機制自動實現
NAT的實現分為下面型別:
- SNAT:source NAT ,支援POSTROUTING, INPUT,讓本地網路中的主機通過某一特定地址訪問 外部網路,實現地址偽裝,請求報文:修改源IP
- DNAT:destination NAT 支援PREROUTING , OUTPUT,把本地網路中的主機上的某服務開放給外 部網路訪問(釋出服務和埠對映),但隱藏真實IP,請求報文:修改目標IP
- PNAT: port nat,埠和IP都進行修改
SNAT
SNAT:基於nat表的target,適用於固定的公網IP
SNAT選項:
- --to-source [ipaddr[-ipaddr]][:port[-port]]
- --random
iptables -t nat -A POSTROUTING -s LocalNET ! -d LocalNet -j SNAT --to-source ExtIP
注意: 需要開啟 ip_forward
示例:
iptables -t nat -A POSTROUTING -s 10.0.0.0/24 ! –d 10.0.0.0/24 -j SNAT --tosource 172.18.1.6-172.18.1.9
MASQUERADE:基於nat表的target,適用於動態的公網IP,如:撥號網路
MASQUERADE選項:
- --to-ports port[-port]
- --random
iptables -t nat -A POSTROUTING -s LocalNET ! -d LocalNet -j MASQUERADE
示例
iptables -t nat -A POSTROUTING -s 10.0.0.0/24 ! -d 10.0.0.0/24 -j MASQUERADE
DNAT
DNAT:nat表的target,適用於埠對映,即可重定向到本機,也可以支援重定向至不同主機的不同端 口,但不支援多目標,即不支援負載均衡功能
DNAT選項:
- --to-destination [ipaddr[-ipaddr]][:port[-port]]
DNAT 格式:
iptables -t nat -A PREROUTING -d ExtIP -p tcp|udp --dport PORT -j DNAT --todestination InterSeverIP[:PORT]
注意: 需要開啟 ip_forward
REDIRECT 轉發
REDIRECT,是NAT表的 target,通過改變目標IP和埠,將接受的包轉發至同一個主機的不同埠,可 用於PREROUTING OUTPUT鏈
REDIRECT選項:
--to-ports port[-port]
注意: 無需開啟 ip_forward
示例:
iptables -t nat -A PREROUTING -d 172.16.100.10 -p tcp --dport 80 -j REDIRECT --to-ports 8080