それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

ipv6 のリンクローカルアドレスを使う

ipv6 で通信したい

ipv6 を有効にすると、いっぱいアドレスが割り振られて気持ち悪い。

たくさん割り振られるアドレスのなかでも、fe80 から始まるv6アドレスを リンクローカル・アドレスという。英語では link-local と表記されます。

v6リンクローカルアドレスとは。

v6のリンクローカルアドレスは、IPv4 169.254.*.* と同様のアドレスです。

ホスト間で通信を1対1で行う事ができます。 同一リンク内、つまりスイッチングハブを通して通信できる範囲(これをリンクという)で有効です。

ハブで接続されたホスト間で通信が可能になるのが、リンクローカルの役割です。

言い換えれば、リンクローカルアドレスは、経路を持ちえません。 経路表を使った伝送はできません。

v6 リンクローカルアドレス間で通信を行う。

ホストAとホストBのリンクローカルアドレスを確認します。

リンクローカルアドレスとは fe80::/ なアドレスです。

ホストAとホストBはスイッチング・ハブで接続されています。

ホストA

ip -6 addr show br0
4: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    inet6 fe80::f86c:d5ff:fe1e:e490/64 scope link
       valid_lft forever preferred_lft forever

ホストB

ip -6 addr show br-lan0
3: br-lan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    inet6 fe80::e080:bcff:fe7a:ddac/64 scope link
       valid_lft forever preferred_lft forever

ホストA/ホストBのv6アドレスの注目ポイント

ここでの注目ポイントは、NICのデバイス名と、リンクローカルのv6アドレスです。

ホストのNICバイス名とアドレスをまとめるたものが、次表になります。

インタフェース リンクローカル・アドレス
ホストA br0 fe80::f86c:d5ff:fe1e:e490
ホストB br-lan0 fe80::e080:bcff:fe7a:ddac

PINGする。ホストAからホストBへ

リンクローカルは経路がないため、どのインタフェースから送信するか明示する必要がある。

ping - I br0 fe80::e080:bcff:fe7a:ddac 

インタフェースをV6アドレスに含める。

ping コマンドはインタフェース指定に対応しているから良いが、非対応のコマンドだと困ることになる。 そのため、ipv6 のリンクローカルでは、デバイスを明示する仕様が盛り込まれている。これを利用すると、ipv6 のアドレスに送信元インタフェースを含めることができる。

リンクローカルのアドレスに、 fe80::1%eth0 のように、デバイス名をつけて送信元となるデバイス名を明示する。指定したデバイス名が出口となりパケットが送出される。

ping  fe80::e080:bcff:fe7a:ddac%br0

これでリンクローカルを使った通信ができる。

まとめ

  • IPv6にはリンクローカルがある。
  • リンクローカルは fe80 から始まる。
  • リンクローカルは経路を持たない
  • 通信するインタフェースを fe80::1%eth0 のように指定する。