iptables 端口转发,请赐教
环境是这样子的:电脑A :192.168.1.10
电脑B :192.168.1.11
电脑C :192.168.1.12
现在电脑A上有个服务,端口是8000, 在电脑B和C上都能使用telnet直接连接,现在我要将电脑B开启端口转发,将C的请求转发到A上去。
我在电脑B上进行了一下几个配置
------------------------------------------------------------
1、sysctl -w net.ipv4.ip_forward=1 //开启转发
2 iptables -I FORWARD -p tcp -s 192.168.1.10 -j ACCEPT //允许转发从电脑A过来的数据
3 iptables -I FORWARD -p tcp -s 192.168.1.12 -j ACCEPT //允许转发从电脑C过来的数据
4 iptables -t nat PREROUTING -p tcp -s 192.168.1.10 -j DNAT --to 192.168.1.12 //将电脑A发送过来的数据转发到电脑C
5 iptables -t nat PREROUTING -p tcp -s 192.168.1.12 -j DNAT --to 192.168.1.10 //将电脑C发送过来的数据转发到电脑A
6 service iptables save //保存配置
7 service iptables restart //重启服务
-------------------------------------------------------------
关键是我用电脑C(IP:12)去telnet 电脑B(IP:11)的8000端口,根本就不是我预想的效果,请各位大神赐教,我是不是哪儿理解错了?
PS:当我在电脑B上开启监听8000端口的时候,如果不配置第4条命令,我在电脑C上是可以telnet上去的。配置上第四条就不行了,说明PREROUTING是起了作用的,但苦恼的是最终不是我想要的结果。
附上系统版本信息:
LSB Version: :base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noarch
Distributor ID: CentOS
Description: CentOS release 6.5 (Final)
Release: 6.5
Codename: Final
linux内核版本信息:
Linux hn.kd.ny.adsl 2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 03:15:09 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
iptables版本信息:
iptables v1.4.7
自己顶起来,希望大牛来帮助啊,感激不尽 本帖最后由 phanx 于 2014-07-11 23:31 编辑
回复 1# Gallop_hu
Gallop_hu 发表于 2014-07-11 21:41 static/image/common/back.gif
1、sysctl -w net.ipv4.ip_forward=1 //开启转发
2 iptables -I FORWARD -p tcp -s 192.168.1.10 -j ACCEPT //允许转发从电脑A过来的数据
3 iptables -I FORWARD -p tcp -s 192.168.1.12 -j ACCEPT //允许转发从电脑C过来的数据
4 iptables -t nat PREROUTING -p tcp -s 192.168.1.10 -j DNAT --to 192.168.1.12 //将电脑A发送过来的数据转发到电脑C
5 iptables -t nat PREROUTING -p tcp -s 192.168.1.12 -j DNAT --to 192.168.1.10 //将电脑C发送过来的数据转发到电脑A
6 service iptables save //保存配置
7 service iptables restart //重启服务
你的做法在于不应该做第二条PREROUTING的动作,而应该做POSTROUTING,把A发往C的数据改为B发往C。这样C回包的时候就会回给B。
然后,B的iptables就知道做NAT回包处理了。 B会将C发回的数据包翻译成B发往A的数据包。
FORWARD里面,针对到C的数据包允许三个状态,到A的数据包就只允许两个状态。
iptables -A INPUT -m state --state NEW -m tcp -p tcp -s 192.168.1.10 -d 192.168.1.11 --dport 8000 -j ACCEPT
iptables -t nat -A PREROUTING -p tcp -s 192.168.1.10 -d 192.168.1.12 --dport 8000 -j DNAT --to-destination 192.168.1.12:8000
iptables -t nat -A POSTROUTING -p tcp -s 192.168.1.10 -d 192.168.1.12 --dport 8000 -j SNAT --to-source 192.168.1.11
iptables -A FORWARD -p tcp -d 192.168.1.12 --dport 8000 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -p tcp -d 192.168.1.10 --sport 8000 -m state --state ESTABLISHED,RELATED -j ACCEPT
呵呵,巧了,正好Linux版面也有这么个问题,你们是一个人呢,还是凑巧都遇到这个问题?
http://bbs.chinaunix.net/thread-4145552-1-1.html
回复 3# phanx
不是同一个人的,非常感谢你的解答,我先试试,看来我对这个的理解还是有偏差,非常感谢:em02: 回复 3# phanx
非常感谢,确实是可以了,再来说说我的理解,高兴啊。
页:
[1]