在Linux上基于源地址路由实现电信网通双线


想要通过普通的静态策略路由来实现电信网通双线基本上是不可能的,因为那将需要维护相当大的一个IP段的数据库,而且还需要随时更新才能保证效果。
后来听前辈们说,可以采用基于源地址路由的方式来处理,让进来的数据,从哪个IP进来就从哪个IP返回。
下面就是一个在生产中得到了实际应用的脚本:

 #!/bin/bash
##
## CNC_RULE AND CTC_RULE from /etc/iproute2/rt_tables
## echo 200 cnc >> /etc/iproute2/rt_tables
## echo 201 ctc >> /etc/iproute2/rt_tables
##

CTC_DEVICE="eth0"
CTC_RULE="ctc"
CTC_NETWORK="10.10.10.0"
CTC_GATEWAY="10.10.10.1"
CTC_IPADDR="10.10.10.2"

CNC_DEVICE="eth1"
CNC_RULE="cnc"
CNC_NETWORK="20.20.20.0"
CNC_GATEWAY="20.20.20.1"
CNC_IPADDR="20.20.20.2"

ACTION="add"

if [ $# -ne 0 ]; then
if [ "$1" != "add" -a "$1" != "del" ]; then
echo "error"
else
ACTION="$1"
fi
fi

ip route ${ACTION} ${CNC_NETWORK} dev ${CNC_DEVICE} src ${CNC_IPADDR} table ${CNC_RULE}
ip route ${ACTION} default via ${CNC_GATEWAY} table ${CNC_RULE}

ip route ${ACTION} ${CTC_NETWORK} dev ${CTC_DEVICE} src ${CTC_IPADDR} table ${CTC_RULE}
ip route ${ACTION} default via ${CTC_GATEWAY} table ${CTC_RULE}

ip rule ${ACTION} from ${CNC_IPADDR} table ${CNC_RULE}

ip rule ${ACTION} from ${CTC_IPADDR} table ${CTC_RULE}

ip route add default via ${CTC_GATEWAY}

ip rule add to 200.200.0.0/16 table cnc

在执行脚本之前,先执行以下命令:
echo 200 cnc >> /etc/iproute2/rt_tables
echo 201 ctc >> /etc/iproute2/rt_tables

最后的 ip rule add to 200.200.0.0/16 table cnc 相当于是添加了一个例外,让200.200.0.0/16这个段的直接从cnc出去。

  1. No comments yet.
(will not be published)
*