IPv6 by auひかり
昨日開通した、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:~$


