iptables中SNAT、DNAT和MASQUERADE的含義

轉自 http://www.javashuo.com/article/p-nwjodxwm-kh.html
IPtables中能夠靈活的作各類網絡地址轉換(NAT),網絡地址轉換主要有兩種:SNAT和DNAT。前端

SNAT是source networkaddress translation的縮寫,即源地址目標轉換。好比,多個PC機使用ADSL路由器共享上網,每一個PC機都配置了內網IP,PC機訪問外部網絡的時候,路由器將數據包的報頭中的源地址替換成路由器的ip,當外部網絡的服務器好比網站web服務器接到訪問請求的時候,他的日誌記錄下來的是路由器的ip地址,而不是pc機的內網ip,這是由於,這個服務器收到的數據包的報頭裏邊的「源地址」,已經被替換了,因此叫作SNAT,基於源地址的地址轉換。web

DNAT是destination networkaddress translation的縮寫,即目標網絡地址轉換,典型的應用是,有個web服務器放在內網配置內網ip,前端有個防火牆配置公網ip,互聯網上的訪問者使用公網ip來訪問這個網站,當訪問的時候,客戶端發出一個數據包,這個數據包的報頭裏邊,目標地址寫的是防火牆的公網ip,防火牆會把這個數據包的報頭改寫一次,將目標地址改寫成web服務器的內網ip,而後再把這個數據包發送到內網的web服務器上,這樣,數據包就穿透了防火牆,並從公網ip變成了一個對內網地址的訪問了,即DNAT,基於目標的網絡地址轉換。服務器

MASQUERADE,地址假裝,算是snat中的一種特例,能夠實現自動化的snat。網絡

在iptables中有着和SNAT相近的效果,但也有一些區別,但使用SNAT的時候,出口ip的地址範圍能夠是一個,也能夠是多個,例如:ide

以下命令表示把全部10.8.0.0網段的數據包SNAT成192.168.5.3的ip而後發出去,網站

iptables-t nat -A POSTROUTING -s 10.8.0.0/255.255.255.0 -o eth0 -j SNAT --to-source 192.168.5.3

以下命令表示把全部10.8.0.0網段的數據包SNAT成192.168.5.3/192.168.5.4/192.168.5.5等幾個ip而後發出去.net

iptables-t nat -A POSTROUTING -s 10.8.0.0/255.255.255.0 -o eth0 -j SNAT --to-source 192.168.5.3-192.168.5.5

這就是SNAT的使用方法,便可以NAT成一個地址,也能夠NAT成多個地址,可是,對於SNAT,無論是幾個地址,必須明確的指定要SNAT的ip,假如當前系統用的是ADSL動態撥號方式,那麼每次撥號,出口ip192.168.5.3都會改變,並且改變的幅度很大,不必定是192.168.5.3到192.168.5.5範圍內的地址,這個時候若是按照如今的方式來配置iptables就會出現問題了,由於每次撥號後,服務器地址都會變化,而iptables規則內的ip是不會隨着自動變化的,每次地址變化後都必須手工修改一次iptables,把規則裏邊的固定ip改爲新的ip,這樣是很是很差用的。設計

MASQUERADE就是針對這種場景而設計的,他的做用是,從服務器的網卡上,自動獲取當前ip地址來作NAT。日誌

好比下邊的命令:code

iptables-t nat -A POSTROUTING -s 10.8.0.0/255.255.255.0 -o eth0 -j MASQUERADE

如此配置的話,不用指定SNAT的目標ip了,無論如今eth0的出口得到了怎樣的動態ip,MASQUERADE會自動讀取eth0如今的ip地址而後作SNAT出去,這樣就實現了很好的動態SNAT地址轉換。

相關文章
相關標籤/搜索