昨日開通した、So-net 光 (auひかり)。
Nexus 5の「端末の状態」 |
ホームゲートウェイ BL900HWのDHCPv6を止め、GT110bでもDHCPv6を有効にしようとしていたのだが、X200、X201s、tsubameなどWindowsマシンは何もしなくてもIPv6アクセスが確認できた。
逆にNexus 5、iPhone 4s、iPad 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サーバにアクセスしても構わないようになっている。という事なので、どうやらWindows系のOSはIPv4なGT110bのDNS接続でもIPv6の名前解決(AAAAレコードの取得)を行っている為、IPv6アクセスができるようだ。
IPv4とIPv6の両方のDNSサーバが利用できる場合、実際のDNSのクライアント(「DNSリゾルバ」という)が、IPv4とIPv6のどちらを優先して利用するか(どちらへ先に接続を試みるか)は実装依存である(RFC3484にガイドラインがある)。当初は、まずIPv6を試行し、失敗したらIPv4で再試行するというものが多かったが、最近では両方同時に接続を試行し、先に応答があった方を利用する、といった実装も少なくない。
というところで、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お次はDNS(unbound)だが、実はデフォルトでIPv6のクエリーに応答するようになっているものの、localhost以外refuseになっている為、IPv6のプレフィックスを許可する必要があるので、/etc/unbound/unbound.conf.d/custom.confにaccess-control:を1行追加。
Waiting for DAD... Done
yano@GT110b:~$
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えいっ…と、やったところでNexus 5、iPhone 4s、iPad miniなどが復活した。
* Reloading recursive DNS server unbound [ OK ]
yano@GT110b:~$
IPv4アクセスだけでなく、The KAME projectの「Dancing kame」も確認できたので、DHCPv6無しでも大丈夫らしい。へぇ…
【参照】
●@IT http://www.atmarkit.co.jp/
┣これから始めるIPv6
┣いまさら聞けない、IPv6アドレス体系の基礎 2011年7月19日
┣どう割り振る? IPv6でのアドレス設計 2011年9月6日
┣3つの手順で実現、サーバOSのIPv6対応 2011年11月28日
┣主要なサーバアプリの設定例 2011年12月19日
┣簡単、便利、高信頼! IPv6ネットワークの冗長化 2012年4月2日
┣Windows管理者のためのIPv6入門
┣第1回 IPv6の概要 2011年9月22日
┣第2回 IPv6パケットの構造を知る 2012年1月5日
┣第3回 L2アドレスを解決する近隣探索プロトコル 2012年5月24日
┣第4回 IPv6アドレスを割り当てる 2012年7月5日
┣第5回 IPv6アドレスをDHCPで割り当てる 2013年3月14日
┣第6回 LLMNRを使ったローカル・セグメント上での名前解決 2013年5月23日
┣第7回 IPv6とDNSサーバ 2013年7月4日
┣第8回 IPv6のルーティング 2013年8月29日
┣最終回 IPv4とIPv6の相互運用 2014年3月13日
┗ぶいろく? ぶいしっくす?――初心者でも分かる「IPv6」の基礎 2015年1月29日
●JPNIC https://www.nic.ad.jp/ja/
┣IPv6関連情報 - JPNIC
┣インターネット用語1分解説
┗RA (Router Advertisement; ルータ広告)とは
●日本Unboundユーザー会 http://unbound.jp/
┗unbound.conf(5)
●Wikipedia http://ja.wikipedia.org/wiki/
┣IPv6
┗Unbound