トップページ > スタッフノート

2008年10月01日

複数のプロバイダ利用について(Linux,FreeBSD)


Linuxではiproute2という
ポリシーベースルーティングが利用可能らしいです。
iproute2を利用して複数のプロバイダ接続による
回線の冗長化を試してみました。

複数のプロバイダを利用して回線の冗長化を考えた場合
通常の設定だとDefaultGWが1つしか指定できないため
DefaultGW側の回線が通信断になった時点で
返りのパケットを送信できずどちらのプロバイダからアクセスしても
通信できません。
iproute2では上記の問題を解決してくれるみたいです。


以下設定内容
・ISP別にアクセスを分割(例:ISP1側からのリクエストはISP1側のNexthopへ)
・内部からのパケット用にDefaultGWの複数登録(weightは同じで)


以下は設定内容をまとめたものです。

/etc/iproute2/rt_tablesのへ追加

100 ispprov1
101 ispprov2


iproute2へ切り替えるスクリプト


#! /bin/sh

#############################################
PROV1_NIC="eth0"
PROV1_IP="10.10.10.10"
PROV1_RT="10.10.10.1"
PROV1_NET="10.10.10.0/24"
PROV1_TABLE="ispprov1"
PROV1_PRI="100"

PROV2_NIC="eth1"
PROV2_IP="11.11.11.11"
PROV2_RT="11.11.11.1"
PROV2_NET="11.11.11.0/24"
PROV2_TABLE="ispprov2"
PROV2_PRI="200"

D_GW="10.10.10.1"
#############################################

case "$1" in
'start')

#PROV1
ip route add default via $PROV1_RT table $PROV1_TABLE
ip route add $PROV1_NET dev $PROV1_NIC table $PROV1_TABLE
ip rule add from $PROV1_IP table $PROV1_TABLE priority $PROV1_PRI

#PROV2
ip route add default via $PROV2_RT table $PROV2_TABLE
ip route add $PROV2_NET dev $PROV2_NIC table $PROV2_TABLE
ip rule add from $PROV2_IP table $PROV2_TABLE priority $PROV2_PRI

#nexthop
route del default gw $D_GW
ip route add default nexthop via $PROV1_RT nexthop via $PROV2_RT
;;

'stop')

#PROV1
ip rule delete from $PROV1_IP table $PROV1_TABLE priority $PROV1_PRI
ip route delete default via $PROV1_RT table $PROV1_TABLE
ip route delete $PROV1_NET dev $PROV1_NIC table $PROV1_TABLE

#PROV2
ip rule delete from $PROV2_IP table $PROV2_TABLE priority $PROV2_PRI
ip route delete default via $PROV2_RT table $PROV2_TABLE
ip route delete $PROV2_NET dev $PROV2_NIC table $PROV2_TABLE

#nexthop
#ip route delete default nexthop via $PROV1_RT nexthop via $PROV2_RT
#route add default gw $D_GW
;;

'restart')
$0 stop
$0 start
;;

*)
# usage
echo "Usage: $0 {start|stop|restart|} [ advansed routing script options ]"
exit 1
;;
esac

 

ちなみにFreeBSDではipfなどを利用して似たようなことが可能なようです。(ルールの上の方に書く!)
ISP別にアクセスを分割 ↓

pass out log quick on fxp0 to fxp1:11.11.11.1 from 11.11.11.11 to any

ただ、内部からのパケットを冗長する方法がよくわかりません。
ネットワークをVRRPなどを利用してうまく構成するしかないのでしょうか。。
このへんは良い情報が見つかればまた追記します。

以上です。