免费注册 查看新帖 |

Chinaunix

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

[网络管理] 咨询一个数据包网络跳转的问题 [复制链接]

论坛徽章:
2
操作系统版块每日发帖之星
日期:2015-08-06 06:20:00IT运维版块每日发帖之星
日期:2015-08-15 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-07-11 10:21 |只看该作者 |倒序浏览
假设有有三个公网ip

102.xxx.xxx.xxx
103.xxx.xxx.xxx
104.xxx.xxx.xxx

应用程序通过IP 102的某个端口,假设是5000端口,向103的5000端口发送数据。IP 103的5000端口收到IP 102的5000端口的数据后,接着向IP 104的5000端口转发数据。反之,IP 104的5000端口向103的5000端口发送数据,103的5000端口收到数据后,向102的5000端口转发数据。

请问上述功能,该用什么方法可以达到。之前咨询过一些高手,有说用路由器在103处中转可以达到,有说在103处部署中转程序可以达到。

用路由器的方法,经咨询一些路由器高手,貌似做不到,说是因为都是公网IP。

本人比较愚钝,请各位高手推荐一个方案。要求比较稳定,通信链路不容易出问题。

谢谢。

论坛徽章:
33
荣誉会员
日期:2011-11-23 16:44:17天秤座
日期:2014-08-26 16:18:20天秤座
日期:2014-08-29 10:12:18丑牛
日期:2014-08-29 16:06:45丑牛
日期:2014-09-03 10:28:58射手座
日期:2014-09-03 16:01:17寅虎
日期:2014-09-11 14:24:21天蝎座
日期:2014-09-17 08:33:55IT运维版块每日发帖之星
日期:2016-04-17 06:23:27操作系统版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-24 06:20:0015-16赛季CBA联赛之天津
日期:2016-05-06 12:46:59
2 [报告]
发表于 2014-07-11 13:12 |只看该作者
路由转发? NAT?

论坛徽章:
2
操作系统版块每日发帖之星
日期:2015-08-06 06:20:00IT运维版块每日发帖之星
日期:2015-08-15 06:20:00
3 [报告]
发表于 2014-07-11 13:39 |只看该作者
q1208c 发表于 2014-07-11 13:12
路由转发? NAT?


不知道这个算什么呢,昨天请教了一个思科路由器的高手,没解决呢。看看 chinaunix 有没有人可以指导下。

论坛徽章:
33
荣誉会员
日期:2011-11-23 16:44:17天秤座
日期:2014-08-26 16:18:20天秤座
日期:2014-08-29 10:12:18丑牛
日期:2014-08-29 16:06:45丑牛
日期:2014-09-03 10:28:58射手座
日期:2014-09-03 16:01:17寅虎
日期:2014-09-11 14:24:21天蝎座
日期:2014-09-17 08:33:55IT运维版块每日发帖之星
日期:2016-04-17 06:23:27操作系统版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-24 06:20:0015-16赛季CBA联赛之天津
日期:2016-05-06 12:46:59
4 [报告]
发表于 2014-07-11 13:47 |只看该作者
回复 3# 草中宝


你得自己找张纸, 把你的网络画下来, 再画出你的 数据包 的走向. 再画出 数据包 的 IP:port 信息. 这样, 才能决定你用的是 转发, 还是 NAT.

   

论坛徽章:
0
5 [报告]
发表于 2014-07-11 15:06 |只看该作者
学习,good,哈哈

论坛徽章:
0
6 [报告]
发表于 2014-07-11 15:06 |只看该作者
学习,good,哈哈

论坛徽章:
0
7 [报告]
发表于 2014-07-11 15:06 |只看该作者
学习,good,哈哈

论坛徽章:
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
8 [报告]
发表于 2014-07-11 22:11 |只看该作者
本帖最后由 phanx 于 2014-07-11 22:45 编辑

回复 1# 草中宝


    你咨询的那些高手给你的思路是对的,而那些路由器高手则太水了。不过不需要配置什么中转程序,Linux的iptables 配置双向NAT可以实现,路由器上配置双向NAT也应该能够实现。
   
但是有一点必须说明,你的假设,“102的某个端口,假设是5000端口,向103的5000端口发送数据。”,是不成立的。在102或者104上面侦听5000端口的时候,是不能够再以5000端口作为源端口发起连接的。
应该是102上,以5000以外的任意端口xxxx向103的5000端口发起连接。同样,104上,以5000以外的任意端口yyyy向103的5000端口发起连接。


通信对1  src 102:xxxx   dst 103:5000 ----> src 103:xxxx  dst 104:5000            回包的时候是  src 104:5000  dst 103:xxxx ---->  src 103:5000   dst 103:xxxx

通信对2  src 104:yyyy   dst 103:5000 ----> src 103:yyyy  dst 102:5000            回包的时候是  src 102:5000  dst 103:yyyy ---->  src 103:5000   dst 104:yyyy


