このページは乱ことNobuoNakakoが運用する「Etherealを使おう」の一部です。お時間があれば表紙も訪れてやってください

リンク等についてはこちら。間違いを見つけた時や「ここはこうした方が良い」等の意見は遠慮なくこちらまで。


The Ethereal manual (WINDOWS&UNIX)

IP Address Overlap
障害対応

ネットワークの障害問題でよくある初歩的なミスはIPの重複設定にあります。

グローバルIPの場合DHCP環境やプロバイダのVLAN設定等によりIPが重複する事はあまりないですがプライベートのネットワークではDHCPが導入されているのにもかかわらず固定でIPを設定したパソコンをネットワークに導入し、IPを重複させネットワークから怒られる人がたまにいます。

今回はこの様なIP重複の障害対応というよりかはIP重複の際に生じる下記の症状についてEtherealを使って解説していきたいと思います。

Windowsで「IPが競合していると言われる」
最初は繋がっていたのに数分経つと必ず切れる
FireWallも入っていないのに何故かパケットにフィルタが・・・・
しばらくしたら接続される

Windowsで「IPが競合していると言われる」

例えば下記のネットワーク図の様に2つのPCを同じIPで設定したとします。(図ではUNIXマシンですが気にしないでください)

Windowsの場合、この様なIPの重複設定の解決は下記の用なポップアップウィンドウが立ち上がり。IPの重複を知らせる為非常に早い場合が多いです。下

重複したIPを設定したPC側(WindwosXP){PCA}

重複したIPを設定されてしまったPC(WindowsXP){PCB}

さてWindowsは何故IPの重複に気付く事ができたのでしょうか?その理由をさぐる為にEtherealでパケットをキャプチャしてみました。

サンプルファイルはここでダウンロードできます。

1行目を見てください。これはPC[A]が192.168.0.4というIPを設定した直後に発信されたARPのブロードキャスト信号になります。

このパケットは、WindowsがIPを設定した直後やNICにケーブルを指して同期がとれた状態になった場合、ARPで設定したIPの192.168.0.4が他に使用されていないかブロードキャスト信号で検索をする行為を表したものです。

それに対しPC[B]は2行目のパケットで自分が192.168.0.4を持っている事を同じくARPにてPC[A]に対して発信します。

このやりとりを3回繰り返す事によってWindowsは重複したIPの設定を防いでいるのです。

最初は繋がっていたのに数分経つと必ず切れる

一見、Windowsのネットワークでは重複したIPの設定を行っても直にWindowsがIPの重複を教えてくれる為に発見が簡単の様に見えます。

それはWindowsでIPを設定した場合に出るパケットはARPのブロードキャスト信号による「他に設定したIPが使用されていないか?」という検索パケットがあるからだと説明しました。

実はこのパケットが発信されるタイミングに落とし穴があります。

下記のパケットを見て下さい。

ここでダウンロードできます。

このパケットは192.168.0.4を設定したPCAをスイッチングHUBに繋げた時に発信されたARPブロードキャスト信号です。この場合、先程と違って他に192.168.0.4のPCが無い状態になっています。

何故ならば下記の様な状態だからです。

当然、スイッチングHUB[Y]にはPC[A]のみしか接続されていない為、接続はなんら問題なく成功します。

それではこの後にスイッチYを下記の様にスイッチXに接続します。

この場合、普通に考えるとWindows上で同一のIPが使用されている旨のエラー表示が出そうですが・・・・実際は出ません。

何故なら自分が自分のIPの検索の為に出すARPのWho hasパケットはIPの設定をした際若しくはNICの同期が取れた際にしか出ないからです。つまりPC[A]はスイッチングHUB[Y]に接続した際に既にこのパケットを出している為、このスイッチングHUB[Y]をスイッチングHUB[X]に接続した際には他に自分と同じIPを使用している事に気付きません。

この場合、ルータが「Who has 192.168.0.4」というARPブロードキャストパケットを出さないかぎりはPC[A]もPC[B]も問題なく通信ができます。

これが元で「最初は繋がっていたのに数分経つと必ず切れる」という奇妙な症状が発生します。

FireWallも入っていないのに何故かパケットにフィルタが・・・・

上記の状態でルータから「Who has 192.168.0.4」というARPブロードキャストパケットが発信されたとします。そのまま再度PC[A]からルータに向けてPingパケットを発信してみましょう。

ここからダウンロードできます。

このキャプチャ結果はPC[A]で取得したものです。Pingの結果はTimed outになっています。これはルータからのWho hasパケットによりPC[A]が自分以外に同一IPを使用している事に気付きパケットを止めた為です。

しかし、奇妙なのはルータ側で下記の様にこのPingパケットをキャプチャした場合です。

ここからダウンロードできます。

どうです?非常に奇妙な事に気付きましたか?そうです、ルータはPingの返答であるEcho Replyをしっかりと出しているのです。

この場合、IPの重複に気付かなければ大体は「PC[A]はPingのパケットを禁止にしている」とか「PC[A]とルータの間にFireWallが存在する」等といった誤認につながります。

しばらくしたら接続される

PCやルータがWho hasを出すのは当然そのMACアドレスに対するIPが知らない場合です。Who hasで知った情報はARPテーブルという形で各PCやルータに記録されます。このテーブルには実は寿命があってある一定の時間が経つと記録から消去されます。

この時、従来接続できなかったPC[A]に接続の機会があたえられます。この機会を逃さずにPC[A]がルータに対してパケットを発信した場合、ルータでは正常にPC[A]=192.168.0.4というARPテーブルが記録され先程まで接続できなかったPC[A]が今度は問題なく接続ができる様になります。

逆に先程まで接続できたPC[B]は当然、接続ができなくなります。

このARPテーブルはWindowsの場合はコマンドプロンプトでUNIXの場合は端末で下記の様に入力する事で知る事ができます。

WINDOWSの場合

C:\>arp -a
Interface: 192.168.0.1 on Interface 0x1000005
Internet Address Physical Address Type
192.168.0.4 08-00-46-45-c1-42 dynamic

UNIXの場合

# arp -a
Net to Media Table: IPv4
Device IP Address Mask Flags Phys Addr
------ -------------------- --------------- ----- ---------------
hme0 192.168.0.4 255.255.255.255 08:00:46:45:c1:42


Copyright 2003 by Nobuo Nakako All right reserved.