坚信科学,分享技术

2018全新版本,未来在blog.54chen.com更新博客!

>>>尝试更加利于阅读的2014版科学院,以后都在新版上写。

用iptables做两机之间的端口转发

 [文章作者:陈臻 本文版本:v1.0 最后修改:2009.2.19 转载请注明原文链接:http://www.54chen.com/c/264]

以前发过一篇利用iptables做本机的端口转发的文章,利用简单的地址转换的原理,可以将两台互相可访问的机器利用iptables转发,这样很容易实现类似透明代理的功能,当然,这个代理不会有缓存的。:)

假如我希望把对 1.2.4.5:8080的访问都转向 1.2.6.9:80:

IP包来到之后,修改目的地址,使之转向目标机器的目标端口,在.5这个机器上:

iptables -t nat -A PREROUTING -d 1.2.4.5 -p tcp --dport 8080 -j DNAT --to 1.2.6.9:80

IP包返回的时候,修改源地址(源端口),使之符合IP协议,正确返回,还是在.5这个机器上:

iptables -t nat -A POSTROUTING -d 1.2.6.9 -p tcp --dport 80 -j SNAT --to 1.2.4.5:8080

然后我们需要在.5操作系统上打开IP转发:

echo '1' > /proc/sys/net/ipv4/ip_forward

最后再设置.5的连接状态

  iptables -A FORWARD -o eth0 -d 1.2.4.5 -p tcp --dport 8080 -j ACCEPT

  iptables -A FORWARD -i eth0 -s 1.2.6.9 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT

 

附全部脚本(不关.9的事,全是在.5上)

iptables -t nat -A POSTROUTING -d 1.2.4.5 -p tcp --dport 8080 -j DNAT --to 1.2.6.9:80

iptables -t nat -A PREROUTING -d 1.2.4.5 -p tcp --dport 8080 -j DNAT --to 1.2.6.9:80

iptables -t nat -A POSTROUTING -d 1.2.6.9 -p tcp --dport 80 -j SNAT --to 1.2.4.5:8080

iptables -A FORWARD -i eth0 -s 1.2.6.9 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT

iptables -A FORWARD -o eth0 -d 1.2.4.5 -p tcp --dport 8080 -j ACCEPT


原创文章如转载,请注明:转载自五四陈科学院[http://www.54chen.com]
本文链接: http://www.54chen.com/_linux_/%e7%94%a8iptables%e5%81%9a%e4%b8%a4%e6%9c%ba%e4%b9%8b%e9%97%b4%e7%9a%84%e7%ab%af%e5%8f%a3%e8%bd%ac%e5%8f%91.html

This entry was posted in linux and tagged , . Bookmark the permalink.

10 Responses to “用iptables做两机之间的端口转发”

  1. deprecated 说:

    转来转去的干什么

  2. 苯苯 说:

    不错 学着用一下

  3. [...] #sudo -u postgre /opt/pgsql/bin/initdb –locale=zh_CN.UTF-8 –encoding=utf8 -D /data/PGSearch #sudo -u postgre /opt/pgsql/bin/postmaster -i -D /data/PGSearch &  //允许网络访问 #sudo -u postgre /opt/pgsql/bin/createdb kxgroup # vim /data/PGSearch/pg_hba.conf  如下增加可访问的机器: [...]

  4. BackingSecond 说:

    额。。。。跟squid的用法拆分了 有点意思
    另:用ssh做转发不是更好?

  5. cc0cc 说:

    用ssh转发?是指ssh tunnel?http://www.54chen.com/c/94 iptable适合长期需要转发的情况,而ssh tunnel更适合临时解决方案

  6. fireonyou 说:

    什么意思啊 我发的内容咋不见了

  7. fireonyou 说:

    原来是要发足够长足够多的内容,不然将被当垃圾评论处理了

  8. [...] 第4步,建立一个Server服务在10000端口进行侦听 //Server.java [...]

  9. 白开水易拉罐 说:

    x_tables: ip_tables: DNAT target: used from hooks POSTROUTING, but only usable from PREROUTING/OUTPUT

Leave a Reply