Windows Server 複数NIC のデフォルトゲートウェイでハマった。

CentOS 5.2 をロードバランサとして、LVS + keepalived を使って
コンテンツサーバだけの負荷分散をする仕事で、Windows Server のデフォルトゲートウェイの設定でハマった。


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 に向けることでとりあえずはうまくいった。。うーん。