2008年4月20日 星期日

IPTABLES中SNAT和MASQUERADE的區別

IPtables中SNAT和MASQUERADE的區別
IPtables中可以靈活的做各種網絡地址轉换(NAT)網絡地址轉换主要有兩種:SNAT和DNAT
SNAT是source network address translation的縮寫即源地址目標轉换比如,多個PC機使用ADSL路由器共享上網每個PC機都配置了内網IPPC機訪問外部網絡的時候,路由器將數據包的報頭中的源地址替换成路由器的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的時候,出口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隨機分配的。
感謝原作者:微笑使者
原文地址 http://www.xp.org.cn/wiki/html/68/n-68.html

沒有留言:

張貼留言