了解一些关于双线策略路由的知识还是很用的,这里我们主要讲解了双线策略路由的三种实现方式,参考了下论坛中关于电信+网通双线策略路由的帖子,并结合实际环境,将实现双线策略路由的几种方式总结如下,希望对有需要的朋友有所帮助,双线比单线要复杂多了,但把双线策略路由的原理弄明白了,就会发现其实并不难。
双线路由策略的实现
1.静态路由方式(这种方式是最简单的)
1)设置默认路由,比如电信
iproutereplacedefaultvia电信网关deveth1
2)设置双线策略路由,对另外一条线路
iprouteadd网通路由表1via网通网关deveth2metric1
iprouteadd网通路由表2via网通网关deveth2metric1
....
3)添加原路返回路由
双线策略路由规则设置完后,还要为每条线路加入相应的“原路返回路由”(从哪条线进来的数据,最终还是从这条线出去),不然就会出现这样的问题:电信用户通过网通的IP访问不到服务器,网通用户也不能通过电信IP访问到服务器。
iprouteflushtable100
iprouteadddefaultvia电信网关deveth1src电信IPtable100prio50
ipruleaddfrom电信IPtable100
iprouteflushtable200
iprouteadddefaultvia网通网关deveth2src网通IPtable200prio50
ipruleaddfrom网通IPtable200
iprouteadd192.168.0.0/24deveth0scopelinksrc192.168.0.1table100
iprouteadd192.168.0.0/24deveth0scopelinksrc192.168.0.1table200
2.双线策略路由方式
为了方便,我们增加2个双线策略路由表,电信=>100,网通=>200,这样再添加规则时,就可以直接用自定义的名称来替代数字
echo"100ctc" >>/etc/iproute2/rt_tables
echo"200cnc">> /etc/iproute2/rt_tables
1)设置默认路由(电信)
iproutereplacedefaultvia电信网关deveth1
2)对网通进行基于目的地址的双线策略路由
ipruleaddto网通路由表1tablecncprio100
ipruleaddto网通路由表2tablecncprio100
....
3)添加原路返回路由
prouteflushtablectc
iprouteadddefaultvia电信网关deveth1src电信IPtablectc
iprouteadd192.168.0.0/24deveth0scopelinksrc192.168.0.1tablectc
ipruleaddfrom电信IPtablectc
iprouteflushtablecnc
iprouteadddefaultvia网通网关deveth2src网通IPtablecnc
iprouteadd192.168.0.0/24deveth0scopelinksrc192.168.0.1tablectc
ipruleaddfrom网通IPtablecnc
3.iptables打标记+iproute2fwmark
1)使用CONNMARK对连接进行标记
外网进来数据
iptables-tmangle-APREROUTING-ieth1-mconntrack--ctstateNEW-jCONNMARK--set-mark0x100
iptables-tmangle-APREROUTING-ieth2-mconntrack--ctstateNEW-jCONNMARK--set-mark0x200
转发出去的数据
iptables-tmangle-APOSTROUTING-oeth1-mconntrack--ctstateNEW-jCONNMARK--set-mark0x100
iptables-tmangle-APOSTROUTING-oeth2-mconntrack--ctstateNEW-jCONNMARK--set-mark0x200
局域网进来数据
iptables-tmangle-APREROUTING-ieth0-mconntrack--ctstateESTABLISHED,RELATED-jCONNMARK--restore-mark
本地出去数据
iptables-tmangle-AOUTPUT-mconntrack--ctstateESTABLISHED,RELATED-jCONNMARK--restore-mark
2)在IPROUTE2中做基于fwmark的双线策略路由
ipruleaddfwmark0x100tablectcprio40
ipruleaddfwmark0x200tablecncprio40
3)添加原路返回路由
iprouteaddtablectcto$CTC_NETdeveth1scopelink
iprouteaddtablectcto$CNC_NETdeveth2scopelink
iprouteaddtablectcto192.168.0.0/24deveth0scopelink
iprouteadddefaultvia电信网关deveth1tablectc
iprouteaddtablecncto$CTC_NETdeveth1scopelink
iprouteaddtablecncto$CNC_NETdeveth2scopelink
iprouteaddtablecncto192.168.0.0/24deveth0scopelink
iprouteadddefaultvia网通网关deveth2tablecnc
Iptables/NAT规则
sbin/iptables-tnat-APOSTROUTING-oeth1-s局域网网段-jSNAT--to-source电信外网IP
sbin/iptables-tnat-APOSTROUTING-oeth2-s局域网网段-jSNAT--to-source网通外网IP
如果外网IP是动态的,可以用MASQUERADE
sbin/iptables-tnat-APOSTROUTING-oeth1-s局域网网段-jMASQUERADE
sbin/iptables-tnat-APOSTROUTING-oeth2-s局域网网段-jMASQUERADE