那么在103的地方对通信对1做的策略包括DNAT和SNAT。 把源地址由102翻译成103  把目的地址由103翻译成104, 回包则相反。
那么在103的地方对通信对2做的策略包括DNAT和SNAT。 把源地址由104翻译成103  把目的地址由103翻译成102, 回包则相反。


iptable 这样处理一个包  INPUT --->  PREROUTING --->  FORWARD --->  POSTROUTING --->  OUTPUT

   因此在PREROUTING的时候做DNAT  ,然后 FORWARD , 然后在POSTROUING的时候做SNAT ,在发送出去。

先执行

  1. echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
  2. sysctl -p
复制代码
按照下面的样子编辑 /etc/sysconfig/iptables , 然后重启iptables服务就可以了。

  1. # Firewall configuration written by system-config-firewall
  2. # Manual customization of this file is not recommended.

  3. # 下面六行是加入的
  4. *nat
  5. -A PREROUTING -p tcp -s 102.x.x.x -d 103.x.x.x --dport 5000 -j DNAT --to-destination 104.x.x.x:5000
  6. -A POSTROUTING -p tcp -s 102.x.x.x -d 104.x.x.x --dport 5000 -j SNAT --to-source 103.x.x.x
  7. -A PREROUTING -p tcp -s 104.x.x.x -d 103.x.x.x --dport 5000 -j DNAT --to-destination 102:5000
  8. -A POSTROUTING -p tcp -s 104.x.x.x -d 103.x.x.x --dport 5000 -j SNAT --to-source 103.x.x.x
  9. COMMIT

  10. *filter
  11. :INPUT ACCEPT [0:0]
  12. :FORWARD ACCEPT [0:0]
  13. :OUTPUT ACCEPT [0:0]
  14. -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
  15. -A INPUT -p icmp -j ACCEPT
  16. -A INPUT -i lo -j ACCEPT
  17. -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT

  18. # 下面两行是加入的
  19. -A INPUT -m state --state NEW -m tcp -p tcp -s 102.x.x.x -d 103.x.x.x --dport 5000 -j ACCEPT
  20. -A INPUT -m state --state NEW -m tcp -p tcp -s 104.x.x.x -d 103.x.x.x --dport 5000 -j ACCEPT


  21. -A INPUT -m state --state NEW -m tcp -p tcp --dport 5901 -j ACCEPT
  22. -A INPUT -j REJECT --reject-with icmp-host-prohibited

  23. # 下面四行是加入的
  24. -A FORWARD -p tcp -d 102.x.x.x --dport 5000 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
  25. -A FORWARD -p tcp -d 104.x.x.x --sport 5000 -m state --state ESTABLISHED,RELATED -j ACCEPT
  26. -A FORWARD -p tcp -d 104.x.x.x --dport 5000 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
  27. -A FORWARD -p tcp -d 102.x.x.x --sport 5000 -m state --state ESTABLISHED,RELATED -j ACCEPT

  28. -A FORWARD -j REJECT --reject-with icmp-host-prohibited
复制代码
注意代码加的位置。


重启服务
  1. service iptables restart
复制代码
让我们用nc在RHEL 6.5  进行测试。


先在104上侦听5000端口
[root@host104 ~]# nc -v -l 5000


同时在102上也侦听5000端口
[root@host102 ~]# nc -v -l 5000



然后102上面透过103向104 5000端口发起连接:
[root@host102 ~]# nc -n -v 103.x.x.x 5000 -w 10
Connection to 103.x.x.x 5000 port [tcp/*] succeeded!

然后输入 Send to 104


104上就会显示
Connection from 103.x.x.x port 5000 [tcp/commplex-main] accepted
Send to 104




104上面透过103向102 5000端口发起连接:
[root@host104 ~]# nc -n -v 103.x.x.x 5000 -w 10
Connection to 103.x.x.x 5000 port [tcp/*] succeeded!
然后输入 Send to 102


102上也会显示
Connection from 103.x.x.x port 5000 [tcp/commplex-main] accepted
Send to 102


OK,测试通过。

论坛徽章:
2
操作系统版块每日发帖之星
日期:2015-08-06 06:20:00IT运维版块每日发帖之星
日期:2015-08-15 06:20:00
9 [报告]
发表于 2014-07-12 09:00 |只看该作者
感谢 phanx 这位朋友,真的是太感谢了。

不但专业知识强,更加重要的是肯实际动手操作,一个真正的技术人员就应该像您这样的。

论坛徽章:
0
10 [报告]
发表于 2014-07-13 23:15 |只看该作者
回复 8# phanx


果真,这边的问题和我的问题是一样的,只是他比我这菜鸟还要水一下,他问的思科的高手也水的不行
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP