マルチホ−ミングの設定方法
マルチホーミングとは、複数のアクセス回線でインターネットに接続することを言います。Bフレッツでは、同時にPPPoEを2セッション設定できるのと、Asahiネットが低廉な固定IPサービスを始めたので、2つのISPと接続することにしました。
これにより、家庭内からみてインターネット接続環境が2ルート存在することになるため、何もしないと家庭内のサーバ/クライアントは、どちらの回線を使っていいかわからなくなり、アクセスできなくなってしまいます。そこで、ルータ(NTT-ME
BA8000Pro)のポリシールーティングで、動的IPのISP-Aはクライアント専用とし、固定IPのISP-Bはサーバ専用とすることにしました。しかし、せっかく回線が2回線あるのに勿体ないので、何とか両方を使えないか検討した結果、iproute2を使ったポリシールティングでマルチホーミングを実現しました。なお。この方法はサーバ側だけでの対策なので、何もルータはBA8000である必要はありません。
なお、ベースとなる構成や設定については、
セキュリティ強化対策(Router編)や
ポリシールーティング使用方法を参考にしてください。特に、VLAN設定やフィルタ等についてはこちらでは触れませんが、ISP-A関係のフィルタや静的IPマスカレードの設定は必要なはずです。設定内容は、ISP-BとセカンダリLANの設定に準じます。DNSルーティングは、おやじは実質使いようがなくなったので設定していません。
■ネットワーク構成
前提となるネットワークは、以下のような構成です。このようなケースでの最大の課題は、家庭内から見て同じ宛先が2ルートあるため、どちらに出て行くかを何らかのキーを基に決めなくてはならないのと、サーバへのアクセスに対する帰りのパケットを、要求元のルートに返してあげなければ通信できないということです。いろいろ調査・検討しましたがなかなかうまい方法が思いつかず、サーバにNICを2枚挿すことによりそのアドレスからアクセス元ルートを識別し、要求元へ返送するようにしました。
まずはさて置き、ISP-AとISP-Bにマルチセッション機能(BA8000は2セッションまで)でそれぞれログインして接続できるようにしなければなりません。設定は、マニュアルに従い、アカウント登録でそれぞれ指定されたユーザ名とパスワード等を入力するだけです。アカウント名は後でいろいろ出てきますので、分かりやすい名前にしておきます。ここでは、説明上ISP-AとISP-Bとしておきます。
■ポリシールーティングの設定
ポリシールーティングでは、iproute2で行います。上記の図は少し見難いので、関連する情報を追加・整理した構成図を以下に示します。
設定方法は以下の手順で行います。なお、eht0/1の設定(アドレス、サブネットマスク、ゲートウェイ)は済んでいるものとします。
- まず、iproute2がインストールされているか、下記で確認します。RedHat8/9ならデフォルトでインストールされています。
# rpm -qa | grep iproute-2 |
- 設定はipコマンドで行う。デフォルトでは下記のように、「local」、「main」、「default」の3つのルーティングテーブルが設定されている。
# ip rule
0: from all lookup local
32766: from all lookup main
32767: from all lookup default |
先頭の数字は優先度を表し、0が最高優先度、32767が最低優先度で、上記3つの値はデフォルトで決まっているので、ユーザはこの間の優先度を使用して、テーブルを定義する。
- サーバから通信を始める場合に使用するデフォルトルートを決める。ここでは、当然ISP-Bのルートとする。こうすると、デフォルトのままでは、ISP-Bからeth1経由でアクセスしてきても、ISP-Aからeth0経由でアクセスしてきても、サーバからの帰りのパケットはISP-Bルートに出て行ってしまう。従って、ISP-Aからのアクセスはパケットを受け取ることができない。
そこで、「eth0から来たアクセスにはGateway0を経由して返送し、その他はGateway1を経由して返送する。」としてあげれば、ISP-Aからのアクセスにも正常に返送できることになる。
- 3項で示した動作をさせるための設定方法は、下記のとおりにすればよい。
# ip route flush table main (1)
# ip route add 192.168.1.0/24 dev eth1 src 192.168.1.100 (2)
# ip route add 192.168.0.0/24 dev eth0 src 192.168.0.100 (2)
# ip route add 127.0.0.0/8 dev lo (3)
# ip route add table main default via 192.168.1.1 (4)
# ip rule add from 192.168.0.100 table 1 prio 10000 (5)
# ip route add table 1 default via 192.168.0.1 (6)
|
- (1)〜(5)で、mainテーブルを再設定している。おやじの環境では、mainテーブルのデフォルトゲートウェイの設定がGateway0になっており、上書きはできないため部分的に消去しようとしたがうまくできなかった(マニュアルを読みきれていないだけ)ので、初期化して再設定した。
- (1)で、mainテーブルを初期化。なお、万が一に備えて「ip route show table
main」で現在の設定を確認できるので、初期化する前に控えておくとよい。
- (2)は、192.168.1.0/24のネットワークは、dev eth1で、インタフェースアドレスは
192.168.1.100に繋がっているという意味。192.168.0.0/24のネットワークは、dev
eth0で、インタフェースアドレスは 192.168.0.100に繋がっているという意味。
- (3)は、lo(ループバック)の設定。なお、RedHat9では、APIPA(169.254.0.0/16)の設定があったが、そもそもAPIPAがあるような環境は、IPアドレスの管理ミスなので無視した。(RedHat8には本設定は無い)
- (4)で、mainテーブルのデフォルトゲートウェイは192.168.1.1と設定。(おやじの環境では、ここが192.168.0.1となっていた。)
- (5)で、192.168.0.100から流入したパケットの応答パケットは、優先度10000のtable
1を使用すると宣言し、(6)で、table 1のデフォルトゲートウェイは192.168.0.1と指定。
- 設定が完了したら、下記により設定内容を確認する。
[table 1の追加確認]
# ip rule
0: from all lookup local
10000: from 192.168.0.100 lookup 1
32766: from all lookup main
32767: from all lookup 253
|
[mainテーブルの内容確認]
# ip route show table main
192.168.0.0/24 dev eth0 scope link src 192.168.0.100
192.168.1.0/24 dev eth1 scope link src 192.168.1.100
127.0.0.0/8 dev lo scope link
default via 192.168.1.1 dev eth1
|
[table 1テーブルの内容確認]
# ip route show table 1
default via 192.168.0.1 dev eth0
|
- 問題なければ通信確認試験を行う。
上記設定なら、サーバからISP-Aのグローバルアドレス(ホスト名)へ、クライアントからISP-Bのグローバルアドレス(ホスト名)へそれぞれアクセスし、Web画面が正常に表示されることを確認すればよい。
- 動作に問題が無いことが確認できたら、4項のコマンド群をスクリプトにしておき、rc.localでシステム起動時に設定されるようにしておく。4項で設定しても再起動すると設定が消えてしまう。tableは「proto
static」とオプション指定すれば設定を保存できそうだが、ruleは保存できなさそうなので、一括してシステム起動時に設定することにした。
下記内容を適当な名前(ex. multihoming.sh等)で、任意の場所(ex. /usr/local/bin等)におき、rc.localに登録しておく。これで、システム起動時に設定される。
#!/bin/sh
### ipのコマンドパスの定義 ###
IP='/sbin/ip'
$IP route flush table main
$IP route add 192.168.1.0/24 dev eth1 src 192.168.1.100
$IP route add 192.168.0.0/24 dev eth0 src 192.168.0.100
$IP route add 127.0.0.0/8 dev lo
$IP route add table main default via 192.168.1.1
$IP rule add from 192.168.0.100 table 1 prio 10000
$IP route add table 1 default via 192.168.0.1
|
Top Pageへ