环境:
机房1-A,核心机房,单条网通线路
机房2-B,交换机房,双线机房(电信+网通),网通为网关
机房3-C,数据请求,数据运用,纯电信网络
各机房在这儿假设成单一的一台主机(IP为虚拟IP),则为:
SA:58.22.7.120
SB:电信:218.85.135.22,网通:58.22.6.3,网通网关是:58.22.6.2
SC:电信:61.154.149.29
需求:SC用户请求在SA中的数据,通过SB做中转,我们知道,电信直接访问网通的IP,延时非常的大,对于实现查询的服务来说,是不能接受的。现在讲讲我是怎么解决这个问题的:
1.让SC请求的目的地址改成SB电信端的IP
2.让SB上的IPTABLES修改由SC发过来的请求的目的地址为SA的IP,同时,把数据包的源地址改成本机的网通地址
3.SB本机的默认路由会转发此数据包,把数据包由网关58.22.6.2发出,指向58.22.7.120
4.SA主机收到由SB发送过来的数据包,正常返回请求数据
5.SA发送的数据回到SB的网通接口;
6.SB的IPTABLES服务把由SA发送过来的数据包的源地址改成SB的电信端地址
实现语句为:
cmd=/sbin/iptables
$cmd -t nat -A PREROUTING -p tcp --dport 3003 -j DNAT --to 58.22.7.120:3003
$cmd -t nat -A POSTROUTING -p tcp --dport 3003 -j SNAT --to 58.22.6.3
$cmd -t nat -A PREROUTING -p tcp --sport 3003 -j DNAT --to 218.85.135.22:3003
#此改写语句是基于在SB上,网通是默认网关的,具体的环境可以相应改变。
#========================over===================
这是针对具体的端口的,如例中是3003端口,而我们有时需要的是不确定的端口,或者说是直接以路由的形式来完成,如果你有更好的方案,不防交流一下。
阅读(446) | 评论(0) | 转发(0) |