VMWare ServerのARP応答がおかしい

先日勉強用に組んでいる自宅の仮想環境(VMWare Server 1.0.7)上のゲストのネットワーク動作がおかしくなっていて、直すのにハマってしまった。宅内システムの構成は以下の通り。ルータとLB、Web/Apサーバ、DBサーバがそれぞれ冗長化されている(rt3、lb3はテスト用。通常はNW機器は2台構成として使っている)。問題のあった箇所としては、以下の図のルータ、LBの内側ネットワークインターフェース部分の動作。


どうおかしいかと言うと、ルータの内側インターフェースとLBの内側インターフェースにはそれぞれ*.*.*.254のIPアドレスを振ってあるのだが、当該ノードの下にぶら下がっているノードからは、当該ノードのプライベートIP宛にはアクセスできても、仮想IPを振っている*.*.*.254のIPアドレス宛に通信できない状態。当該ノードの外側からのアクセスではうまく通信できるケースもあり困り果てたものの、どうやらARPの動きが変なことに気づいてパケットをとってみた。下から2行目は*.*.*.254を振っているノードからの正しいARP応答だが、最下行のARP応答は身に覚えがないもの。


# tcpdump -n -e arp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
16:51:48.017381 00:0c:29:d8:02:f9 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: arp who-has 10.0.10.254 tell 10.0.10.251
16:51:48.017453 00:0c:29:77:9e:5f > 00:0c:29:d8:02:f9, ethertype ARP (0x0806), length 42: arp reply 10.0.10.254 is-at 00:0c:29:77:9e:5f
16:51:48.021394 00:50:56:ff:b1:7c > 00:0c:29:d8:02:f9, ethertype ARP (0x0806), length 60: arp reply 10.0.10.254 is-at 00:50:56:ff:b1:7c

これの原因がしばらくわからず頑張ってみたのだが、実はかなりしょうもない原因だったことが判明。VMWare ServerのVMNetの設定で、問題のあった仮想ネットワーク上でDHCPが動作していたことが原因だった。VMNetでDHCPをオンにすると、VMWare内部のDHCP機能が、*.*.*.254のIPアドレスを使用した仮想サーバとして動作するようだ。

なので、わかってしまえば解決策は簡単。宅内システムのVMNetはstaticなIPアドレスのみを使用するので、当該VMNetのDHCP機能をオフにするだけ。結果から言うと「.254」というIPアドレス特有の問題だったわけだが、最初はVIFの設定に問題があるのかなぁだとか、結構悩んでしまった。解決してしまえばあっけないが、今回のはちょっと手ごわかった・・・orz なんで今までオフにしてたVMNetのDHCPがオンになったのかは不明だが、解決策がわかったのでひとまずめでたし。