YANO's digital garage

Copyright ©YANO All rights reserved. https://www.bravotouring.com/~yano/

Last-modified: 2024-04-17 (水)


[一語一絵/IT系]

IPv6 by auひかり / 2015-06-09 (火)

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

IPv6アドレスが自動構成されてる!?
Nexus 5の「端末の状態」

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

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

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

IPv6ではこれらの経験を踏まえ、アドレス設定を自動化したり、衝突を検出する機能などが最初からIPv6プロトコルの一部として仕様が決定されている。またアドレス長が128bitと長くなって取り扱いが面倒になっていることもあり、DHCPサーバを使わないような小規模なネットワークであっても、なるべく手動設定を使わなくて済むような機能も用意されている。
という経緯を踏まえて、[External]RA (Router Advertisement; ルータ広告)から入手したプレフィックス情報に、MACアドレスをベースにしたインターフェイスIDを組み合わせて、端末自身が自動的にIPv6アドレスを作成している、という事だ。

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

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

・デフォルト・ゲートウェイ情報も自動的に取得し、設定する
・ただしDNSサーバなどの情報は設定できない
という特徴があるようなので、最終的に名前解決できるかどうかが、インターネットアクセスできるかどうかが分岐点になりそうだ。

そこで[External]@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アクセスだけでなく、[External]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