双线策略路由的三种实现方式总结-应用技巧(2)

王朝数码·作者佚名  2010-06-07
宽屏版  字体: |||超大  

3)添加原路返回路由

ip route flush table ctc

ip route add default via 电信网关 dev eth1 src 电信IP table ctc

ip route add 192.168.0.0/24 dev eth0 scope link src 192.168.0.1 table ctc

ip rule add from 电信IP table ctc

ip route flush table cnc

ip route add default via 网通网关 dev eth2 src 网通IP table cnc

ip route add 192.168.0.0/24 dev eth0 scope link src 192.168.0.1 table ctc

ip rule add from 网通IP table cnc

3. iptables打标记+iproute2 fwmark

1)使用 CONNMARK 对连接进行标记

外网进来数据

iptables -t mangle -A PREROUTING -i eth1 -m conntrack --ctstate NEW -j CONNMARK --set-mark 0x100

iptables -t mangle -A PREROUTING -i eth2 -m conntrack --ctstate NEW -j CONNMARK --set-mark 0x200

转发出去的数据

iptables -t mangle -A POSTROUTING -o eth1 -m conntrack --ctstate NEW -j CONNMARK --set-mark 0x100

iptables -t mangle -A POSTROUTING -o eth2 -m conntrack --ctstate NEW -j CONNMARK --set-mark 0x200

局域网进来数据

iptables -t mangle -A PREROUTING -i eth0 -m conntrack --ctstate ESTABLISHED,RELATED -j CONNMARK --restore-mark

本地出去数据

iptables -t mangle -A OUTPUT -m conntrack --ctstate ESTABLISHED,RELATED -j CONNMARK --restore-mark

2)在 IPROUTE2 中做基于 fwmark 的策略路由

ip rule add fwmark 0x100 table ctc prio 40

ip rule add fwmark 0x200 table cnc prio 40

3)添加原路返回路由

ip route add table ctc to $CTC_NET dev eth1 scope link

ip route add table ctc to $CNC_NET dev eth2 scope link

ip route add table ctc to 192.168.0.0/24 dev eth0 scope link

ip route add default via 电信网关 dev eth1 table ctc

ip route add table cnc to $CTC_NET dev eth1 scope link

ip route add table cnc to $CNC_NET dev eth2 scope link

ip route add table cnc to 192.168.0.0/24 dev eth0 scope link

ip route add default via 网通网关 dev eth2 table cnc

Iptables/NAT 规则

/sbin/iptables -t nat -A POSTROUTING -o eth1 -s 局域网网段 -j SNAT --to-source 电信外网IP

/sbin/iptables -t nat -A POSTROUTING -o eth2 -s 局域网网段 -j SNAT --to-source 网通外网IP

如果外网IP是动态的,可以用 MASQUERADE

/sbin/iptables -t nat -A POSTROUTING -o eth1 -s 局域网网段 -j MASQUERADE

/sbin/iptables -t nat -A POSTROUTING -o eth2 -s 局域网网段 -j MASQUERADE

端口映射

端口映射可以分别针对两条线做端口映射

比如 LAN口的IP为 192.168.0.1,内网服务器IP为 192.168.0.100,映射端口为 80

iptables -t nat -A PREROUTING -p tcp --dport 80 -d 电信IP -j DNAT --to-destination 192.168.0.100

iptables -t nat -A PREROUTING -p tcp --dport 80 -d 网通IP -j DNAT --to-destination 192.168.0.100

端口回流(内网可以通过外网IP访问映射后的服务器)

iptables -t nat -A POSTROUTING -p tcp -s 192.168.0.0/24 --dport 80 -d 192.168.0.100 -j SNAT --to-source 192.168.0.1

[注]:上述规则应放到 NAT 规则之前

常见问题(FAQ)

1. 不能实现 “交叉访问” 到服务器

即:会出现外网电信用户只能通过电信IP访问到服务器,而通过网通IP访问不了;

同理,网通用户只能通过网通IP访问到服务器,而通过电信IP却访问不了。也就是只是单纯地解决了 “内网访问哪里,走哪条线路”

答:电信用户通过网通IP访问时,数据到达了服务器上,本应该从网通的线路返回的,但最终却从电信的线路出去了,这样的数据会被上层网关丢弃。

此时需要加入 “原路返回路由” ,实现 “从哪条线来的,依然从哪条线返回“。

2. 外网用户不能交叉访问映射后的内网服务器

即:电信用户可以通过电信IP访问到内网服务器,网通用户可以通过网通IP访问到内网服务器

但是:网通用户不能通过电信IP访问到内网服务器,电信用户也不能网通IP访问到内网服务器

答:路由缓存引起的,给内核打补丁,或每隔 2 秒左右刷新路由缓存

3. 内网用户不能通过外网IP访问内网服务器

答:a. 没有做SNAT(端口回流),加入回流规则即可

b. 加入 ”原路返回路由“ 时,没有将局域网的路由加入进去

第一页    上一页    第2页/共2页    下一页    最后页
第01页 第02页 
 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有