僕の家では、minimum構成から構築したCUI onlyのCentOS 6を雑用サーバとして運用しています。
ある日…というか昨日ですがこんなことがありました。
[root@Server ~]# ssh ipv6.address.jp
ssh: Could not resolve hostname ipv6.address.jp: Name or service not known
アドレスとホスト名は仮名です。
このipv6.address.jpというDNS名はipv6アドレスしか紐付いていない、すなわちAAAAレコードのみしか存在しないDNS名です。
まあ要するにDNSの名前解決が出来なかったと。
でもこの人、
[root@Server ~]# ifconfig
eth0 Link encap:Ethernet HWaddr 80:EE:73:xx:xx:xx
inet addr:192.168.1.x Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: 2408:210:d001:ec00:xxxx:xxxx:xxxx:xxxx/64 Scope:Global
inet6 addr: fe80::xxxx:xxxx:xxxx:xxxx/64 Scope:Link
UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 Metric:1
RX packets:88083 errors:0 dropped:0 overruns:0 frame:0
TX packets:43289 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:91667845 (87.4 MiB) TX bytes:3204763 (3.0 MiB)
Interrupt:29
からも読める様に、ipv6アドレス自体は振られていて、なおかつ
C:\>ping 2408:210:d001:ec00:xxxx:xxxx:xxxx:xxxx
2408:210:d001:ec00:xxxx:xxxx:xxxx:xxxx に ping を送信しています 32 バイトのデー
タ:
2408:210:d001:ec00:xxxx:xxxx:xxxx:xxxx からの応答: 時間 =1ms
2408:210:d001:ec00:xxxx:xxxx:xxxx:xxxx からの応答: 時間 <1ms
2408:210:d001:ec00:xxxx:xxxx:xxxx:xxxx からの応答: 時間 <1ms
2408:210:d001:ec00:xxxx:xxxx:xxxx:xxxx からの応答: 時間 <1ms
2408:210:d001:ec00:xxxx:xxxx:xxxx:xxxx の ping 統計:
パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
最小 = 0ms、最大 = 1ms、平均 = 0ms
という様に自分に向けてやってくるipv6のパケットに対しては正しく応答することが出来、そして、
[root@Server ~]# ping6 2408:210:87c0:5e00:yyyy:yyyy:yyyy:yyyy
PING 2408:210:87c0:5e00:yyyy:yyyy:yyyy:yyyy(2408:210:87c0:5e00:yyyy:yyyy:yyyy:yyyy) 56 data bytes
64 bytes from 2408:210:87c0:5e00:yyyy:yyyy:yyyy:yyyy: icmp_seq=1 ttl=58 time=7.02 ms
64 bytes from 2408:210:87c0:5e00:yyyy:yyyy:yyyy:yyyy: icmp_seq=2 ttl=58 time=7.23 ms
64 bytes from 2408:210:87c0:5e00:yyyy:yyyy:yyyy:yyyy: icmp_seq=3 ttl=58 time=7.10 ms
64 bytes from 2408:210:87c0:5e00:yyyy:yyyy:yyyy:yyyy: icmp_seq=4 ttl=58 time=6.99 ms
この様に、ping6レベルでは送信もできる。
けど、DNSでAAAAレコードが引けない。
yumからbind-utilsパッケージをインストールして、nslookupを試してみようとしたところ…
[root@Server ~]# nslookup
> google.co.jp
Server: 192.168.1.1
Address: 192.168.1.1#53
Non-authoritative answer:
Name: google.co.jp
Address: 173.194.117.159
Name: google.co.jp
Address: 173.194.117.143
Name: google.co.jp
Address: 173.194.117.151
Name: google.co.jp
Address: 173.194.117.152
>
というわけで、デフォルトのDNSサーバがipv4アドレス…というか家のルータになっていたわけです。
家のルータはipv6のパススルー機能しか持たないのでipv6のDNS解決は出来ない、ので接続できなかったと。
DNSサーバのアドレスについてはCentOS 6では/etc/resolv.confにあるそうなので参照すると、
; generated by /sbin/dhclient-script
nameserver 192.168.1.1
と、我が家のルータのipv4アドレスしか書かれていませんでした。
これに
; generated by /sbin/dhclient-script
nameserver 192.168.1.1
nameserver 2404:1a8:7f01:b::3
と僕のwindows7に設定されているv6のDNSサーバのアドレスを加えてみたのですが状況は変わらず。
ふとしたきっかけで
; generated by /sbin/dhclient-script
nameserver 2404:1a8:7f01:b::3
nameserver 192.168.1.1
逆にしてみた。動いた。 2404:1a8:7f01:b::3
というのはぶっちゃけaoi.flets-east.jpのDNSサーバなわけですけれども、この人、aoi.flets-east.jpの範囲外のDNS問い合わせに関しては即座にrefuseを返してくれるので少なくともLinuxにおいては問題無さそう。
なお、他に問題なくIPv6でつながるCentOSもいたのでその人のresolv.confも見てみたら、
# Generated by NetworkManager
search aoi.flets-east.jp
nameserver 192.168.1.1
って書いてありました。
こちらの人はDesktop構成でインストールしたGUI付きの人なのですが、まあどうやらNetworkManagerはipv6に対応してて/sbin/dhclient-scriptはipv6に対応できてなさそう、ということなのですかね?
でもdhclient-scriptをipv6に対応できるように書き換えられるほどの魔力はまだ僕にはないのであった。無念。
雑用サーバくんのresolv.confにsearch aoi.flets-east.jp
と書いてみても上手くいかず、それならば上手く動くほうではaoi.flets-east.jpについてどこか別の設定ファイルに書いてあるのかと思い/etc/でfind . --print | grep aoi.flets-east.jp
としてみても特に何も引っかからず…
動かすだけなら既に解決してるので問題ないといえば問題ないのですが、なんともすっきりしないのでこのあたりの原因をご存じor推測できそうな方、いらっしゃいませんでしょうかね…