免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3274 | 回复: 4
打印 上一主题 下一主题

iptables 端口转发,请赐教 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-07-11 21:41 |只看该作者 |倒序浏览
环境是这样子的:
电脑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

论坛徽章:
0
2 [报告]
发表于 2014-07-11 21:46 |只看该作者
自己顶起来,希望大牛来帮助啊,感激不尽

论坛徽章:
12
技术图书徽章
日期:2014-07-11 16:27:5215-16赛季CBA联赛之山西
日期:2016-01-08 16:10:11操作系统版块每日发帖之星
日期:2015-08-01 06:20:002015亚冠之武里南联
日期:2015-06-11 01:12:162015年亚洲杯之阿联酋
日期:2015-03-20 11:41:462015年亚洲杯纪念徽章
日期:2015-03-18 18:08:422015年辞旧岁徽章
日期:2015-03-03 16:54:15丑牛
日期:2015-01-10 22:23:32天秤座
日期:2014-08-20 15:53:35水瓶座
日期:2014-08-11 12:08:51午马
日期:2014-07-23 23:03:38IT运维版块每日发帖之星
日期:2016-02-18 06:20:00
3 [报告]
发表于 2014-07-11 23:26 |只看该作者
本帖最后由 phanx 于 2014-07-11 23:31 编辑

回复 1# Gallop_hu


   
Gallop_hu 发表于 2014-07-11 21:41
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




论坛徽章:
0
4 [报告]
发表于 2014-07-13 17:20 |只看该作者
回复 3# phanx


不是同一个人的,非常感谢你的解答,我先试试,看来我对这个的理解还是有偏差,非常感谢

论坛徽章:
0
5 [报告]
发表于 2014-07-13 17:55 |只看该作者
回复 3# phanx


非常感谢,确实是可以了,再来说说我的理解,高兴啊。


您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP