Windows Server 複数NIC のデフォルトゲートウェイでハマった。
CentOS 5.2 をロードバランサとして、LVS + keepalived を使って
コンテンツサーバだけの負荷分散をする仕事で、Windows Server のデフォルトゲートウェイの設定でハマった。
- Web サーバ (Windows Server 2003)
- Load Balancer (Linux CentOS 5.2) eth0 グローバルIP, eth1 ローカルIP
- コンテンツサーバ A (Windows Server 2003)
- コンテンツサーバ B (Windows Server 2003)
LVS + keepalived の構築は、サーバ/インフラを支える技術や、
http://bougaidenpa.org/wanatabe/entry/lvs_on_centos_5 などを参照させて頂いた。ありがとうございました。
コンテンツサーバ A だけは FTP で接続したりするためグローバル IP を設定。
コンテンツサーバ A は、グローバル IP を設定してない時は問題なし。
グローバル IP を持たせたとき(複数NICの状態)の、デフォルトゲートウェイの設定でハマった。
コンテンツサーバ A のローカル IP のデフォルトゲートウェイは、NAT を使うため Load Balancer の eth1 を指定。
コンテンツサーバ A のグローバル IP のデフォルトゲートウェイは、そのセグメントのデフォルトゲートウェイを指定した。
これで http://www.atmarkit.co.jp/fwin2k/win2ktips/262gateway/gateway.html/ のように、
C:\>netstat -r Route Table =========================================================================== Interface List 0x1 ........................... MS TCP Loopback interface 0x2 ...00 50 da 05 4e 40 ...... 3Com EtherLink PCI 0x1000004 ...00 e0 18 00 1d de ...... Intel(R) PRO Adapter =========================================================================== =========================================================================== Active Routes: Network Destination Netmask Gateway Interface Metric 0.0.0.0 0.0.0.0 10.10.0.1 10.10.0.122 1 …1つ目のルート 0.0.0.0 0.0.0.0 192.168.0.13 192.168.0.59 1 …2つ目のルート
2つのルートが表示されるようになる。
実際、設定した時は問題ないのですが、しばらく経ってから、デフォルトゲートウェイからでれなくなるためアクセスができなくなりました。
参照:誤解しやすいWindowsのデフォルトゲートウェイ - kkamegawa's weblog
それでは、インターフェイスごとに異なるルーティングをしたい場合はどうすればよいのであろうか? このような場合は、管理者自身が静的なルートをrouteコマンドで追加するか(route addコマンドを使い、あて先ネットワークごとにゲートウェイを追加する)、RIPのような動的なルーティング情報を受け取るサービスを利用すればよい(Windows XPならば「RIPリスナ」サービスをインストールする)。
上記のようにあり、route add とかしていろいろ試してみたがうまくそれぞれの NIC 単位でデフォルトゲートウェイが設定できなかった。
結局、2つとものデフォルトゲートウェイの指定先を Load Balancer の eth1 に向けることでとりあえずはうまくいった。。うーん。