Top > マルチホーミング
#! /bin/sh
# iproute2 を使って2つのISPを同時に利用するための設定スクリプト

#E=echo

export LANG=C

#Linuxが直接PPPoEを喋る時はこんな感じで情報取得できます。
#後述の IP_{a,b} や LINK_{a,b} で利用します。
#PPP0_IF_IP=`ifconfig ppp0 | grep 'inet addr' | 
#		sed -e 's/^.*inet addr://' -e 's/ .*$//'`
#PPP0_LINK_IP=`ifconfig ppp0 | grep 'inet addr' | 
#		sed -e 's/^.*P-t-P://' -e 's/ .*$//'`

#ISP A			  ;ISP B
TBL_a=10		  ;TBL_b=20
PRIORITY_a=10		  ;PRIORITY_b=10
DEV_a=eth1		  ;DEV_b=eth2
IP_a=192.168.0.254	  ;IP_b=192.168.1.254
LINK_a=192.168.0.253	  ;LINK_b=192.168.1.253
PREFIX_a=192.168.0.0/24   ;PREFIX_b=192.168.1.0/24

#LAN
DEV_c=eth0
IP_c=192.168.2.254
PREFIX_c=192.168.2.0/24

#古いルーティング情報を削除
ip route show table $TBL_a | sed -e 's/^/ip route del /' -e 's/$/ table '$TBL_a'/' | sh
ip route show table $TBL_b | sed -e 's/^/ip route del /' -e 's/$/ table '$TBL_b'/' | sh
ip route show table main   | egrep '^[1-9]' | sed -e 's/^/ip route del /' | sh
$E ip route del default
$E ip rule del priority $PRIORITY_a from $IP_a table $TBL_a
$E ip rule del priority $PRIORITY_b from $IP_b table $TBL_b

#デバッグ情報表示
echo %%%
netstat -rn
echo %%%
ip route show table main
echo %%%
ip route show table $TBL_a
echo %%%
ip route show table $TBL_b
echo %%%
ip rule list
echo %%%

#各サブネットへの経路設定
$E ip route add $PREFIX_a dev $DEV_a
$E ip route add $PREFIX_b dev $DEV_b
$E ip route add $PREFIX_c dev $DEV_c

#ISP A 側で通信するための静的ルート設定
$E ip route add AAA.AAA.AAA.AAA/18 via $LINK_a
$E ip route add XXX.XXX.XXX.XXX/21 via $LINK_a

#ISP B 側で通信するための静的ルート設定
$E ip route add BBB.BBB.BBB.BBB/21 via $LINK_b
$E ip route add YYY.YYY.YYY.YYY/20 via $LINK_b

#外部との経路設定
$E ip route add $PREFIX_a dev $DEV_a src $IP_a table $TBL_a
$E ip route add default dev $DEV_a via $LINK_a table $TBL_a
$E ip route add $PREFIX_b dev $DEV_b src $IP_b table $TBL_b
$E ip route add default dev $DEV_b via $LINK_b table $TBL_b

#デフォルトルート設定(1:1の割合でラウンドロビン)
#(Linux Advanced Routing & Traffic Control HOWTO 4.2.2. 負荷分散 参照)
$E ip route add default scope global nexthop via $LINK_a dev $DEV_a weight 1 \
                                     nexthop via $LINK_b dev $DEV_b weight 1

#外から開始された通信を、同じISPに返すための設定
#(Linux Advanced Routing & Traffic Control HOWTO 4.2.1. アクセス分割 参照)
$E ip rule add priority $PRIORITY_a from $IP_a table $TBL_a
$E ip rule add priority $PRIORITY_b from $IP_b table $TBL_b

#念のためルート情報のキャッシュをクリア
$E ip route flush cache

#デバッグ情報表示
echo %%%
netstat -rn
echo %%%
ip route show table main
echo %%%
ip route show table $TBL_a
echo %%%
ip route show table $TBL_b
echo %%%
ip rule list
echo %%%

exit 0

http://flatray.com/linux/multihome/iproute.sh.txt


新規 編集 添付 名前変更 バックアップ   ホーム バックアップ リンク元   最終更新のRSS