スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Windows7でIPv6のPingでハマったお話

IPv6のPingでハマった。ゾーンIDとは何ぞや?

※2014/7/7 誤記訂正

IPv6リンクローカル環境で単純なPing疎通確認を行おうとしてハマったのでメモしておく。

先に結論だけ言うと
Pingコマンドで指定するゾーンIDは相手のゾーンIDじゃないよ!



●テスト環境
 使用環境 : Windows7、IPv6
 実施コマンド : リンクローカルアドレスを利用したPing(icmp)

●前提のお話
 WindowsでIPv6のアドレスを調べるためには、コマンドプロンプトで"ipconfig"コマンドを実施する。
 IPv6がEnableになっていれば、例えば

  「 リンクローカル IPv6 アドレス. . . . : fe80::4c79:a7b6:c81:aaaa%10 」(適当なアドレスです)

 のようなIPv6のアドレスが表示される。
 ちなみにリンクローカルアドレスが何ぞやに関しては調べて。
 簡単に言うとIPv4プライベートIPみたいなもので、これだけではセグメントは越えられない。


 Windows7では、IPv4,IPv6いずれのicmpも今まで通りの"ping"コマンドで可能。


で、このPingでハマった・・・。



●テスト
 PC1(Ping送信元)、PC2(Ping送信先)という2台で通信を試みた。

 構成概要↓
Pingテスト構成


 それぞれのPCのipconfigの結果(IPv6アドレス部分のみ)
 ローカールエリア接続は有線NICで、ワイヤレスネットワーク接続は無線NICです。

 PC1
  イーサネット アダプター ローカル エリア接続:
    リンクローカル IPv6 アドレス. . . . : fe80::6930:3aee:55ef:aaaa%10
 
  Wireless LAN adapter ワイヤレス ネットワーク接続:
    リンクローカル IPv6 アドレス. . . . : fe80::6930:3aee:55ef:bbbb%11


 PC2
  イーサネット アダプター ローカル エリア接続:
    リンクローカル IPv6 アドレス. . . . : fe80::6930:3aee:55ef:cccc%10 




で、PC1で有線接続状態からPC2のIPv6アドレスにPingを実施。
ping fe80::6930:3aee:55ef:cccc%10
   → OK (Ping応答が返ってくる)

つぎに、PC1を無線接続に変更して同様にPC2のIPv6アドレスにPing実施。
ping fe80::6930:3aee:55ef:cccc%10
   → NG (Ping応答が返ってこない。具体的には「宛先ホストに到達できません」となり失敗。)

結果としてこれは認識が間違えていた。

結論言うと、Pingで指定するゾーンIDは相手のアドレスコピペしちゃだめだよ!





ipconfigで表示される

"fe80::6930:3aee:55ef:aaaa%10"

の"fe80::6930:3aee:55ef:aaaa"部位はもちろん当該NICに割りあたっているIPv6アドレスを表わすが
その後ろの"%10"が何を意味するか。
これはゾーンID(zone_ID)というものらしい。


ローカル使用 IPv6 アドレスのゾーン ID

 ゾーンIDを利用することにより、リンクやサイトを見分けるということが目的らしい。
 ローカル使用アドレス(リンクローカル、サイトローカル:廃止)に関連付けられたゾーンは

   Address%zone_ID

 で表されるとのことらしい。

 ここが重要で、つまりグローバルアドレスの場合はこれはつかない(はず。試せてません。)
 このゾーンIDはそれぞれの端末が一意に持ち、同じリンクに接続されているからと言ってすべての端末が
 同じになるわけではないらしい。PC1のゾーンIDが1だとしても、PC2のゾーンIDが1とは限らない。



で、何がいけないかというとこのゾーンIDは自分(送信元ホスト)が認識するゾーンID(インタフェース)だということ。
正確に言うと、Pingで指定するゾーンIDは自分の出力インタフェース(ゾーンID)を指定するということ!


簡単なpingコマンドは、”ping 宛先IP”というコマンドになるが、上でやったpingコマンドは宛先ホストのゾーンIDを指定していた。
ping fe80::6930:3aee:55ef:cccc%10

この%10は、たまたま自分の有線インタフェースで表示されるゾーン"10"と一致していたため有線では応答がありゾーンIDが"11"となっていた無線インタフェースでは応答されなかった。おそらく、送信I/Fが異なっていたからそもそも出力されていなかったはず。


次のようにするとうまくいった。
 
 有線接続状態
  ping fe80::6930:3aee:55ef:cccc%10
    → OK

 無線接続状態
   ping fe80::6930:3aee:55ef:cccc%11
    → OK


偶然にも有線の時のゾーンIDが一致していたので混乱した。



●まとめ?

リンクローカルアドレスは「fe80」で始まるため、これがPCに複数あるとどのI/Fから送信していいのか判断できない。そのためにゾーンIDを指定する必要がある。(と解釈した。間違ってたらごめんなさい)

ちなみに、リンクしているI/Fが一つの時はゾーンIDを指定しなくてもうまくいった。
このことは、複数のI/Fをリンクさせて複数のリンクローカルアドレス(fe80)を持たせた状態でのPingは失敗したことからも上の推測は正しいと思う。


なお、Linux(Ubuntu)、MacOSXでのIPv6Pingコマンドは以下のようになります。
 
 ping6 -i インタフェース名 宛先アドレス
  (例: ping6 -i eth0 fe80::6930:3aee:55ef:cccc)

このインタフェース名がWindowsでいうゾーンIDに相当する。こっちのほうがいかにも送信I/Fを指定しているようで感覚的にわかりやすい気がする。

Windwosの場合、ipconfigでゾーンIDが表示され、PingでゾーンIDを指定するのが混乱させる。
(こんなことでハマるのは、自分だけか・・・)



間違いあったらご指摘ください。
スポンサーサイト

コメントの投稿

非公開コメント

勉強になりました

勉強になりました
プロフィール

Author:Opecha-DaDa
ニッチな技術メモ的なブログになりつつありますが、だからこそあなたのお役に立てる内容があれば幸いです。

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。