IPtables中能夠靈活的作各類網絡地址轉換(NAT)
網絡地址轉換主要有兩種:SNAT和DNAT前端
SNAT是source network address translation的縮寫即源地址目標轉換web
好比,多個PC機使用ADSL路由器共享上網,每一個PC機都配置了內網IP。PC機訪問外部網絡的時候,路由器將數據包的報頭中的源地址替換成路由器的ip。當外部網絡的服務器好比網站web服務器接到訪問請求的時候,他的日誌記錄下來的是路由器的ip地址,而不是pc機的內網ip。
這是由於,這個服務器收到的數據包的報頭裏邊的「源地址」,已經被替換了。因此叫作SNAT,基於源地址的地址轉換。服務器
DNAT是destination network address translation的縮寫即目標網絡地址轉換網絡
典型的應用是,有個web服務器放在內網,配置內網ip,前端有個防火牆,配置公網ip,互聯網上的訪問者使用公網ip來訪問這個網站。當訪問的時候,客戶端發出一個數據包,這個數據包的報頭裏邊,目標地址寫的是防火牆的公網ip。防火牆會把這個數據包的報頭改寫一次,將目標地址改寫成web服務器的內網ip,而後再把這個數據包發送到內網的web服務器上這樣,數據包就穿透了防火牆,並從公網ip變成了一個對內網地址的訪問了,即DNAT,基於目標的網絡地址轉換 。tcp
MASQUERADE,地址假裝,在iptables中有着和SNAT相近的效果,但也有一些區別:網站
SNAT,DNAT,MASQUERADE都是NAT,MASQUERADE是SNAT的一個特例。
SNAT是指在數據包從網卡發送出去的時候,把數據包中的源地址部分替換爲指定的IP,這樣,接收方就認爲數據包的來源是被替換的那個IP的主機。
MASQUERADE是用發送數據的網卡上的IP來替換源IP,所以,對於那些IP不固定的場合,好比撥號網絡或者經過dhcp分配IP的狀況下,就得用MASQUERADE。
DNAT,就是指數據包從網卡發送出去的時候,修改數據包中的目的IP,表現爲若是你想訪問A,但是由於網關作了DNAT,把全部訪問A的數據包的目的IP所有修改成B,那麼,你實際上訪問的是B。
由於,路由是按照目的地址來選擇的,所以,DNAT是在PREROUTING鏈上來進行的,而SNAT是在數據包發送出去的時候才進行,所以是在POSTROUTING鏈上進行的spa
但使用SNAT的時候,出口ip的地址範圍能夠是一個,也能夠是多個,例如:設計
咱們可能須要將訪問主機的7979端口映射到8080端口。也能夠iptables重定向完成日誌
iptables -t nat -A PREROUTING -p tcp --dport 7979 -j REDIRECT --to-ports 8080
更改iptables,使之實現nat映射功能code
將外網訪問192.168.75.5的80端口轉發到192.168.75.3:8000端口。 # iptables -t nat -A PREROUTING -d 192.168.75.5 -p tcp --dport 80 -j DNAT --to-destination 192.168.75.3:8000 將192.168.75.3 8000端口將數據返回給客戶端時,將源ip改成192.168.75.5 # iptables -t nat -A POSTROUTING -d 192.168.75.3 -p tcp --dport 8000 -j SNAT 192.168.75.5