配置iptables實(shí)現(xiàn)本地端口轉(zhuǎn)發(fā)的方法詳解

場景
假如你在用 resin 調(diào)試一個(gè) Web 程序,需要頻繁地重啟 resin。這個(gè) Web 程序需要開在 80 端口上,而 Linux 限制 1024 以下的端口必須有 root 權(quán)限才能開啟。但是你又不愿意在調(diào)程序的時(shí)候總是開著一個(gè) root 終端。在這種情況下,你可以把 resin 開在默認(rèn)的 8080 端口上,然后使用 iptables 來實(shí)現(xiàn)和真的把服務(wù)開在 80 端口上一樣的效果。
方法
將與 80 端口的 TCP 連接轉(zhuǎn)接到本地的 8080 端口上。使用 DNAT (Destination Network Address Translation) 技術(shù)可以滿足這一要求。因?yàn)?iptables 在處理本地連接和遠(yuǎn)程連接的方法不同,所以需要分開處理。下面假設(shè)本機(jī)的 IP 是 192.168.4.177。
遠(yuǎn)程連接
遠(yuǎn)程連接指的是由另外一臺(tái)機(jī)器連接到這臺(tái)機(jī)器上。這種連接的數(shù)據(jù)包在 iptables 會(huì)首先經(jīng)過 PREROUTING 鏈,所以只需在 PREROUTING 鏈中作 DNAT。
# iptables -t nat -A PREROUTING -p tcp -i eth0 -d 192.168.4.177 --dport 80 -j DNAT --to 192.168.4.177:8080
本地連接
本地連接指的是在本機(jī)上,用 127.0.0.1 或者本機(jī) IP 來訪問本機(jī)的端口。本地連接的數(shù)據(jù)包不會(huì)通過網(wǎng)卡,而是由內(nèi)核處理后直接發(fā)給本地進(jìn)程。這種數(shù)據(jù)包在 iptables 中只經(jīng)過 OUTPUT 鏈,而不會(huì)經(jīng)過 PREROUTING 鏈。所以需要在 OUTPUT 鏈中進(jìn)行 DNAT。除了對(duì) 127.0.0.1 之外,對(duì)本機(jī) IP (即 192.168.4.177) 的訪問也屬于本地連接。
# iptables -t nat -A OUTPUT -p tcp -d 127.0.0.1 --dport 80 -j DNAT --to 127.0.0.1:8080
# iptables -t nat -A OUTPUT -p tcp -d 192.168.4.177 --dport 80 -j DNAT --to 127.0.0.1:8080
注意事項(xiàng)
你也許需要通過以下命令打開 IP 轉(zhuǎn)發(fā):
# echo 1 > /proc/sys/net/ipv4/ip_forward
在進(jìn)行試驗(yàn)時(shí),如果要重新設(shè)置 iptables,需要首先清空 nat 表:
# iptables -F -t nat
實(shí)例操作
這里將本地接口IP 61.144.a.b 的3389端口 轉(zhuǎn)發(fā)到 116.6.c.d的3389 (主要訪問到61.144.a.b的3389端口,就會(huì)跳轉(zhuǎn)到116.6.c.d的3389)
1、 首先應(yīng)該做的是/etc/sysctl.conf配置文件的 net.ipv4.ip_forward = 1 默認(rèn)是0 這樣允許iptalbes FORWARD。
2、 service iptables stop 關(guān)閉防火墻
3、 重新配置規(guī)則
iptables -t nat -A PREROUTING --dst 61.144.a.b -p tcp --dport 3389 -j DNAT --to-destination 116.
6.c.d:3389
iptables -t nat -A POSTROUTING --dst 116.6.c.d -p tcp --dport 3389 -j SNAT --to-source 61.144.a.b
service iptables save
將當(dāng)前規(guī)則保存到 /etc/sysconfig/iptables
若你對(duì)這個(gè)文件很熟悉直接修改這里的內(nèi)容也等于命令行方式輸入規(guī)則。
5、 啟動(dòng)iptables 服務(wù), service iptables start
可以寫進(jìn)腳本,設(shè)備啟動(dòng)自動(dòng)運(yùn)行;
# vi /etc/rc.local
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.</p> <p>touch /var/lock/subsys/local</p> <p>sh /root/myshipin.log
---------------------------------------------------------------------
vi myshipin.log
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.</p> <p>iptables -F -t nat
iptables -t nat -A PREROUTING --dst 61.144.a.b -p tcp --dport 3389 -j DNAT --to-destination 116.6.c.d:3389
iptables -t nat -A POSTROUTING --dst 116.6.a.b -p tcp --dport 3389 -j SNAT --to-source 61.144.c.d
~
----------------------------------------------------------------
TCP</p> <p>iptables -t nat -A PREROUTING --dst 61.144.a.b -p tcp --dport 9304 -j DNAT --to-destination 10.94.a.b:9304
iptables -t nat -A POSTROUTING --dst 10.94.a.b -p tcp --dport 9304 -j SNAT --to-source 61.144.a.b</p> <p>UDP
iptables -t nat -A PREROUTING --dst 61.144.a.b -p udp --dport 9305 -j DNAT --to-destination 10.94.a.b:9305
iptables -t nat -A POSTROUTING --dst 10.94.a.b -p udp --dport 9305 -j SNAT --to-source 61.144.a.b
另:
iptables配置文件的位置:/etc/sysconfig/iptables 外網(wǎng)地址發(fā)變化在配置文件里修改就可以了。
相關(guān)文章
80端口被Win7系統(tǒng)占用怎么解決 Win7系統(tǒng)被80端口占用的解決方法
這篇文章主要介紹了Win7系統(tǒng)80端口被占用怎么解決 Win7系統(tǒng)80端口被占用的解決方法的相關(guān)資料,需要的朋友可以參考下2016-07-25Win10怎么添加打印機(jī)端口呢?打印機(jī)端口添加步驟
Win10設(shè)置連接打印機(jī)之后對(duì)于在大公司十分有必要。在公司設(shè)置打印機(jī)方便大家使用,那么Win10怎么添加打印機(jī)端口呢?下面小編就為大家介紹打印機(jī)端口添加步驟,來看看吧2016-07-24Win10系統(tǒng)怎么使用花生殼DDNS端口映射做內(nèi)網(wǎng)穿透?
Win10系統(tǒng)怎么使用花生殼DDNS端口映射做內(nèi)網(wǎng)穿透?什么是內(nèi)網(wǎng)穿透?內(nèi)網(wǎng)穿透就是過端口映射將一臺(tái)主機(jī)的內(nèi)網(wǎng)(LAN)IP地址映射成一個(gè)公網(wǎng)(WAN)IP地址,讓互聯(lián)網(wǎng)用戶可以訪問2016-06-17Windows10系統(tǒng)怎樣查看偵聽端口?win10查看偵聽的端口圖文教程
大多數(shù)windows10系統(tǒng)的用戶喜歡用DOS命令來看被偵聽的端口,這其實(shí)也是一種方法,但是有些用戶用著非常的不習(xí)慣,其實(shí)還有一個(gè)辦法就是在資源監(jiān)聽器里面也可以查看,接下來2016-05-24windows7系統(tǒng)怎么打開指定端口 windows7檢查端口未打開還是網(wǎng)絡(luò)故障方
端口是設(shè)備與外界通訊交流的出口,功能十分強(qiáng)大,每種網(wǎng)絡(luò)的服務(wù)功能都不相同,為了避免端口出現(xiàn)沖突,我們可以打開指定端口,接下來,我們就來看一下Win7打開指定端口的方2016-05-19win10系統(tǒng)怎么改IIS默認(rèn)端口號(hào)?win10更改IIS默認(rèn)端口號(hào)方法
win10系統(tǒng)怎么改IIS默認(rèn)端口號(hào)?最近由用戶想修改IIS默認(rèn)端口號(hào),但是不太清楚方法,今天小編為大家?guī)砹藈in10更改IIS默認(rèn)端口號(hào)方法,來看看吧2016-04-28Win10安裝wamp apache無法啟動(dòng)80端口被占用解決方法
Win10系統(tǒng)中打開wamp居然無法啟動(dòng)apache服務(wù),測試了很久,80端口被占用了怎么辦,很多朋友都遇到了這種情況,今天小編就為大家?guī)砹薬pache無法啟動(dòng)80端口被占用的解決方2016-04-25Win10系統(tǒng)80端口被System進(jìn)程占用無法啟動(dòng)Apache怎么辦
昨天剛更新了Windows10,總體上來說效果還是蠻不錯(cuò)的,然而今天在開啟Apache服務(wù)器的時(shí)候卻發(fā)現(xiàn),Apache莫名其妙的打不開了,起初以為是權(quán)限的問題,于是使用管理員身份的2016-04-21Win7系統(tǒng)安裝vs和xampp導(dǎo)致80端口發(fā)生沖突的解決方法
這篇文章主要介紹了Win7系統(tǒng)安裝vs和xampp導(dǎo)致80端口發(fā)生沖突的解決方法,導(dǎo)致不能兩個(gè)同時(shí)兩個(gè)軟件,如何解決?感興趣的小伙伴們可以參考一下2016-03-29Linux中禁止root用戶SSH登錄及修改SSH端口的方法
這篇文章主要介紹了Linux中禁止root用戶SSH登錄及修改SSH端口的方法,在服務(wù)器安全維護(hù)過程中可以用到,需要的朋友可以參考下2016-03-15