あるエンジニアの独り言
VMWareでホストOSとゲストOS間の通信ができない件
最終更新:
paladin
-
view
2010/01/17
VMWareにUbuntuLinuxをインストールしてちまちま遊んでいる。
そんな中、ひとつ問題に遭遇した。
そんな中、ひとつ問題に遭遇した。
ホストOS(WindowsXP SP3)とゲストOS(UbuntuLinux)の間で
TCP通信がうまくいかないのだ。
TCP通信がうまくいかないのだ。
気になったので、色々調べてみた。
環境は以下のとおり。
A:ホストOS WindowsXP 192.168.99.100
B:ゲストOS UbuntuLinux 192.168.99.101 Apache2インストール済
C:外部OS WindowsVista 192.168.99.102
※IPアドレスは仮。
B:ゲストOS UbuntuLinux 192.168.99.101 Apache2インストール済
C:外部OS WindowsVista 192.168.99.102
※IPアドレスは仮。
状況としては
A → B にPingは届く
A → B にブラウザでアクセスはNG
C → B にPingは届く
C → B にブラウザアクセスでページ表示
A → B にブラウザでアクセスはNG
C → B にPingは届く
C → B にブラウザアクセスでページ表示
Cからの通信が成功している以上、Bの問題では無いと思われる。
また、AからBにPingが届いており、http通信ができていないので
TCPレイヤでの問題であることが推量できる。
また、AからBにPingが届いており、http通信ができていないので
TCPレイヤでの問題であることが推量できる。
不思議だったので、WireSharkでパケットキャプチャしてみたところ
A → B [SYN]
A ← B [SYN,ACK]
A → B [ACK]
A ← B [SYN,ACK]
A ← B [SYN,ACK]
A ← B [SYN,ACK]
A ← B [SYN,ACK]
A → B [ACK]
A ← B [SYN,ACK]
A ← B [SYN,ACK]
A ← B [SYN,ACK]
ざっくり、上記のような通信状態になっていた。
つまり、3Wayハンドシェイクがうまくいっていない。
確定的な裏までは取り方が思いつかないが、どうも下記のような状態に見える。
1.AからBへの[SYN]は"届いている"
2.BからAへの[SYN,ACK]は"送信されている"
3.AからBへの[ACK]は"送信されている"
4.BからAへの[SYN,ACK]が"再送されている"
上記4から推察するに、BがAからの[ACK]がなんらかの要因で受信できておらず、
[SYN,ACK]の再送を繰り返しているように見える。
つまり、3Wayハンドシェイクがうまくいっていない。
確定的な裏までは取り方が思いつかないが、どうも下記のような状態に見える。
1.AからBへの[SYN]は"届いている"
2.BからAへの[SYN,ACK]は"送信されている"
3.AからBへの[ACK]は"送信されている"
4.BからAへの[SYN,ACK]が"再送されている"
上記4から推察するに、BがAからの[ACK]がなんらかの要因で受信できておらず、
[SYN,ACK]の再送を繰り返しているように見える。
ここで手詰まり。
1から2への流れがあるから、AからBへのTCP通信がまるっきりできてないわけでは無い。
(2は1というトリガーが無いと送信されないはずなので)
1から2への流れがあるから、AからBへのTCP通信がまるっきりできてないわけでは無い。
(2は1というトリガーが無いと送信されないはずなので)
とまぁ、ここまでの調査結果を踏まえてネットで調べてみたところ
同様の事例はあるらしい。
NAT接続で回避しているケースもあったが、一件ブリッジ接続での
解決方法を発見。
同様の事例はあるらしい。
NAT接続で回避しているケースもあったが、一件ブリッジ接続での
解決方法を発見。
いい線まで調査できていたけど、詰めが甘かった。
これで万事解決。
次のステップに進めそうだ。
これで万事解決。
次のステップに進めそうだ。
しかし、文字だらけでわかりづらい。
気が向いたら、キャプチャ画像とかログのせてみるかも。
気が向いたら、キャプチャ画像とかログのせてみるかも。
=============== <<<ここから宣伝(自動追加)>>> ===============