Linux下Iptables端口转发功能的解决:
先从一个实例说:有一企业就一个服务器软件做测试。基于win2k的,端口号为881,服务器直接连接外部网络,客户端通过服器ip来访问。排除Windows,如果是使用Linux,那么该如何解决iptables端口转发的问题。经过资料的查阅,iptables的端口转发功能是可以解决的,以下是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提供网络服务。
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服务器才真正的算是个防火墙,Linux下Iptables端口转发功能也就实现了。
【编辑推荐】