摘 要:隨著Internet網(wǎng)絡(luò)在全世界范圍內(nèi)的迅速發(fā)展,IPv4協(xié)議支持的可用IP地址資源逐漸變得山窮水盡,資源的匱乏使得許多企業(yè)難以申請更多的公網(wǎng)IP地址,或者只能承受一個或者少數(shù)幾個公網(wǎng)IP地址的費用。而與此同時,大部分企業(yè)面臨著將局域網(wǎng)內(nèi)的主機接入Internet的需求。針對這一問題,討論一下在Linux操作系統(tǒng)下怎樣使用Iptables的SNAT策略來化解這一難題。
關(guān)鍵詞:Linux操作系統(tǒng);Iptables;SNAT策略;MASQUERADE
1 SNAT策略概述
隨著Internet網(wǎng)絡(luò)在全世界范圍內(nèi)的迅速發(fā)展,IPv4協(xié)議支持的可用IP地址資源在逐漸減少,能申請到的公網(wǎng)IP也越來越少,大部分企業(yè)面臨著將局域網(wǎng)內(nèi)的主機接入到Internet中,為了化解這一難題,我們可以用Iptables的SNAT(Source Network Address Translation,源地址)策略來解決。
2 SNAT策略的應(yīng)用
SNAT策略主要應(yīng)用在局域網(wǎng)共享上網(wǎng)接入的方面,而處理數(shù)據(jù)包的切入時機,主要在路由選擇之后(POSTROUTING)進行。SNAT中能用于NAT表的POSTROUTING鏈。SNAT策略的關(guān)鍵在于將局域網(wǎng)外發(fā)數(shù)據(jù)包的源IP地址(私有地址)修改為網(wǎng)關(guān)的外網(wǎng)IP地址(公有地址)。因為網(wǎng)關(guān)服務(wù)器的IP地址通常具有兩種情況,一種是固定的靜態(tài)的IP地址,另一種是非固定的動態(tài)IP地址。下面分別從這兩方面來介紹SNAT的使用策略。
2.1 網(wǎng)關(guān)服務(wù)器具有固定的靜態(tài)IP地址的SNAT策略
在對網(wǎng)關(guān)服務(wù)器為固定的靜態(tài)IP地址的SNAT策略進行設(shè)置時,iptables命令需要結(jié)合“- -to-source IP地址”選項使用,該選項用于指定修改后的IP地址,如:-j SNAT - -to-source 202.97.224.68)。
案例環(huán)境如下:
網(wǎng)關(guān)服務(wù)器使用linux操作系統(tǒng)。
網(wǎng)關(guān)上兩塊網(wǎng)卡:eth0:202.97.224.68(接外網(wǎng))
eth1:192.168.0.2(接局域網(wǎng))。
局域網(wǎng)內(nèi)各主機網(wǎng)關(guān):192.168.0.1,并且已正確設(shè)置了DNS服務(wù)器。
案例要實現(xiàn)的結(jié)果:在Linux網(wǎng)關(guān)中進行正確配置,通過SNAT策略使192.168.0.0/24網(wǎng)段的局域網(wǎng)用戶能通過共享的方式訪問Internet。
依據(jù)上述要求,使用Iptables的SNAT策略的步驟如下:
(1)開啟網(wǎng)關(guān)服務(wù)的路由轉(zhuǎn)發(fā)功能。
[root@www ~]# vi /etc/sysctl.conf //將ip_forward的值改為1
net.ipv4.ip_forward = 1
[root@www ~]# sysctl –p //從默認(rèn)的配置文件中讀取配置
(2)用iptables命令將源地址改為服務(wù)器的公網(wǎng)IP地址,使局域網(wǎng)訪問Internet的數(shù)據(jù)包采用SNAT策略。
[root@www ~]# iptables -t nat -A POSTROUTING –s 192.168.0.0/24 -o eth0 -j SNAT
--to-source 202.97.224.68
上述步驟完成網(wǎng)關(guān)服務(wù)器具有固定的靜態(tài)IP地址的SNAT策略的設(shè)置,可以使用局域網(wǎng)內(nèi)的客戶機訪問Internet中的網(wǎng)站進行測試(如新浪)。
2.2 網(wǎng)關(guān)服務(wù)器具有非固定的動態(tài)態(tài)IP地址的SNAT策略
在使用SNAT策略時,有時會遇到網(wǎng)關(guān)服務(wù)器使用的是非固定的動態(tài)IP地址,如使用ADSL寬帶接入時可能獲取的是動態(tài)IP地址。那么在這種網(wǎng)絡(luò)環(huán)境下,使用固定IP地址的方法肯定是不可取的,該如何設(shè)置SNAT策略呢?針對這種情況,iptables提供了一個名為MASQUERADE(偽裝)的數(shù)據(jù)包處理方式,MASQUERADE同樣可以完成修改數(shù)據(jù)包源IP地址的工作,只不過它會自動獲取外網(wǎng)接口的IP地址,不需要使用“--to-source”選項。而是使用“-j MASQUERADE”選項來指定數(shù)據(jù)處理方式即可。
例:設(shè)置MASQUERADE策略,使192.168.0.0/24網(wǎng)段能夠通過網(wǎng)關(guān)ppp0(Linux系統(tǒng)中,對應(yīng)的連接名稱)連接共享上網(wǎng)。
[root@www ~]# iptables -t nat -A POSTROUTING –s 192.168.0.0/24 -o ppp0 –j MASQUERADE
當(dāng)然,在網(wǎng)關(guān)使用固定靜態(tài)IP地址時,也可以使用MASQUERADE,而不用SNAT。只是,MASQUERADE會比SNAT多些額外的開銷,因此如果有固定的IP地址,建議使用SNAT策略,避免出現(xiàn)過多的開銷。
[參考文獻]
[1]北京阿博泰北大青鳥信息技術(shù)有限公司編著.科學(xué)技術(shù)文獻出版社 2009(65).
[2]楊云,張輝.在Linux下配置防火墻[J].電腦知識與技術(shù),2009(27).