IPv6 by auひかり

昨日開通した、So-net 光 (auひかり)

IPv6アドレスが自動構成されてる!?

Nexus 5の「端末の状態」

ホームゲートウェイ BL900HWのDHCPv6を止め、GT110bでもDHCPv6を有効にしようとしていたのだが、X200X201stsubameなどWindowsマシンは何もしなくてもIPv6アクセスが確認できた。

逆にNexus 5iPhone 4siPad miniなどはIPv4アクセスすらうまくいかない有様だったのでNexus 5の「端末の状態」調べてみたところ、自分のIPv6アドレスは認識している事がわかった。

そもそもDHCPv6は動かしていないので、IPv6アクセス可能となったWindowsマシンの方が不思議なのだが、そういえば@ITの記事にあるように

IPv6ではこれらの経験を踏まえ、アドレス設定を自動化したり、衝突を検出する機能などが最初からIPv6プロトコルの一部として仕様が決定されている。またアドレス長が128bitと長くなって取り扱いが面倒になっていることもあり、DHCPサーバを使わないような小規模なネットワークであっても、なるべく手動設定を使わなくて済むような機能も用意されている。

という経緯を踏まえて、RA (Router Advertisement; ルータ広告)から入手したプレフィックス情報に、MACアドレスをベースにしたインターフェイスIDを組み合わせて、端末自身が自動的にIPv6アドレスを作成している、という事だ。

そういえばそうだったよ!

さらに@ITの記事を読み進めていったところ「ステートレス設定」には

・デフォルト・ゲートウェイ情報も自動的に取得し、設定する ・ただしDNSサーバなどの情報は設定できない

という特徴があるようなので、最終的に名前解決できるかどうかが、インターネットアクセスできるかどうかが分岐点になりそうだ。

そこで@ITの記事:第7回 IPv6とDNSサーバを読むと

最後の「クエリ/応答はIPv4とIPv6の両方に対応」とは、DNSサーバに対するクエリや応答を、IPv4とIPv6のどちらを使ってもアクセスできるようにする、という意味である。これは必須ではないが、一般的にはIPv4とIPv6のどちらのプロトコルを使ってDNSサーバにアクセスしても構わないようになっている。 IPv4とIPv6の両方のDNSサーバが利用できる場合、実際のDNSのクライアント(「DNSリゾルバ」という)が、IPv4とIPv6のどちらを優先して利用するか(どちらへ先に接続を試みるか)は実装依存である(RFC3484にガイドラインがある)。当初は、まずIPv6を試行し、失敗したらIPv4で再試行するというものが多かったが、最近では両方同時に接続を試行し、先に応答があった方を利用する、といった実装も少なくない。

という事なので、どうやらWindows系のOSはIPv4なGT110bのDNS接続でもIPv6の名前解決(AAAAレコードの取得)を行っている為、IPv6アクセスができるようだ。

というところで、DNSキャッシュ(unbound)サーバでもあるGT110bのIPv6設定がしっかりやる必要がありそうだ。ていうか、まずは真っ先にやるべき/etc/network/interfacesでインタフェースの設定を行う。「ステートレス設定」では「MACアドレスをベースにしたインターフェイスID」であるのに対して、「IPv4アドレスをベースにしたインターフェイスID」である事に注目。

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto eth0
iface eth0 inet static
        address 192.168.199.1
        netmask 255.255.255.0
        gateway 192.168.199.254
        dns-nameservers 192.168.199.254
# The IPv6 based entries for the primary network interface
iface eth0 inet6 static
        address 240f:ca:xxxx:yyyy:192:168:199:1
        netmask 64
        gateway fe80::1
        accept_ra 0
        autoconf 0
        privext 0
        dns-nameservers 240f:ca::1

インタフェースに反映。

yano@GT110b:~$ sudo ifdown eth0 && sudo ifup eth0
Waiting for DAD... Done
yano@GT110b:~$

お次はDNS(unbound)だが、実はデフォルトでIPv6のクエリーに応答するようになっているものの、localhost以外refuseになっている為、IPv6のプレフィックスを許可する必要があるので、/etc/unbound/unbound.conf.d/custom.confにaccess-control:を1行追加。

server:
interface: 0.0.0.0
access-control: 127.0.0.0/8 allow
access-control: 192.168.199.0/24 allow
access-control: 240f:ca:xxxx:yyyy::/64 allow
#local-zone: "bravotouring.com" static
#local-data: "bravotouring.com IN A 192.168.199.1"
#local-data: "www.bravotouring.com IN A 192.168.199.1"
~~

とやって、

yano@GT110b:~$ service unbound reload
 * Reloading recursive DNS server unbound          [ OK ]
yano@GT110b:~$

えいっ…と、やったところでNexus 5iPhone 4siPad miniなどが復活した。

IPv4アクセスだけでなく、The KAME projectの「Dancing kame」も確認できたので、DHCPv6無しでも大丈夫らしい。へぇ…

参照

@IT http://www.atmarkit.co.jp/

JPNIC https://www.nic.ad.jp/ja/

日本Unboundユーザー会 http://unbound.jp/

Wikipedia http://ja.wikipedia.org/wiki/