Redhat下使用iptables實(shí)現(xiàn)NAT
Redhat 7.2下使用iptables實(shí)現(xiàn)NAT
一、注意環(huán)境:
一臺DELL LATITUDE C610筆記本(PIII1G,256M SDRAM,30G 4200rpm HDD)上安裝Redhat Linux 7.2(完全安裝)。Redhat 7.2
這臺筆記本自帶一塊內(nèi)置百兆以太網(wǎng)卡(3Com 3C920),在Redhat中標(biāo)識為eth0,IP地址為192.168.59.27/24,Gateway為192.168.59.1。另外插上一塊PCMCIA接口的網(wǎng)卡(Realtek 8139),在Redhat中標(biāo)識為eth1,IP地址為10.0.0.254/24,這塊網(wǎng)卡的TCP/IP設(shè)置中僅設(shè)置IP和NetMask,不設(shè)置Gateway。這樣,在netstat –rn或者route print命令中看到缺省路由唯一指向192.168.59.1。
關(guān)于如何驅(qū)動雙網(wǎng)卡,建議在X-Windows環(huán)境下配置,詳見相關(guān)文檔。
一臺Cisco 2621路由器,其FastEthernet0/0口配置IP地址為10.0.0.1/24,另一個以太網(wǎng)接口Down掉。配置一條缺省路由“ip route 0.0.0.0 0.0.0.0 10.0.0.254”,路由器的缺省網(wǎng)關(guān)就指向了10.0.0.254。
這臺筆記本的eth0(3Com)網(wǎng)卡接入辦公室局域網(wǎng),其他ip地址在192.168.59.0/24網(wǎng)段的機(jī)器也連接在這個局域網(wǎng)里。***都通過網(wǎng)關(guān)192.168.59.1以NAT接入Internet。
在試驗(yàn)中還需要用到一臺192.168.59.x的PC機(jī)Client來測試ping等網(wǎng)絡(luò)功能。
二、開始試驗(yàn):
在筆記本上進(jìn)入Linux操作系統(tǒng),以root用戶身份登錄到字符界面。
首先輸入setup,進(jìn)入配置菜單。進(jìn)入system service,選項(xiàng),關(guān)閉里面的ipchains(去掉選項(xiàng)前面的*號),啟用里面的iptables(在選項(xiàng)前加上*號)。這里設(shè)置后,Linux的服務(wù)并沒有按照我們的意愿啟動或停止,這只是標(biāo)記一下并告訴系統(tǒng)下次啟動時將要自動啟動哪些服務(wù)而不啟動哪些服務(wù),可以重新啟動Linux操作系統(tǒng)(reboot)使設(shè)置生效。在不需要重新啟動操作系統(tǒng)的前提下,可以重啟端口守護(hù)進(jìn)程:/etc/rc.d/init.d/xinetd restart
啟動好iptables之后,就需要配置它了。
首先打開ip轉(zhuǎn)發(fā)功能(相當(dāng)于讓計(jì)算機(jī)工作在路由狀態(tài),能夠轉(zhuǎn)發(fā)各個網(wǎng)絡(luò)接口上的數(shù)據(jù)包):
- echo 1 >/proc/sys/net/ipv4/ip_forward
注意,在“echo 1”和“>”之間有一個空格,否則語句就不起效果。
這一句執(zhí)行前,我們可以vi /proc/sys/net/ipv4/ip_forward,看到文件內(nèi)容為一個字符“0”,這表明ip forward功能被禁用。該語句正確執(zhí)行后,文件內(nèi)容被改為“1”,表明ip forward功能被啟用。
也可以手工去修改ip_forward文件內(nèi)容為“1”,啟用ip轉(zhuǎn)發(fā)功能,但是下次系統(tǒng)重啟后,又會被置為0。
這是實(shí)現(xiàn)iptables NAT的準(zhǔn)備工作,我們可以將這條語句寫進(jìn)/etc/rc.d/rc.local這個啟動腳本中,下次操作系統(tǒng)重新啟動時,這條語句會被自動執(zhí)行。
在iptables的filter表里面不做任何設(shè)置,所有規(guī)則為空,默認(rèn)即為所有包均允許通過。
iptables –L即iptables –t filter –L,顯示包過濾規(guī)則
iptables –t nat –L現(xiàn)實(shí)NAT規(guī)則
同樣的
iptables –A和iptables –D表示添加和刪除包過濾規(guī)則,完全寫法為iptables –t filter –A和iptables –t filter -D
iptables –t nat –A和iptables –t nat –D表示添加和刪除NAT規(guī)則
iptables –F表示清空包過濾規(guī)則,完全寫法為iptables –t filter –F,再次強(qiáng)調(diào),包過濾規(guī)則為空表示對所有通過的數(shù)據(jù)包均放行不予攔截(ACCEPT)。
iptables –t na –F表示清空NAT規(guī)則
接下來在iptables的NAT表里面做相應(yīng)的地址轉(zhuǎn)換設(shè)置。
用以下語句添加兩條NAT規(guī)則:
iptables –t nat –A POSTROUTING –s 10.0.0.0/24 –o eth0 –j SNAT ――to 192.168.59.27
iptables –t nat –A PREROUTING –p tcp –d 192.168.59.27 ――dport 2323 –i eth0 –j DNAT ――to 10.0.0.1:23
需要說明的是源地址轉(zhuǎn)換(SNAT) 是在路由后進(jìn)行的,所以是POSTROUTING,需要確定數(shù)據(jù)包出防火墻的接口;而目的地址轉(zhuǎn)換(DNAT)是在路由前進(jìn)行的,所以是PREROUTING,需要確定數(shù)據(jù)包進(jìn)防火墻的接口。
對***條NAT規(guī)則解釋如下:
這是一個源地址轉(zhuǎn)換規(guī)則,數(shù)據(jù)包出防火墻(-o)的接口是eth0。這條規(guī)則將所有源地址為10.0.0.0/24的數(shù)據(jù)包在從eth0接口出防火墻的時候,轉(zhuǎn)換其源地址為192.168.59.27。這樣就讓內(nèi)部網(wǎng)(10.0.0.0/24)的機(jī)器能夠共享一個外部網(wǎng)IP(192.168.59.27/24)訪問到外部網(wǎng)段(192.168.59.0/24)。這條規(guī)則適合部署一臺NAT防火墻實(shí)現(xiàn)Office或Home的多臺機(jī)器共享上網(wǎng)。
對第二條NAT規(guī)則解釋如下:
這是一個目的地址轉(zhuǎn)換規(guī)則,數(shù)據(jù)包進(jìn)防火墻(-i)的接口是eth0。當(dāng)一個數(shù)據(jù)包試圖訪問防火墻的eth0接口(192.168.59.27)2323端口的時候,數(shù)據(jù)包的目的地址將被改變?yōu)?0.0.0.1,同時,訪問的端口也將被改變?yōu)?3,也就是說,這個數(shù)據(jù)包將被防火墻從其eth1接口轉(zhuǎn)發(fā)(因?yàn)閑th1接口IP是10.0.0.0/24這一段的)出去并送達(dá)10.0.0.1訪問其23端口。這是一個典型的靜態(tài)端口重定向規(guī)則。
三、開始測試:
因?yàn)?0.0.0.1是路由器Cisco 2621的快速以太口,我們可以telnet上路由器,然后確定sh ip route顯示其缺省路由指向10.0.0.254,并確保能在路由器上ping通10.0.0.254。然后試圖ping 192.168.59.1,發(fā)現(xiàn)能夠ping通,但是速度不穩(wěn)定有時會丟包,懷疑到192.168.59.1是一臺Catalyst 6509多層交換機(jī),整個公司均利用其作為網(wǎng)關(guān)出口,所以該設(shè)備的NAT處理非常頻繁,可能會導(dǎo)致處理數(shù)據(jù)包能力下降。所以從路由器上ping另一個IP例如192.168.59.22,發(fā)現(xiàn)連通性非常穩(wěn)定,這表示SNAT功能成功實(shí)現(xiàn)。
由于路由器打開了telnet功能,其IP為10.0.0.1的以太網(wǎng)接口的23端口(telnet)是處于偵聽狀態(tài)的,而防火墻(筆記本)上的eth0接口的2323端口被映射到10.0.0.1的23端口。所以從一臺192.168.59.0/24網(wǎng)段內(nèi)任意一臺Client機(jī)器上telnet 192.168.59.27 2323,顯示出了Cisco 2621的telnet登錄界面,輸入口令“cisco”后進(jìn)入了Cisco 2621。這表明DNAT功能成功實(shí)現(xiàn)。
因?yàn)榉阑饓?筆記本)的網(wǎng)關(guān)指向了192.168.59.1,所以從路由器上能ping通Internet上的公網(wǎng)IP比如202.38.64.2(中國科技大學(xué)www服務(wù)器)。
接著輸入:
- iptables –t nat –D PREROUTING 1
經(jīng)過以上步驟,Redhat下使用iptables就可以實(shí)現(xiàn)NAT了。
【編輯推薦】