バーチャルホスト対応ネットワークの構築


異なるサイトを1台のサーバ動かすには、各デーモン(WWW/FTP/SMTP等)のバーチャルホスト機能を使うことで実現できます。これを、マルチホーミング(複数のアクセス回線でインターネットに接続すること)環境で、回線毎にバーチャルホストで動かす場合、サーバでのポリシールーティング対応ルータでのポリシールーティング対応が必要になります。基本的な機能については問題ないのですが、システムとしてネットワーク全体を考えると思わぬ落とし穴がありましたので、ここで整理しておくことにします。
合わせて、この問題の対策の中で拾い物(NICが1枚でもIPベースのバーチャルホスト対応が可能で、且つサーバでのマルチホーミング対応が不要となる方法)があったのでまとめて置きます。但し、この方法は、ルータとしてBA8000が持つポリシールーティング機能(中でもソースアドレスルーティングの機能)が必要です。類似機能があるルータなら同じ方法が採れます。

■落とし穴?

おやじ宅では、インターネット接続環境が2ルート存在するため、家庭内からインターネットアクセスした時にどちらのISPに出て行くかを何らかのキーを基に決めなくてはならないのと、サーバへのアクセスに対する帰りのパケットを、要求元のルートに返してあげなければ通信できないという課題があります。これらの課題に対し、前者は、ルータのポリシールーティングで解決し、後者は、サーバにNICを2枚挿すことによりそのアドレスからアクセス元ルートを識別し、要求元へ返送するようサーバでのポリーシールーティングで対応しました。(下図の構成)



これにより、家庭内からのインターネットアクセスやインターネットからのサーバアクセスは何ら問題なくなったのですが、家庭内クライアントからの自宅サーバアクセスで問題が発生してしまいました。
クライアントと同一のセグメントである「192.168.0.100」のサイトにアクセスする時は、[4]のルートで何も問題はありません。しかし、「192.168.1.100」のサイトにアクセスすると、帰りのパケットはサーバのポリシールーティングで同じルートを戻る思っていたのですが、サーバがクライアントと同じネットワーク(192.168.0.0/24)を直接収容しているため、下記の[5]の経路でLAN2経由でクライアントに帰りのパケットを投げてしまい、クライアントは要求先と異なるアドレスで応答がくるため、無視して受け付けてくれないという問題が発生しました。



■新ネットワーク構成

上記の問題は、サーバがクライアントと同一のネットワーク(192.168.0.0/24)とサーバ専用のネットワーク(192.168.1.0/24)の両方を持っていることに起因します。解決策としては、以下の3方式が考えられます。

対策1は、BBRレベルでできる話ではなく非現実的です。従って、対策2か3を採ることになりますが、おやじのネットワークポリシーは、「サーバネットワークは、クライアントから分離して少しでもセキュリティを確保する。」ですから、対策3の分離方式としました。前者での対策は包含されるので、分離方式の方法から容易に分かると思います。
分離方式での構成例を以下に示します。ここでは、ISP-A向けのサーバのインタフェースを「192.168.1.100」とし、ISP-B向けのインタフェースを「192.168.1.101」としました。


◆NICの1本化

ここまで来て、ふと思ったのが、以前OAKさんが「NIC1枚でマルチホーミングができないか?」と言っていたことです。以前は、二つのサイトのネットワークを分けることばかり考えていたおりできないと思っていました。しかし、むしろ同じネットワークにしないと問題があることが分かり、これならできるのではないかと、1枚のNICに複数IPを付与してやってみました。
結果は、全く問題なく使えることが分かりました。更に、この方法は、設定が簡単になるというおまけがつきます。それは、サーバでのポリシールーティングの設定が不要になると言うことです。これは、サーバのインタフェースが物理的には1回線しかなく、2つのアドレスとも同じネットワークでゲートウェイも同じなので、単純にアクセスしてきた回線にアクセスしてきたアドレスを送信元として帰りのパケットを投げるだけでよくなるからです。
従って、この方法を採ればルータの設定を行い、サーバ側では新たにIPアドレスを既存のNICに付与するだけでできてしまいます。NICの増設という物理的な変更を伴わないので、サーバを止めることなくIPベースのバーチャルホスト対応のネットワーク環境が構築できます。



1枚のNICへ複数アドレスを付与するには、IPエイリアスという機能でできます。RedHatなら設定ツール(redhat-config-network)でGUIベースできますので、こちらで設定したほうが間違いがなく簡単です。というか、おやじはredhat-config-networkでどう管理しているのかが良くわかりません。関係しているのは、/etc/sysconfig/network、/etc/sysconfig/network-scripts、/etc/sysconfig/networking以下のファイルのはずです。

  1. 「システム設定」 -> 「ネットワーク」で設定画面を開く。
  2. 「デバイス」で「eth0」を選択し、「新規」を押す。
  3. 「デバイスタイプ」の選択でNICの絵を選択して、「進む」を押す。おやじの環境では名称がでないが、次の画面で、イーサネットデバイスかどうか確認できるので、違っていれば戻ればよい。
  4. イーサネットカードとして、eth0のデバイスが表示されているはずなので選択し、「進む」を押す。
  5. ネットワークの設定画面が出るので、「固定のIPアドレス設定」を選択し、アドレス:192.168.1.101、サブネット:255.255.255.0、デフォルトゲートウェイ:192.168.1.1を入力して、「進む」 -> 「適用」でeth0:1が作成される。(アドレス等は自分の環境に合わせること)
  6. 「ファイル」 -> 「保存」したら、etho:1を選択して「起動」する。

なお、サーバのデフォルトルートはeth0なので、サーバから通信が始まる場合はこのインターフェースが使用されます。おやじは、メインサイトは固定IPのISP-Bなのでこちらにルーティングすることにしてあります。また、一般的に、アクセスしている回線と異なるISPからSMTPは使えませんので、どのISPをサーバで使うかは、サーバでのDocomo対策やクライアントからのアクセス等に注意して決定してください。

◆ルータの設定

ルータの設定は、セキュリティ強化対策(Router編)ポリシールーティング使用方法を参考にすればできると思います。下記は、今回の対策に関係するところのみを示していますので、他の設定は前記のコンテンツに順じて設定してください。図を書いて、登録内容を書き出すなど明確にしてから作業すると、間違いが起こりません。おやじは、つい億劫になって、図だけで作業し失敗をしています。

以上で、設定は終わりですが、iptablesの設定も確認しておく必要があります。基本的には、サーバのセグメントが変わっていないので変更は不要のはずです。


Top Pageへ