2006年04月26日
メンテナンス回線の経路(Linuxのポリシールーティングの活用)
データセンタに構築しているシステムでは、サービス用のインターネット回線とは別に、非常用・メンテナンス用の回線を利用したい場合があります。その際に問題となるのが「ルーティングをどうするか」だと思います。 DefaultGWは大抵の場合、サービス用回線にぶら下がっているルータを指しているでしょうから、どうやって非常時もしくはメンテナンス時に経路を切り替えるかを考えなければいけません。
ざっくり考えて有効そうな手段としては・・・
(1) なんらかのルーティングプロトコルを利用して切り替える?
(2) 特定のIPアドレス宛のパケットはメンテナンス回線を通るように経路を設定する。
(3)メンテナンス回線のIPアドレスが発信元のパケットはメンテナンス回線を経由する経路設定をする。
等が考えられると思います。
(1) は何となく上げてみたのですが、やはり実際の構築イメージが沸きません。少なくとも、メインルータが故障した場合に経路を切り変える事はできそうですが、それではメンテナンス回線としての用途には使えませんよね。(非常用バックアップ回線としての用途であれば利用できるでしょうが、それはルータの冗長構成の話に飛ぶし・・・・・)
(2) は最も簡単で現実的だと思いますが、メンテナンス回線を利用できるホストが限定されます。
ニーズによってはその方が都合のよい場合もあるかもしれませんね。
具体的には
な感じにするだけですね。
(3) はLinuxのポリシールーティングを利用する方法です。
DSASではルータもLinuxが担っているのでメンテナンス回線が直接LinuxBoxに繋がります。
このような環境では、以下のようなコマンドを投入するだけで、<メンテナンス回線のIP>へのコネクションを<メンテナンス回線のIF>を経由して応答させることができます。
尚、メンテナンス回線としてBフレッツなどの PPPOE を利用しているのであれば、/etc/ppp/ip-up.local と /etc/ppp/ip-down.local あたりに以下のような記述をすればよいでしょう。
通常のルーティングは「どの宛先」に対して「どの経路」を利用するかを指定しますが、これらは「ソースアドレスが<メンテナンス回線のIP>であれば<メンテナンス回線のIF>を経由しなさい」という設定になります。このような機能を「ソースルーティング」と呼ぶ事もあります。
Linuxでは「ポリシールーティング」という機構を利用することで、「こんな条件のパケットには何番のルーティングテーブルを適用しなさい」といった、細かい制御ができるようになっています。(カーネル構築時に CONFIG_IP_MULTIPLE_TABLES=y を指定する必要があります)
MULTIPLE_TABLES という名の通り、通常の route コマンドで表示・設定できるテーブルは、複数のテーブルの中のひとつに過ぎません。Linux では 256個のルーティングテーブルを持つことができ、特定のルールにマッチ(ip ruleコマンドで指定)したパケットに対してどのルーティングテーブルを適用するかを指定することができます。その代表例とも言えるのが上記の「ソースルーティング」ですが、応用次第で非常にトリッキーなパケット操作も可能です。
(1) なんらかのルーティングプロトコルを利用して切り替える?
(2) 特定のIPアドレス宛のパケットはメンテナンス回線を通るように経路を設定する。
(3)メンテナンス回線のIPアドレスが発信元のパケットはメンテナンス回線を経由する経路設定をする。
等が考えられると思います。
(1) は何となく上げてみたのですが、やはり実際の構築イメージが沸きません。少なくとも、メインルータが故障した場合に経路を切り変える事はできそうですが、それではメンテナンス回線としての用途には使えませんよね。(非常用バックアップ回線としての用途であれば利用できるでしょうが、それはルータの冗長構成の話に飛ぶし・・・・・)
(2) は最も簡単で現実的だと思いますが、メンテナンス回線を利用できるホストが限定されます。
ニーズによってはその方が都合のよい場合もあるかもしれませんね。
具体的には
route add -host <接続元IP> gw <メンテナンス回線GW>
な感じにするだけですね。
(3) はLinuxのポリシールーティングを利用する方法です。
DSASではルータもLinuxが担っているのでメンテナンス回線が直接LinuxBoxに繋がります。
このような環境では、以下のようなコマンドを投入するだけで、<メンテナンス回線のIP>へのコネクションを<メンテナンス回線のIF>を経由して応答させることができます。
ip route add dev <メンテナンス回線のIF> table 100
ip rule add from <メンテナンス回線のIP> table 100 pref 100
尚、メンテナンス回線としてBフレッツなどの PPPOE を利用しているのであれば、/etc/ppp/ip-up.local と /etc/ppp/ip-down.local あたりに以下のような記述をすればよいでしょう。
[ip-up.local]
#!/bin/sh
ip route add dev $PPP_IFACE table 100
ip rule add from $PPP_LOCAL table 100 pref 100
[ip-down.local]
#!/bin/sh
ip rule del from $PPP_LOCAL table 100 pref 100
※Debianのpppoeパッケージの場合です。
通常のルーティングは「どの宛先」に対して「どの経路」を利用するかを指定しますが、これらは「ソースアドレスが<メンテナンス回線のIP>であれば<メンテナンス回線のIF>を経由しなさい」という設定になります。このような機能を「ソースルーティング」と呼ぶ事もあります。
Linuxでは「ポリシールーティング」という機構を利用することで、「こんな条件のパケットには何番のルーティングテーブルを適用しなさい」といった、細かい制御ができるようになっています。(カーネル構築時に CONFIG_IP_MULTIPLE_TABLES=y を指定する必要があります)
MULTIPLE_TABLES という名の通り、通常の route コマンドで表示・設定できるテーブルは、複数のテーブルの中のひとつに過ぎません。Linux では 256個のルーティングテーブルを持つことができ、特定のルールにマッチ(ip ruleコマンドで指定)したパケットに対してどのルーティングテーブルを適用するかを指定することができます。その代表例とも言えるのが上記の「ソースルーティング」ですが、応用次第で非常にトリッキーなパケット操作も可能です。
klab_gijutsu2 at 20:47│Comments(0)│TrackBack(0)