作者:
胖头鱼
基本思路是获取电信IP地址列表,通过设置路由策略把访问电信地址的路由指向电信的网关,剩下的默认走网通的网关。下面的脚本仅通过路由策略设置实现基本的流量分割,没有一方断线自动切换的功能。
复制代码
流量分隔实现后,NAT规则这样写:
local_net="局域网地址"
cnc_if="网通接口网卡"
cnc_ip="网通接口网卡IP"
ctc_if="电信接口网卡"
cnc_ip="电信接口网卡IP"
iptables -t nat -A POSTROUTING -s $local_net -o $cnc_if -j SNAT --to $cnc_ip
iptables -t nat -A POSTROUTING -s $local_net -o $ctc_if -j SNAT --to $ctc_ip
下面的脚本可以抓取各运营商的IP地址网段,从CU里保存下来的,忘记是哪位大虾的作品了
复制代码
基本思路是获取电信IP地址列表,通过设置路由策略把访问电信地址的路由指向电信的网关,剩下的默认走网通的网关。下面的脚本仅通过路由策略设置实现基本的流量分割,没有一方断线自动切换的功能。
- #!/bin/sh
-
- #ctc电信 cnc网通
-
- #获取ip命令的绝对地址
- IP=`which ip`
-
- #定义电信网通的网关和网络接口
- ctc_gw="x.x.x.x"
- ctc_if="eth1"
- cnc_gw="y.y.y.y"
- cnc_if="eth2"
-
- #定义电信的路由表名称和路由策略优先级
- ctc_rt_id="100"
- ctc_rt_pref="100"
-
- ctc_rt_exist=`cat /etc/iproute2/rt_tables|grep "$ctc_rt_id ctc"|wc -l`
- if [ $ctc_rt_exist -eq 0 ]; then
- echo "$ctc_rt_id ctc" >> /etc/iproute2/rt_tables
- fi
-
- # 设置route table ctc的默认路由
- $IP route replace default via $ctc_gw dev $ctc_if table ctc
-
- # route table default的默认路由指向cnc_gw
- $IP route replace default via $cnc_gw dev $cnc_if table default
-
- # 清除当前访问ctc-network的路由策略
- $IP rule show |grep "^$ctc_rt_pref:" | while read ignore ignore ignore r1 r2 ignore t; do
- $IP rule del $r1 $r2 table $t
- done
-
- # 创建访问ctc-network的路由策略指向route table ctc,ctc-network列出所有属于ctc的网段,chinaunix.net论坛上有个脚本可以自动抓取,附在后面了。
- grep ^[0-9] ./ctc-network | while read ctcnet; do
- $IP rule add pref $ctc_rt_pref to $ctcnet table ctc
- done
-
- $IP route flush cache
local_net="局域网地址"
cnc_if="网通接口网卡"
cnc_ip="网通接口网卡IP"
ctc_if="电信接口网卡"
cnc_ip="电信接口网卡IP"
iptables -t nat -A POSTROUTING -s $local_net -o $cnc_if -j SNAT --to $cnc_ip
iptables -t nat -A POSTROUTING -s $local_net -o $ctc_if -j SNAT --to $ctc_ip
下面的脚本可以抓取各运营商的IP地址网段,从CU里保存下来的,忘记是哪位大虾的作品了
- #!/bin/sh
- FILE=./ip_apnic
- rm -f $FILE
- wget http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest -O $FILE
-
- grep 'apnic|CN|ipv4|' $FILE | cut -f 4,5 -d'|'|sed -e 's/|/ /g' | while read ip cnt
- do
- echo $ip:$cnt
- mask=$(cat << EOF | bc | tail -1
- pow=32;
- define log2(x) {
- if (x<=1) return (pow);
- pow--;
- return(log2(x/2));
- }
- log2($cnt)
- EOF)
- echo $ip/$mask>> cn.net
- NETNAME=`whois $ip@whois.apnic.net | sed -e '/./{H;$!d;}' -e 'x;/netnum/!d' |grep ^netname | sed -e 's/.*: \(.*\)/\1/g' | sed -e 's/-.*//g'`
- NETNAME=`echo $NETNAME | sed -e 's/cJ/ /g' | awk -F' ' '{ printf $1; }'`
- case $NETNAME in
- CNC)
- echo $ip/$mask >> CNCGROUP
- ;;
- CHINANET|CNCGROUP)
- echo $ip/$mask >> $NETNAME
- ;;
- CHINATELECOM)
- echo $ip/$mask >> CHINANET
- ;;
- *)
- echo $ip/$mask >> OTHER
- ;;
- esac
- done
转载于:https://blog.51cto.com/zhuhongfei/207933