netfilter
NAT and MASQUERADE
IPtables中可以靈活的做各種網絡地址轉換(NAT)
NAT主要有兩種:SNAT和DNAT SNAT是Source Network Address Translation的縮寫 比如,多個host使用ADSL router上網 每個host都配置了private IP host訪問external network的時候,路由器將數據包的header中的src address替換成router的ip 當external network的server比如網站web server接到訪問請求的時候 LOG 記錄下來的是router ip,而不是host的private ip 這是因為,這個server收到data packet的header裡src ip,已經被替換了 所以叫做SNAT
DNAT是Destination Network Address Translation的縮寫 典型的應用是,有個web server放在Internal Network配置private ip,前端有個firewall配置public ip Internet上的guest使用public ip來訪問這個web 當訪問的時候,client發出一個data packet 這個data packet的header裡邊,目標地址寫的是firewall的public ip firewall會把這個data packet的header改寫一次,將目標地址改寫成web server的private ip 然後再把這個data packet發送到內網的web服務器上 這樣,data packet就穿透了firewall (Behind NAT),並從公網ip變成了一個對內網地址的訪問了
MASQUERADE,地址偽裝,在iptables中有著和SNAT相近的效果,但也有一些區別 但使用SNAT的時候,出口ip的地址範圍可以是一個,也可以是多個,例如: 如下命令表示把所有10.8.0.0網段的data packet 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地址轉換
Last updated
Was this helpful?