端口转发:iptables在网络中的一个经典应用

由 xchen 在 08-16-2002 00:31 发表:

端口转发:iptables在网络中的一个经典应用

声明:本文由xchen兄[[email protected]]所有,任何人转帖必须注明原创作者xchen兄的大名及电子信箱,其次也要注明来源于www.linuxsir.com。这样有利于通过来源,真正知道谁才是真正原创作者。

尊重他人就是尊重自己!!!!!

多谢xchen兄!!!

北南 加注

端口转发:iptables在网络中的一个经典应用

在详述端口转发之前,先讲一下我日前遇到的一件事情。

本人是搞测试的,有一厂家拿了一个服务器软件叫我测试。基于win2k的,端口号为881,服务器直接连接外部网络,客户端通过服务器ip来访问,而他们没有基于linux的服务器软件,照他们意思就必须将服务器换成windows的。作为一个linux爱好者,我想大家都明白这种痛苦。我翻了一下资料,发现iptables的端口转发功能可以解决,折腾了一下午,终于完成任务。下面将我的方法讲一下:

思想:利用端口转发,当服务器接收到881端口请求以后,将其转到 10.10.2.200:881上,10.10.2.200再将数据返回给请求连接者。

Eth0:连接ADSL,即ppp0接口

Eth1:连接内部网络,ip为10.10.1.1

10.10.2.200为win2k服务器,其端口881提供网络服务。

a.b.c.dàppp0:881à eth1à10.10.2.200:881 ;数据进来时的路线

10.10.2.200:881àeth1àppp0:881àa.b.c.d ;数据出去时的路线

iptbles脚本:

iptables -t nat -A PREROUTING -p tcp -m tcp --dport 881 -j DNAT --to-destination 10.10.2.200:881 ;将881请求转发至10.10.2.00:881端口

iptables -t nat -A POSTROUTING -s 10.10.0.0/16 -d 10.10.2.200 -p tcp -m tcp --dport 881 -j SNAT --to-source 10.10.1.1 ;返回a.b.b.d时数据源来自同一子网,就将其源地址更改为10.10.1.1,从eth0发出,并在连接跟踪表中查出a.b.c.d是从ppp0进来的,又由ppp0将此数据发出。

当然不要忘了加一条允许881端口访问的语句。

iptables –A INPUT –p tcp –dport 881 –i ppp0 –j ACCEPT

可不可把服务器放在局域内,用端口转发来实现呢?答案当然是肯定的,既然能把881端口转发,那么21,80这些个端口更不在话下,而且很多服务器软件都可以自定义端口,那就在得玩了,只要有合适的端口,即使给局域网每一个用户开一个ftp服务器也是可以的。你想要实现什么服务都可以,当然是基于端口转发的。

局域网内10.10.2.101是win2k,提供www服务,端口为800

通过服务器 http://serverip:800 进行访问。

iptables -t nat -A PREROUTING -p tcp -m tcp --dport 800 -j DNAT --to-destination 10.10.2.101:800

iptables -t nat -A POSTROUTING -s 10.10.0.0/16 -d 10.10.2.101 -p tcp -m tcp --dport 800 -j SNAT --to-source 10.10.1.1

iptables –A INPUT –p tcp –dport 800 –i ppp0 –j ACCEPT

由于是基于端口转发实现的,所以服务器上只需装个iptables来转发数据就行了,一切服务由内部服务器完成,这样的话,我想linux服务器才真正的算是个防火墙。

唠唠叨叨写了这么久,其实我也明白很多人都会,但是应该还有像我一样的初学者在这个问题上苦苦摸索,能够少走弯路有什么不好呢?哈,就算是灌水啦。。。。。。


由 QinKui 在 08-16-2002 11:05 发表:


在这里看到了两篇xchen很好的文章,对我十分有用。

谢谢!


由 devine 在 08-16-2002 20:41 发表:


确实是很有启发性,而且简单易懂


由 lanmaster 在 10-14-2002 22:07 发表:


所有的资料我全都看完了也很细,但还是有90%不明白,我想在这问一下菜鸟级的问题,在那能找到关于IPTABLES的资料和参数说明(最好是中文)


成长中的菜鸟!

E-Mail:qcy_[email protected]

QQ :7118899


由 xchen 在 10-15-2002 09:04 发表:

ftp://xchen.3322.org/linux/iptables/

iptables的详细文档


由 ntbxm 在 12-26-2003 17:43 发表:


我试了试,但局域网内访问www时,却也被导至自己的内部网站了。


由 dancingpig 在 12-26-2003 19:47 发表:


iptables -t nat -A POSTROUTING -s 10.10.0.0/16 -d 10.10.2.101 -p tcp -m tcp --dport 800 -j SNAT --to-source 10.10.1.1

为什么是--dport 800

回应的时候是服务器的800口,到iptables的同一网络接口

然后转到对外的那个接口,在从这个对外接口的800回应原来请求。难道不是这样?


由 大熊宝宝 在 12-26-2003 20:34 发表:


理解一下 包当然是800端口的返还了 目的是你内网机器的数据出去的时候SNAT 如果是http可以不需要这句因为HTTP是单向的


请兄弟们正确发贴,把问题发到相关版块 发贴标题请简明扼要 谢谢大家配合.

新会员发贴前请学会搜索论坛 有可能你的问题已经有答案了


由 huzi 在 12-27-2003 09:09 发表:

有点问题需要注意

我觉得有点问题需要注意一下:

我在公司也做过这个,但我们公司连接internet的不止一个IP,并且局域网内的电脑的网关是指向DDN专线的(连到香港),所以如果像楼主说的这样,那应该还要把内网的服务器的PC的网关指向linux服务器的内部IP,这样才能向外提供服务。我原来就是因为这个没有做,结果找了很久,才解决这个问题。


http://linuxer.8866.org

青山相待,白云相爱。

梦不到紫罗袍共黄金带。

一茅斋,野花开,管甚谁

Published At
Categories with 服务器类
Tagged with
comments powered by Disqus