[轉]IPTABLES中SNAT和MASQUERADE的區別

lastwinner發表於2011-07-20

IPtables中可以靈活的做各種網路地址轉換(NAT)
網路地址轉換主要有兩種:SNAT和DNAT

SNAT是source network address translation的縮寫即源地址目標轉換

比如,多個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,基於目標的網路地址轉換 。

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鏈上進行的

但使用SNAT的時候,出口ip的地址範圍可以是一個,也可以是多個,例如:

如下命令表示把所有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然後發出去
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
比如下邊的命令:
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地址轉換
 
注:
對於MASQUERADE,只是計算機的負荷稍微多一點。因為對每個匹配的包,MASQUERADE都要查詢可用的IP地址,而不象SNAT用的IP地址是配置好的。當然,這也有好處,就是我們可以使用透過PPP、 PPPOE、SLIP等撥號得到的地址,這些地址可是由ISP的DHCP隨機分配的。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29867/viewspace-702622/,如需轉載,請註明出處,否則將追究法律責任。

相關文章