Home > Tech > LINUXでマルチホーミング

LINUXでマルチホーミング

November 25th, 2008

こんばんは、今日はLinuxでマルチホーミングを実現する方法を紹介します。
LinuxサーバーはCentOS5.2を使っています。

ちなみにマルチホーミングとは?
企業などのネットワークからインターネットなど外部へ接続する際に、複数の経路(ISP)を使って接続すること(下記の図参照)で、接続を単一のISPに依存する場合に比べ、耐障害性の向上や回線負荷の軽減などが期待できるといったメリットが考えられます。

ではマルチホーミングの実現する方法を説明します。

構成

説明(カッコ内は後述のifup.localファイル内の変数に対応)

server・・・マルチホーミングの設定をするサーバー
eth0:1.1.1.1 (IF1:IP1)
eth1:2.2.2.1 (IF2:IP2)

GW1:
GWIP:1.1.1.2(GATEWAY1)
ネットワークアドレス:1.1.1.0/29(IP1_NET)
GW2:
GWIP:2.2.2.2(GATEWAY2)
ネットワークアドレス:2.2.2.0/29(IP2_NET)

ISP1への経路名:gate1
ISP2への経路名:gate2

手順

1.ルーティングテーブルを追加する。
ルーティングテーブルはこのように追加することができます。
上記説明のISPへの経路名を書き込みます。

#vi /etc/etc/iproute2/rt_tables

#最終行に追加
200 gate1
201 gate2

2.ルーティングルールを作成する。
ルーティングのルールは”ip route add ・・・”,”ip rule add ・・・”などのコマンドで追加する
こともできますが、ネットワークやインターフェイスの再起動時にリセットされてしまうので
下記スクリプトを作成して再起動後も自動的に作成したルールを適用させます。

#vi /etc/sysconfig/network-scripts/ifup-local

#!/bin/sh
#
# マルチホーミング設定スクリプト
#

DEVICE=$1

###############################################################################
#
# このスクリプトに必要なパラメータ
#
###############################################################################

IP1=1.1.1.1 # eth0のIPアドレス
IP2=2.2.2.1 # eth1のIPアドレス
IF1=eth0
IF2=eth1
GATEWAY1=1.1.1.2 # IP1,IF1のゲートウェイアドレス
GATEWAY2=2.2.2.2 # IP2,IF2のゲートウェイアドレス
IP1_NET=1.1.1.0/29 # IP1,GATEWAY1のネットワークアドレス
IP2_NET=2.2.2.0/29 # IP2,GATEWAY2のネットワークアドレス
TABLE1_NAME=gate1 # /etc/iproute2/rt_tablesに追記したルートテーブル名1
TABLE2_NAME=gate2 # /etc/iproute2/rt_tablesに追記したルートテーブル名2

case in 2012/1/26修正

case $DEVICE in
eth0)
ip route add $IP1_NET dev $IF1 src $IP1 table $TABLE1_NAME
ip route add default via $GATEWAY1 table $TABLE1_NAME
ip rule add from $IP1 table $TABLE1_NAME
ip route add default via $GATEWAY1 metric 15
;;

eth1)
ip route add $IP2_NET dev $IF2 src $IP2 table $TABLE2_NAME
ip route add default via $GATEWAY2 table $TABLE2_NAME
ip rule add from $IP2 table $TABLE2_NAME
ip route add default via $GATEWAY2 metric 10
;;
esac

これで、マルチホーミングの設定は終わりです。

各インターフェイスの最終行の処理のところで、metric で優先付けを行ってます。これにより優先経路がNGの場合は、もう一方(低優先度の経路。ここではeth1)からトラフィックを送出します。通常は、入りのインターフェイスから、そのままパケットを戻します。

皆さんもやってみてください。

ではまたいずれ

Comments are closed.
Theme by NeoEase. Valid XHTML 1.1 and CSS 3.