マルチホ−ミングの設定方法


マルチホーミングとは、複数のアクセス回線でインターネットに接続することを言います。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の設定(アドレス、サブネットマスク、ゲートウェイ)は済んでいるものとします。

  1. まず、iproute2がインストールされているか、下記で確認します。RedHat8/9ならデフォルトでインストールされています。

     # rpm -qa | grep iproute-2

  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つの値はデフォルトで決まっているので、ユーザはこの間の優先度を使用して、テーブルを定義する。

  3. サーバから通信を始める場合に使用するデフォルトルートを決める。ここでは、当然ISP-Bのルートとする。こうすると、デフォルトのままでは、ISP-Bからeth1経由でアクセスしてきても、ISP-Aからeth0経由でアクセスしてきても、サーバからの帰りのパケットはISP-Bルートに出て行ってしまう。従って、ISP-Aからのアクセスはパケットを受け取ることができない。
    そこで、「eth0から来たアクセスにはGateway0を経由して返送し、その他はGateway1を経由して返送する。」としてあげれば、ISP-Aからのアクセスにも正常に返送できることになる。

  4. 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)


  5. 設定が完了したら、下記により設定内容を確認する。

    [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

  6. 問題なければ通信確認試験を行う。

    上記設定なら、サーバからISP-Aのグローバルアドレス(ホスト名)へ、クライアントからISP-Bのグローバルアドレス(ホスト名)へそれぞれアクセスし、Web画面が正常に表示されることを確認すればよい。

  7. 動作に問題が無いことが確認できたら、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へ