偽裝一個連接意味著,我們自動獲取網絡接口的IP地址,而不使用--to-source 。當接口停用時,MASQUERADE不會記住任何連接,這在我們kill掉接口時是有很大好處的。如果我們使用SNAT target,連接跟蹤的數據是被保留下來的,而且時間要好幾天哦,這可是要占用很多連接跟蹤的內存的。一般情況下,這種處理方式對於撥號上網來說是較好的(這有利於已有那連接繼續使用)。如果我們被分配給了一個不同於前一次的IP,不管怎樣已有的連接都要丟失,但或多或少地還是有一些連接記錄被保留了(真是白癡,是吧)。
即使你有靜態的IP,也可以使用MASQUERADE,而不用SNAT 。不過,這不是被贊成的,因為它會帶來額外的開銷,而且以後還可能引起矛盾,比如它也許會影響你的腳本,使它們不能用。
注意,MASQUERADE和SNAT一樣,只能用於nat表的 POSTROUTING鏈,而且它只有一個選項(不是必需的):
Table 6-19. MASQUERADE target
Option --to-ports Example iptables -t nat -A POSTROUTING -p TCP -j MASQUERADE --to-ports 1024-31000 Explanation 在指定TCP或UDP的前提下,設置外出包能使用的端口,方式是單個端口,如--to-ports 1025,或者是端口范圍,如--to- ports 1024-3000。注意,在指定范圍時要使用連字號。這改變了SNAT中缺省的端口選擇,詳情請查看 SNAT target。
6.5.12. SNAT target 這個target是用來做源網絡地址轉換的,就是重寫包的源IP地址。當我們有幾個機子共享一個Internet 連接時,就能用到它了。先在內核裡打開ip轉發功能,然後再寫一個SNAT規則,就可以把所有從本地網絡出去的包的源地址改為Internet連接的地址了。如果我們不這樣做而是直接轉發本地網的包的話,Internet上的機子就不知道往哪兒發送應答了,因為在本地網裡我們一般使用的是IANA組織專門指定的一段地址,它們是不能在Internet上使用的。SNAT target的作用就是讓所有從本地網出發的包看起來都是從一台機子發出的,這台機子一般就是防火牆。
SNAT只能用在nat表的POSTROUTING鏈裡。只要連接的第一個符合條件的包被SNAT了,那麼這個連接的其他所有的包都會自動地被SNAT,而且這個規則還會應用於這個連接所在流的所有數據包。
Table 6-22. SNAT target
Option --to-source Example iptables -t nat -A POSTROUTING -p tcp -o eth0 -j SNAT --to-source 194.236.50.155-194.236.50.160:1024-32000 Explanation 指定源地址和端口,有以下幾種方式: 1、單獨的地址。
2、一段連續的地址,用連字符分隔,如194.236.50.155-194.236.50.160,這樣可以實現負載平衡。每個流會被隨機分配一個IP,但對於同一個流使用的是同一個IP。
3、在指定-p tcp 或 -p udp的前提下,可以指定源端口的范圍,如194.236.50.155:1024-32000,這樣包的源端口就被限制在1024-32000了。
注意,如果可能,iptables總是想避免任何的端口變更,換句話說,它總是盡力使用建立連接時所用的端口。但是如果兩台機子使用相同的源端口,iptables 將會把他們的其中之一映射到另外的一個端口。如果沒有指定端口范圍, 所有的在512以內的源端口會被映射到512以內的另一個端口,512和1023之間的將會被映射到 1024內,其他的將會被映射到大於或對於1024的端口,也就是說是同范圍映射。還要注意,這種映射和目的端口無關。因此,如果客戶想和防火牆外的HTTP服務器聯系,它是不會被映射到FTP control所用的端口的。
[ 關閉窗口 ]