LINUX IPTABLES端口映射設(shè)置
LINUXIPTABLES端口映射設(shè)置
iptables 端口映射設(shè)置如下:
設(shè)我們有一臺計算機,有兩塊網(wǎng)卡,eth0連外網(wǎng),ip為1.2.3.4;eth1連內(nèi)網(wǎng),ip為192.168.0.1.現(xiàn)在需要把發(fā)往地址1.2.3.4的81端口的ip包轉(zhuǎn)發(fā)到ip地址192.168.0.2的8180端口,設(shè)置如下:
1. iptables -tnat -A PREROUTING -d 1.2.3.4 -p tcp -m tcp –dport 81 -j DNAT–to-destination192.168.0.2:8180
2. iptables -tnat -A POSTROUTING -s 192.168.0.0/255.255.0.0 -d 192.168.0.2 -p tcp -m tcp–dport 8180 -j SNAT –to-source 192.168.0.1
真實的傳輸過程如下所示:
假設(shè)某客戶機的ip地址為6.7.8.9,它使用本機的1080端口連接1.2.3.4的81端口,發(fā)出的ip包源地址為6.7.8.9,源端口為1080,目的地址為1.2.3.4,目的端口為81.
主機1.2.3.4接收到這個包后,根據(jù)nat表的第一條規(guī)則,將該ip包的目的地址更該為192.168.0.2,目的端口更該為8180,同時在連接跟蹤表中創(chuàng)建一個條目,(可從/proc/net/ip_conntrack文件中看到),然后發(fā)送到路由模塊,通過查路由表,確定該ip包應(yīng)發(fā)送到eth1接口.在向eth1接口發(fā)送該ip包之前,根據(jù)nat表的第二條規(guī)則,如果該ip包來自同一子網(wǎng),則將該ip包的源地址更該為192.168.0.1,同時更新該連接跟蹤表中的相應(yīng)條目,然后送到eth1接口發(fā)出.
此時連接跟蹤表中有一項:
連接進入: src=6.7.8.9dst=1.2.3.4 sport=1080 dport=81
連接返回: src=192.168.0.2dst=6.7.8.9 sport=8180 dport=1080
是否使用: use=1
而從192.168.0.2發(fā)回的ip包,源端口為8180,目的地址為6.7.8.9,目的端口為1080,主機1.2.3.4的TCP/IP棧接收到該ip包后,由核心查找連接跟蹤表中的連接返回欄目中是否有同樣源和目的地址和端口的匹配項,找到后,根據(jù)條目中的記錄將ip包的源地址由192.168.0.2更該為1.2.3.4, 源端口由8180更該為81,保持目的端口號1080不變.這樣服務(wù)器的返回包就可以正確的返回發(fā)起連接的客戶機,通訊就這樣開始.
還有一點, 在filter表中還應(yīng)該允許從eth0連接192.168.0.2地址的8180端口:
iptables -AINPUT -d 192.168.0.2 -p tcp -m tcp –dport 8180 -i eth0 -j ACCEPT
通過上面的例子,我們就知道iptables端口映射設(shè)置其實不難!
原文: http://1230tt.com/archives/222.html[!--empirenews.page--]
|