2011/12/21(Wed)同一セグメントの対向IPv6ホストアドレスを知るライフハック
2011/12/21 2:05
ネットワークにマシンを足したけどそのアドレス、何がついたかいちいちメモるのが大変*1だというお悩みや、ルーティング先ルータのリンクローカルアドレスってなんだっけ?というお悩みを解消できまする。
決め手は全ノードマルチキャスト
さて、IPv6には全ノードマルチキャストアドレスという特別なアドレスがあります。"ff02::1"というアドレスがそれで、スコープはリンクローカルです。つまり、各ネットワーク毎に存在するアドレスですね。
基本的に、このアドレスはIPv4のブロードキャストアドレスの置き換えで、全てのノードが受信してくれる*2ので、ここにping6を投げるわけです。
先ほども書いたようにリンクローカルのアドレスなので、インタフェースの指定が必須です。
そして、応答時間が一番短いのが自分自身なので、DUP!印の付いているものを順番に確かめていけば良いでしょう。
Linux
Linuxの例。$ ping6 -I eth0 ff02::1 PING ff02::1(ff02::1) from fe80::212:34ff:fe56:789a eth0: 56 data bytes 64 bytes from fe80::212:34ff:fe56:789a: icmp_seq=0 ttl=64 time=0.031 ms 64 bytes from fe80::212:34ff:fe56:0bcd: icmp_seq=0 ttl=64 time=0.370 ms (DUP!) 64 bytes from fe80::212:34ff:fe56:efa1: icmp_seq=0 ttl=64 time=0.456 ms (DUP!) 64 bytes from fe80::212:34ff:fe90:abcd: icmp_seq=0 ttl=64 time=0.557 ms (DUP!) ... ^C
Solaris
Solaris(OpenIndiana)の例。ちょっとオプションが色々違いますが、基本的にはLinuxと同じスタイル。
- Iでインターバル付けないとうまく出てこない…?
$ ping -i nge0 -I 30 -s ff02::1 PING ff02::1: 56 data bytes 64 bytes from fe80::212:34ff:fe56:789a: icmp_seq=0. time=0.136 ms 64 bytes from fe80::212:34ff:fe56:0bcd: icmp_seq=0. time=1016.315 ms 64 bytes from fe80::212:34ff:fe56:efa1: icmp_seq=0. time=2027.804 ms 64 bytes from fe80::212:34ff:fe90:abcd: icmp_seq=0. time=2028.937 ms ... ^C
AlaxalA
AlaxalAのスイッチの例。アドレスの後に%とVLAN番号を書くパターンで同じ事が可能です。
ちなみにAlaxalA IPv6導入ガイドによれば、"VLAN"は大文字かつVLAN番号は4桁に0フィルしないといけないらしいのでご注意。
> ping ipv6 ff02::1%VLAN0025 PING6(56=40+8+8 bytes) fe80::212:34ff:fe56:0bcd%VLAN0025 --> ff02::1%VLAN0025 16 bytes from fe80::212:34ff:fe56:0bcd%VLAN0025, icmp_seq=0 hlim=64 time=1.949 ms 16 bytes from fe80::212:34ff:fe56:789a%VLAN0025, icmp_seq=0 hlim=64 time=4.989 ms(DUP!) 16 bytes from fe80::212:34ff:fe56:efa1%VLAN0025, icmp_seq=0 hlim=64 time=8.25 ms(DUP!) 16 bytes from fe80::212:34ff:fe90:abcd%VLAN0025, icmp_seq=0 hlim=64 time=11.951 ms(DUP!) ... ^C
AlliedTelesis
こちらも同様。VLANインタフェースの指定と同じようにそのまま書けばOKです。0フィルは不要でvlanは小文字。
> ping ff02::1%vlan25 Echo reply 1 from fe80::212:34ff:fe90:abcd time delay 0.003 ms Echo reply 1 from fe80::212:34ff:fe56:789a time delay 0.714 ms (DUP!) Echo reply 1 from fe80::212:34ff:fe56:0bcd time delay 0.769 ms (DUP!) ... ^C
Cisco
手元に実機がないのですが、こんな感じ。# ping ipv6 ff02::1 repeat 1 timeout 5 Output Interface: GigabitEthernet 0 ...
D-Link
割と同様。VLANとは別にIPv6インタフェースをcreate ipifで作る必要があるので、show ipifして存在していなければcreate ipif myifname VLAN25のように作る必要がある。
default vlanはSystemという名前みたい。*3
# ping6 ff02::1%System Command: ping6 FF02::1%System Reply to request 1 from FE80::212:34FF:FE56:EFA1, bytes=100 time<10 ms Reply to request 1 from FE80::212:34FF:FE90:ABCD, bytes=100 time=10 ms Reply to request 1 from FE80::212:34FF:FE56:0BCD, bytes=100 time=10 ms Reply to request 1 from FE80::212:34FF:FE56:789A, bytes=100 time=30 ms ... ^C
YAMAHA
"インタフェース"指定と、"% + スコープ識別子"(show ipv6 addressで確認)の両方が指定可能で、"lanN"の部分は、"pp N"や"tunnel N"のような指定も可能。後ろの"1"は送信回数。
% ping6 ff02::1 lan1 1 ...
Windows
ちなみにWindowsならば、netsh経由などでインタフェース番号を調べてから、アドレスの最後に%xxという形で指定できることはできるわけですが…
> netsh int ipv6 show ad
(略)
インターフェイス 12: ローカル エリア接続
アドレス種類 DAD 状態 有効期間 優先有効期間 アドレス
------------ ----------- ---------- ------------ ---------------------
Public 設定 23h59m51s 3h59m51s 2001:db8:1234:5678:9abc:9078:6756:abcd
Temporary 設定 23h59m51s 3h59m51s 2001:db8:1234:5678:212:34ff:fe56:efa1
その他 設定 infinite infinite fe80::9abc:9078:6756:abcd%12
(略)
> ping ff02::1%12
ff02::1%12 に ping を送信しています 32 バイトのデータ:
ff02::1%12 からの応答: 時間 =1ms
ff02::1%12 からの応答: 時間 =1ms
ff02::1%12 からの応答: 時間 =1ms
...
^C
うおお、だんまりか。この記事を書く過程で同じ現象を経験したらしい人のpostも見かけたけど、Windows 7辺りは返事もしてくれないらしいのでご注意。