2015年6月12日

IPv6で、fe80にping

IPv6で、fe80::/10のアドレス(リンクローカル・ユニキャスト・アドレス)にpingする場合。

Linuxの場合:
-I (interface)を付けて実行します。
ping6 -I eth0 fe80:(略)
-I オプションを指定しない場合は、"connect: Invalid argument"などが発生します。

----
注:ローカルからのPINGに応答するためには、PINGのRequest/Replyの他に、近隣探索(Neighbor Discovery)も有効にしておく必要があります。

PINGを受ける側で(最低限)必要なのは
IN: 128 (PING 要求)
OUT: 129 (PING 応答)

IN: 135 (近隣要請 (Neighbor solicitation))
OUT: 136 (近隣広告 (Neighbor advertisement))
です。
(135/136は、MACアドレスの要求/送信などに利用されます。)

参考:IPv6 Neighbor Discovery

----
グローバルアドレスへのpingの場合は、-I オプションを付けなくても大丈夫です。
例:(注:IPv6専用のアドレスです)
ping6 ipv6.google.com
※グローバルアドレスと通信する場合は、
(インターネットに直結している場合は) ifconfigで、eth0などに
inet6 (略) <global>のアドレスが表示されている必要があります。

Windowsの場合は、「ローカルエリア接続の状態」で、
「IPv6 接続」が「インターネット」と表示されている必要があります。

----
Windowsの場合:(Windows7の場合)

ping -6 fe80:(略)
を実行します。

----
hostsを使う場合は、インターフェイスID (10や11などの数字)も必要です。
hostsの例:
fe80:(略)%10 hostname
(アドレス)%(インターフェイスID) (ホスト名)

ping -6 hostname
※hostsで%(インターフェイスID)を付けていない場合は、
ping 要求ではホスト hostname が見つかりませんでした。ホスト名を確認してもう一度実行してください。
などが表示されます。

----
インターフェイスIDの探し方。

使用するインターフェイスを確認します。
netsh interface ipv6 show interface
名前欄が「ローカル エリア接続」などになっているインターフェイスの、Idx欄が、インターフェイスIDです。

代替コマンド
route -6 print
インターフェィス一覧や、ルートテーブルから、インターフェイスIDを探します。


----
補足:
ICMPv4とv6では、Type番号が異なります。

Type番号(一部)

v4の場合:
3: 宛先到達不能
8: エコー要求
0: エコー応答

v6の場合:
0-127:エラー
128-255:メッセージ

1: 宛先到達不能
128: エコー要求
129: エコー応答

参考:
ICMPv6 パケット タイプとコード

0 件のコメント:

コメントを投稿