Chinaunix首页 | 论坛 | 博客
  • 博客访问: 29007
  • 博文数量: 7
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 65
  • 用 户 组: 普通用户
  • 注册时间: 2014-10-29 10:43
文章分类

全部博文(7)

我的朋友

分类: LINUX

2015-07-17 14:33:30

三台主机以及对应端口:
172.17.0.2:8002  172.17.0.3:8003  172.17.0.4:8090

场景:172.17.0.3:8003能够访问172.17.0.4的8090端口,但172.17.0.2:8002不能直接访问,因此需要通过172.17.0.3:8003来做代理

方案一:
在172.17.0.2 上面:
iptables -t nat -A PREROUTING -p tcp -d 172.17.0.4 --dport 8090 -j DNAT --to-destination 172.17.0.3:8003
//在路由前,对于访问172.17.0.4 的8090端口请求,将它的目的地址和端口转换到172.17.0.3:8003上面

iptables -t nat -A POSTROUTING -p tcp -d  172.17.0.3 --dport 8003 -j SNAT --to-source 172.17.0.2
//在出路由后,对于想要访问172.17.0.3的8003端口的数据包,将它的源地址转换成172.17.0.2本机地址,这样就实现了将包换成了172.17.0.2去请求了

在172.17.0.3上面:
iptables -t nat -A PREROUTING -p tcp -d 172.17.0.3 --dport 8003 -j DNAT --to-destination 172.17.0.4:8090
//在路由前,对于访问172.17.0.3自己的8003端口请求,将它的目的地址和端口转换到172.17.0.4:8090上面

iptables -t nat -A POSTROUTING -p tcp -d 172.17.0.4 --dport 8090 -j SNAT --to-source 172.17.0.3
//出路由后,对于访问172.17.0.4的8090端口数据包,将它原地址换成172.17.0.3本机地址,实现了请求包通过172.17.0.3来请求了

思考:为什么prerouting一定对应了postrouting?
其实路由转发,就是对应了源地址、目的地址的转换,光让下一跳路由知道源或者目的都是不够的,都会导致包的传送和回来路径不正确,导致无法正常收到数据包

方案二:使用rinetd服务来实现,相比较iptables方便点,毕竟是一个tcp连接的工具了
下载源码包,这个去网上下吧
解压后,make && make install 就可以了
程序路径 /usr/sbin/rinetd
需要配置文件 /etc/rinetd.conf
配置文件格式很简单:
[Source Address] [Source Port] [Destination Address] [Destination Port]

在172.17.0.2 上面:
cat /etc/rinetd.conf
0.0.0.0 8002 172.17.0.3 8003

在172.17.0.3上面:
cat /etc/rinetd.conf
0.0.0.0 8003 172.17.0.4 8090
使用rinetd服务,会开启本机的监听端口,即访问本机的该端口会转发到目的地址和端口,使用起来非常简单。

阅读(934) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~