BIND DNSの導入検証

DNSサーバの標準である BINDを64bit+IPv6環境で検証します

BINDは DNSサーバで UNIX系システムでは事実上の標準と言えるほど有名です
ISCがソースの保守を行っていて 年に1回は新機能リリースをやっているようです

今回 BIND9 をインストールして 64bit環境 IPv6環境での動作検証を行います

検証環境
CPU AMD PhenomII X4 905e (2.5GHz 4コア)
メモリ 16GB
OS Gentoo-1.12.14ベース Linux-3.0 UTF-8
コンパイラ gcc-4.5.2
Cライブラリ glibc-2.13
ODBC libiodbc-3.52.7
BerkeleyDB 5.1.25.NC
PostgreSQL 9.1
MySQL 5.5.15
Oracle 11g Express Edition Release2
LDAP OpenLDAP-2.4.23
BIND 9.8.1

ここで なぜ(自宅に)DNSサーバが必要で DNSのIPv6化が何を指しているのかを説明します
まず IPv6ネットワークの状況ですが
フレッツ IPv6 DNS
フレッツルータから下の部分は 自宅LANの状況です
今回 IPv6対応の DNSサーバを構築するのが目的です

フレッツ網は IPv6も可能ですが インターネット上の他のIPv6網と分断されています (2011年状況)
従って インターネット上の他のIPv6ネットワークへは直接通信が届きません

自宅内に複数の 端末/サーバ/ルータ があってホスト名をつけたい場合
今回のように 「自宅にDNSサーバを立てる必要がある」のです

IPv6通信するのは 赤の矢印の部分です 通信は IPv6ですが
IPv4ホスト名(Aレコード)/IPv6ホスト名(AAAAレコード) どちらも解決できます

インターネットの IPv6通信は分断された状態ですが
フレッツ網の DNSサーバはどうやって 他IPv6網の名前情報にアクセスしているのでしょうか?
フレッツ IPv4 DNS
上図は IPv4通信の状況です
フレッツのDNSサーバは IPv4を使って IPv6/IPv4名前解決をしていると思われます
(フレッツ網内の仕組みは詳しくないので ひょっとしたら違うかも)

いずれにしても 自宅の IPv6/IPv4 DNS化は下記前提で行います

  • フレッツ網内の DNSサーバが IPv6(AAAA)/IPv4(A) どちらも解決可能
  • フレッツ網内の DNSサーバへ IPv6通信で問い合わせる (IPv4通信でも可能だが)
  • 自宅DNSサーバは IPv6(AAAA)/IPv4(A) 解決可能 かつ IPv6通信/IPv4通信 可能

インストール

$ tar -xzf bind-9.8.1.tar.gz
$ cd bind-9.8.1
$ ./configure --prefix=/ram --localstatedir=/ram/var --with-openssl --enable-threads --enable-atomic --with-randomdev=/dev/urandom --enable-getifaddrs --with-dlz-postgres=yes --with-dlz-mysql=/usr/mysql --with-dlz-bdb=yes --with-dlz-filesystem=yes --with-dlz-ldap=yes --with-dlz-odbc=yes --with-dlz-stub=yes
checking build system type... x86_64-unknown-linux-gnu
checking host system type... x86_64-unknown-linux-gnu
checking whether make sets $(MAKE)... yes
checking for gcc... gcc

〜

make[1]: Leaving directory `/ram/bind-9.8.1/doc'
rm -f *.o *.o *.lo *.la core *.core *-symtbl.c *tmp0 *tmp1 *tmp2
rm -rf .depend .libs
rm -f FAQ.tmp
$ make
making all in /home/admin/bind-9.8.1/make
make[1]: ディレクトリ `/home/admin/bind-9.8.1/make&apos に入ります
make[1]: ディレクトリ `/home/admin/bind-9.8.1/make' から出ます

〜

/home/admin/bind-9.8.1/bin/named/../../contrib/dlz/drivers/dlz_postgres_driver.c:487: undefined reference to `sdlzh_build_querystring'
/home/admin/bind-9.8.1/bin/named/../../contrib/dlz/drivers/dlz_postgres_driver.c:484: undefined reference to `sdlzh_build_querystring'
〜
/home/admin/bind-9.8.1/bin/named/../../contrib/dlz/drivers/dlz_odbc_driver.c:1404: undefined reference to `sdlzh_build_sqldbinstance'
collect2: ld はステータス 1 で終了しました
make[2]: *** [named] エラー 1
make[2]: ディレクトリ `/home/admin/bind-9.8.1/bin/named' から出ます
make[1]: *** [subdirs] エラー 1
make[1]: ディレクトリ `/home/admin/bind-9.8.1/bin' から出ます
make: *** [subdirs] エラー 1
$
 

大量の undefined referenceエラーが出ました bind-9.8.1固有のバグのようです
contrib/dlz/drivers/sdlz_helper.c を下記のように修正することで回避できます

 52 
 53 #ifdef DLZ
 54 

  ↓

 52 
 53 //#ifdef DLZ
 54 
 
530 
531 #endif

  ↓

530 
531 //#endif
 

再度 makeします

$ make
making all in /home/admin/bind-9.8.1/make
make[1]: ディレクトリ `/home/admin/bind-9.8.1/make' に入ります
make[1]: ディレクトリ `/home/admin/bind-9.8.1/make' から出ます

〜

making all in /home/admin/bind-9.8.1/doc/doxygen
make[2]: ディレクトリ `/home/admin/bind-9.8.1/doc/doxygen' に入ります
make[2]: ディレクトリ `/home/admin/bind-9.8.1/doc/doxygen' から出ます
make[1]: ディレクトリ `/home/admin/bind-9.8.1/doc' から出ます
$ su
# make install
making all in /home/admin/bind-9.8.1/make
make[1]: ディレクトリ `/home/admin/bind-9.8.1/make' に入ります
make[1]: ディレクトリ `/home/admin/bind-9.8.1/make' から出ます

〜

/bin/sh ./mkinstalldirs /usr/share/man/man1
/usr/bin/install -c isc-config.sh /usr/bin
/usr/bin/install -c -m 644 ./isc-config.sh.1 /usr/share/man/man1
/usr/bin/install -c -m 644 ./bind.keys /usr/etc
$
 

インストールされるファイルは下記の通りです

bin/:
dig  host  isc-config.sh  nslookup  nsupdate

etc/:
bind.keys

include/bind9:
check.h  getaddresses.h  version.h

include/dns:
acl.h         ds.h          message.h       rdataslab.h    tcpmsg.h
adb.h         enumclass.h   name.h          rdatastruct.h  time.h
byaddr.h      enumtype.h    ncache.h        rdatatype.h    tkey.h
cache.h       events.h      nsec.h          request.h      tsig.h
callbacks.h   fixedname.h   peer.h          resolver.h     ttl.h
cert.h        iptable.h     portlist.h      result.h       types.h
compress.h    journal.h     private.h       rootns.h       validator.h
db.h          keyflags.h    rbt.h           rpz.h          version.h
dbiterator.h  keytable.h    rcode.h         sdb.h          view.h
dbtable.h     keyvalues.h   rdata.h         sdlz.h         xfrin.h
diff.h        lib.h         rdataclass.h    secalg.h       zone.h
dispatch.h    log.h         rdatalist.h     secproto.h     zonekey.h
dlz.h         master.h      rdataset.h      soa.h          zt.h
dnssec.h      masterdump.h  rdatasetiter.h  ssu.h

include/dst:
dst.h  gssapi.h  lib.h  result.h

include/isc:
app.h          formatcheck.h    md5.h         quota.h        stdtime.h
assertions.h   fsaccess.h       mem.h         radix.h        string.h
atomic.h       hash.h           msgcat.h      random.h       symtab.h
base64.h       heap.h           msgs.h        ratelimiter.h  syslog.h
bind9.h        hex.h            mutex.h       refcount.h     task.h
bitstring.h    hmacmd5.h        mutexblock.h  region.h       taskpool.h
boolean.h      httpd.h          namespace.h   resource.h     thread.h
buffer.h       int.h            net.h         result.h       time.h
bufferlist.h   interfaceiter.h  netaddr.h     resultclass.h  timer.h
commandline.h  iterated_hash.h  netdb.h       rwlock.h       types.h
condition.h    lang.h           offset.h      serial.h       util.h
dir.h          lex.h            once.h        sha1.h         version.h
entropy.h      lfsr.h           ondestroy.h   sha2.h         xml.h
error.h        lib.h            os.h          sockaddr.h
event.h        list.h           parseint.h    socket.h
eventclass.h   log.h            platform.h    stdio.h
file.h         magic.h          print.h       stdlib.h

include/isccc:
alist.h   cc.h     events.h  result.h  symtab.h   types.h  version.h
base64.h  ccmsg.h  lib.h     sexpr.h   symtype.h  util.h

include/isccfg:
aclconf.h  cfg.h  grammar.h  log.h  namedconf.h  version.h

include/lwres:
context.h  ipv6.h  list.h      lwpacket.h  net.h    platform.h  version.h
int.h      lang.h  lwbuffer.h  lwres.h     netdb.h  result.h

lib/:
libbind9.a  libdns.a  libisc.a  libisccc.a  libisccfg.a  liblwres.a

sbin/:
arpaname             dnssec-revoke    lwresd             named-journalprint
ddns-confgen         dnssec-settime   named              nsec3hash
dnssec-dsfromkey     dnssec-signzone  named-checkconf    rndc
dnssec-keyfromlabel  genrandom        named-checkzone    rndc-confgen
dnssec-keygen        isc-hmac-fixup   named-compilezone

share/man/man1:
arpaname.1  dig.1  host.1  isc-config.sh.1  nslookup.1  nsupdate.1

share/man/man3:
lwres.3                     lwres_gabnresponse_render.3
lwres_addr_parse.3          lwres_gai_strerror.3
lwres_buffer.3              lwres_getaddrinfo.3
lwres_buffer_add.3          lwres_getaddrsbyname.3
lwres_buffer_back.3         lwres_gethostbyaddr.3
lwres_buffer_clear.3        lwres_gethostbyaddr_r.3
lwres_buffer_first.3        lwres_gethostbyname.3
lwres_buffer_forward.3      lwres_gethostbyname2.3
lwres_buffer_getmem.3       lwres_gethostbyname_r.3
lwres_buffer_getuint16.3    lwres_gethostent.3
lwres_buffer_getuint32.3    lwres_gethostent_r.3
lwres_buffer_getuint8.3     lwres_getipnode.3
lwres_buffer_init.3         lwres_getipnodebyaddr.3
lwres_buffer_invalidate.3   lwres_getipnodebyname.3
lwres_buffer_putmem.3       lwres_getnamebyaddr.3
lwres_buffer_putuint16.3    lwres_getnameinfo.3
lwres_buffer_putuint32.3    lwres_getrrsetbyname.3
lwres_buffer_putuint8.3     lwres_gnba.3
lwres_buffer_subtract.3     lwres_gnbarequest_free.3
lwres_conf_clear.3          lwres_gnbarequest_parse.3
lwres_conf_get.3            lwres_gnbarequest_render.3
lwres_conf_init.3           lwres_gnbaresponse_free.3
lwres_conf_parse.3          lwres_gnbaresponse_parse.3
lwres_conf_print.3          lwres_gnbaresponse_render.3
lwres_config.3              lwres_herror.3
lwres_context.3             lwres_hstrerror.3
lwres_context_allocmem.3    lwres_inetntop.3
lwres_context_create.3      lwres_lwpacket_parseheader.3
lwres_context_destroy.3     lwres_lwpacket_renderheader.3
lwres_context_freemem.3     lwres_net_ntop.3
lwres_context_initserial.3  lwres_noop.3

lwres_context_nextserial.3  lwres_nooprequest_free.3
lwres_context_sendrecv.3    lwres_nooprequest_parse.3
lwres_endhostent.3          lwres_nooprequest_render.3
lwres_endhostent_r.3        lwres_noopresponse_free.3
lwres_freeaddrinfo.3        lwres_noopresponse_parse.3
lwres_freehostent.3         lwres_noopresponse_render.3
lwres_gabn.3                lwres_packet.3
lwres_gabnrequest_free.3    lwres_resutil.3
lwres_gabnrequest_parse.3   lwres_sethostent.3
lwres_gabnrequest_render.3  lwres_sethostent_r.3
lwres_gabnresponse_free.3   lwres_string_parse.3
lwres_gabnresponse_parse.3

share/man/man5:
named.conf.5  rndc.conf.5

share/man/man8:
ddns-confgen.8         dnssec-settime.8   named-checkconf.8     nsec3hash.8
dnssec-dsfromkey.8     dnssec-signzone.8  named-checkzone.8     rndc-confgen.8
dnssec-keyfromlabel.8  genrandom.8        named-compilezone.8   rndc.8
dnssec-keygen.8        isc-hmac-fixup.8   named-journalprint.8
dnssec-revoke.8        lwresd.8           named.8

var/run:
 

DNSサービスを開始/停止するのに使う start/stopスクリプトも作成しておきます
検証環境は Gentooベースのシステムのため下記内容 /etc/init.d/bind (0755) となります

#!/sbin/runscript
# Copyright 1999-2004 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header$

PIDFILE=/var/run/named.pid

depend() {
        need net.eth0
        provide dns
}

start() {
        ebegin "Starting bind"
        /usr/local/sbin/named -u daemon
        eend $?
}

stop() {
        ebegin "Stopping bind"
        /bin/kill `cat $PIDFILE`
        eend $?
}
 

デーモンプロセスである named は daemonアカウントで動作させることにしています

ルートネームサーバのアドレスリストを取得しておきましょう
(ただし 今回の構成では実際に利用することはありません)
下記 2通りのいずれかの方法です

  1. FTP ftp://ftp.nic.ad.jp/internic/domain/named.rootから直接取得
  2. digコマンドにより取得 dig @A.ROOT-SERVERS.NET. > /etc/namedb/named.root

named.root は下記のような内容になっています

; <<>> DiG 9.4.2 <<>> @A.ROOT-SERVERS.NET.
; (2 servers found)
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 21878
;; flags: qr aa rd; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 14
;; WARNING: recursion requested but not available

;; QUESTION SECTION:
;.                              IN      NS

;; ANSWER SECTION:
.                       518400  IN      NS      m.root-servers.net.
.                       518400  IN      NS      h.root-servers.net.
.                       518400  IN      NS      b.root-servers.net.
.                       518400  IN      NS      g.root-servers.net.
.                       518400  IN      NS      f.root-servers.net.
.                       518400  IN      NS      c.root-servers.net.
.                       518400  IN      NS      a.root-servers.net.
.                       518400  IN      NS      l.root-servers.net.
.                       518400  IN      NS      d.root-servers.net.
.                       518400  IN      NS      i.root-servers.net.
.                       518400  IN      NS      k.root-servers.net.
.                       518400  IN      NS      j.root-servers.net.
.                       518400  IN      NS      e.root-servers.net.

;; ADDITIONAL SECTION:
m.root-servers.net.     3600000 IN      A       202.12.27.33
m.root-servers.net.     3600000 IN      AAAA    2001:dc3::35
h.root-servers.net.     3600000 IN      A       128.63.2.53
h.root-servers.net.     3600000 IN      AAAA    2001:500:1::803f:235
b.root-servers.net.     3600000 IN      A       192.228.79.201
g.root-servers.net.     3600000 IN      A       192.112.36.4
f.root-servers.net.     3600000 IN      A       192.5.5.241
f.root-servers.net.     3600000 IN      AAAA    2001:500:2f::f
c.root-servers.net.     3600000 IN      A       192.33.4.12
a.root-servers.net.     3600000 IN      A       198.41.0.4
a.root-servers.net.     3600000 IN      AAAA    2001:503:ba3e::2:30
l.root-servers.net.     3600000 IN      A       199.7.83.42
l.root-servers.net.     3600000 IN      AAAA    2001:500:3::42
d.root-servers.net.     3600000 IN      A       128.8.10.90

;; Query time: 69 msec
;; SERVER: 198.41.0.4#53(198.41.0.4)
;; WHEN: Wed Oct 12 22:45:39 2011
;; MSG SIZE  rcvd: 512
 

13個のルートネームサーバが登録されており
うちいくつかのサーバは AAAA つまり IPv6によるクエリに対応していることが分かります

ルートネームサーバの用途としては
自ネームサーバが管理していない 外部ドメインなどの名前解決の問い合わせが来た時に
自力でインターネットに名前解決を問い合わせる 最初の問い合わせ先になります

ただし検証環境の構成では
外部名前解決はプロバイダが提供しているネームサーバに問い合わせることになるので
named.root は実際利用することはありません

続いての準備ですが
rndcコマンドで管理オペレーションをする際の 認証設定を行います
鍵を生成してから 設定ファイルに反映させます

まず鍵の生成ですが 以下のいずれかの方法で行います

dnssec-keygenを使って鍵を作成するのが下記の方法です

$ dnssec-keygen -a HMAC-MD5 -b 512 -n USER -r /dev/urandom mydomain
Kmydomain.+157+15789
$ ls Kmydomain*
Kmydomain.+157+15789.key  Kmydomain.+157+15789.private
$ cat Kmydomain.+157+15789.key
mydomain. IN KEY 0 3 157 3******************************************************* *****************************w==
deer@phenom /ram $ cat Kmydomain.+157+15789.private 
Private-key-format: v1.3
Algorithm: 157 (HMAC_MD5)
Key: 3************************************************************************************w==
Bits: AAA=
Created: 20111013062944
Publish: 20111013062944
Activate: 20111013062944
$
 

上記2ファイルは 鍵の内容を一部伏せていますが HMAC-MD5自体が共通鍵方式なので内容は同じです
.private側の文字列を後で設定ファイルに取り込みます

別の手段として次の rndc-confgenコマンドを使う方が手順としては楽でしょう

$ su
# rndc-confgen -a -b 512 -k mydomain
wrote key file "/usr/etc/rndc.key"
# cat /usr/etc/rndc.key
# Start of rndc.conf
key "mydomain" {
        algorithm hmac-md5;
        secret "c************************************************************************************w==";
};

options {
        default-key "mydomain";
        default-server 127.0.0.1;
        default-port 953;
};
# End of rndc.conf

# Use with the following in named.conf, adjusting the allow list as needed:
# key "mydomain" {
#       algorithm hmac-md5;
#       secret "c************************************************************************************w==";
# };
# 
# controls {
#       inet 127.0.0.1 port 953
#               allow { 127.0.0.1; } keys { "mydomain"; };
# };
# End of named.conf
 

直接 rndc.key フォーマットの設定ファイルを出力してくれます

作成した鍵を 設定ファイルに反映させます
まず クライアント用の設定ですが /usr/etc/rndc.key もしくは /usr/etc/rndc.conf
を上記の内容で作成します
dnssec-keygenを使った場合は secretの箇所に .private の Key: 鍵データを貼り付けます
rndc-confgenを使った場合は /usr/etc/rndc.key がそのまま使えます

サーバ用の設定ですが /usr/etc/named.conf に keyセクションと controlsセクションを記述します
bindの設定も含めて下記内容となります

acl "mydomain4" {
        127.0.0.1/32;
        192.168.1.0/24;
};

acl "mydomain6" {
        ::1/128;
        fe80::/64;
};

options {
        directory "/usr/etc";
        pid-file "/var/run/named.pid";
        port 53;
        max-cache-size 4m;
        listen-on { mydomain4; };
        listen-on-v6 { mydomain6; };
        forwarders { 2408:**:****:0:2***:****:****:***9; };
};

key "mydomain" {
        algorithm hmac-md5;
        secret "c************************************************************************************w==";
};

controls {
        inet ::1 allow { ::1; } keys { mydomain; };
};

zone "." in {
        type hint;
        file "named.root";
};

zone "mydomain" in {
        type master;
        file "mydomain.zone";
};

zone "0.0.127.in-addr.arpa" {
        type master;
        file "0.0.127.in-addr.arpa.zone";
};

zone "1.168.192.in-addr.arpa" {
        type master;
        file "1.168.192.in-addr.arpa.zone";
};

zone "0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa" {
        type master;
        file "0.0.0.fe80.in-addr.arpa.zone";
};
 

optionsセンテンスの listen-onで IPv4用 IPv6用 のアクセスリストを指定しています
それぞれのアクセスリストには ループバックと DNSクエリを受け付けたいネットワークを指定します
(これで 該当するネットワークインターフェースで DNSクエリを受け付けるようになります)

optionsセンテンスの forwardersには 上流フレッツ網のDNSサーバを指定します
IPv6アドレスで指定していますが IPv4アドレスの指定も可能です
forwardersがないと namedは直接インターネットに問い合わせようとして失敗します
(フレッツ光では インターネットへの直接問い合わせを禁止しています)

keyセンテンスには 先ほど設定した rndc用のキーを指定します
また rndc接続許可アドレスを controlsセンテンスで設定しています
これで rndcコマンドを受け付けるようになります

後は zoneセンテンスで各種 IPv6/IPv4問い合わせに対する設定をしています
IPv6の設定は グローバルアドレスではなくリンクローカルアドレス(fe80::/64)を使っていますが
リンクローカルアドレスを設定するのは ルール違反です
今回 IPv6インターネットが使えるようになるまでの暫定措置と動作確認用です

各ゾーンファイルの内容は下記の通りです
mydomain.zone (正引き用)

$TTL 3600
@     IN SOA phenom.mydomain. postmaster.mydomain. (
                         2011102402; serial
                         3600;       refresh
                         100;        retry
                         604800;     expire
                         86400;      negative
                         )
        IN NS     phenom4.mydomain.
        IN MX 10  phenom4.mydomain.
aterm4  IN A      192.168.1.1
aterm   IN AAAA   fe80::2***:****:****:***9
phenom4 IN A      192.168.1.254
phenom  IN AAAA   fe80::1***:****:****:***a
 

0.0.127.in-addr.arpa.zone (IPv4逆引き)

$TTL 3600
@     IN SOA phenom.mydomain. postmaster.mydomain. (
                         2011102003; serial
                         3600;       refresh
                         900;        retry
                         604800;     expire
                         86400;      negative
                         )
        IN NS    phenom4.mydomain.
        IN MX 10 phenom4.mydomain.
1       IN PTR   localhost-v4.mydomain.
 

1.168.192.in-addr.arpa.zone (IPv4逆引き)

$TTL 3600
@     IN SOA phenom.mydomain. postmaster.mydomain. (
                         2011102002; serial
                         3600;       refresh
                         900;        retry
                         604800;     expire
                         86400;      negative
                         )
        IN NS    phenom.mydomain.
        IN MX 10 phenom.mydomain.
1       IN PTR   aterm4.mydomain.
254     IN PTR   phenom4.mydomain.
 

0.0.0.fe80.in-addr.arpa.zone (IPv6逆引き)

$TTL 3600
@     IN SOA phenom.mydomain. postmaster.mydomain. (
                         2011101802; serial
                         3600;       refresh
                         900;        retry
                         604800;     expire
                         86400;      negative
                         )
        IN NS    phenom.mydomain.
        IN MX 10 phenom.mydomain.
9.*.*.*.*.*.*.*.*.*.*.*.*.*.*.2 IN PTR aterm.mydomain.
a.*.*.*.*.*.*.*.*.*.*.*.*.*.*.1 IN PTR phenom.mydomain.
 

IPv6アドレスの一部は伏字にしています
現在 aterm(ルータ)と phenom(DNSサーバ自身)の設定のみですが
後で XBox360 や Wii も設定します

クライアント設定も行っておきましょう
Windowsであれば ネットワークのプロパティ画面から
UNIX系であれば /etc/resolv.conf を設定します

動作確認

namedを起動します

# /etc/init.d/named start
 * Starting bind ...                                                    [ ok ]
# netstat -a | grep domain
tcp        0      0 phenom4.mydomain:domain *:*                     LISTEN     
tcp        0      0 localhost:domain        *:*                     LISTEN     
tcp6       0      0 phenom.mydomain:domain  [::]:*                  LISTEN     
tcp6       0      0 localhost:domain        [::]:*                  LISTEN     
udp        0      0 phenom4.mydomain:domain *:*                                
udp        0      0 localhost:domain        *:*                                
udp6       0      0 phenom.mydomain:domain  [::]:*                             
udp6       0      0 localhost:domain        [::]:*                             
Active UNIX domain sockets (servers and established)
#
 

Linuxクライアントで名前解決できることを確認します

$ ping6 -I eth0 -c 2 aterm
PING aterm(aterm.mydomain) from fe80::1***:****:****:***a eth0: 56 data bytes
64 bytes from aterm.mydomain: icmp_seq=1 ttl=64 time=0.151 ms
64 bytes from aterm.mydomain: icmp_seq=2 ttl=64 time=0.152 ms

--- aterm ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 0.151/0.151/0.152/0.012 ms
$ ping6 -c 2 ds.test-ipv6.jp
PING ds.test-ipv6.jp(2406:800:3:141::196) 56 data bytes

--- ds.test-ipv6.jp ping statistics ---
2 packets transmitted, 0 received, 100% packet loss, time 999ms
$
 

自宅内ホストへの ping疎通はOKですが リンクローカルアドレスを設定しているので -I 指定が必要です
インターネット上の IPv6テストサイト(ds.test-ipv6.jp)は疎通しませんでした
IPv6アドレスまでは解決されましたが肝心の IPv6ネットワークが分断されているためです

IPv4も確認しておきましょう

$ ping -c 2 aterm4
PING aterm4.mydomain (192.168.1.1) 56(84) bytes of data.
64 bytes from aterm4.mydomain (192.168.1.1): icmp_req=1 ttl=64 time=0.134 ms
64 bytes from aterm4.mydomain (192.168.1.1): icmp_req=2 ttl=64 time=0.129 ms

--- aterm4.local ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.129/0.131/0.134/0.011 ms
$ ping -c 2 www.google.com
PING www.l.google.com (74.125.31.104) 56(84) bytes of data.
64 bytes from tb-in-f104.1e100.net (74.125.31.104): icmp_req=1 ttl=44 time=36.6 ms
64 bytes from tb-in-f104.1e100.net (74.125.31.104): icmp_req=2 ttl=44 time=37.4 ms

--- www.l.google.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 36.630/37.040/37.450/0.410 ms
$
 

IPv4 各ネットワークも通常通り疎通します

Windowsの コマンドプロンプトからも確認しておきます

C:\\Users\\admin>nslookup phenom
サーバー:  phenom.mydomain
Address:  fe80::1***:****:****:***a

名前:    phenom.mydomain
Address:  fe80::1***:****:****:***a


C:\\Users\\admin>nslookup phenom4
サーバー:  phenom.mydomain
Address:  fe80::1***:****:****:***a

名前:    phenom4.mydomain
Address:  192.168.1.254


C:\\Users\\admin>nslookup ds.test-ipv6.com
サーバー:  phenom.mydomain
Address:  fe80::1***:****:****:***a

権限のない回答:
名前:    ds.test-ipv6.com
Addresses:  2001:470:1:18::2
          216.218.228.114


C:\\Users\\admin>
 

IPv6 IPv4 どちらのクエリにも対応できています

自宅の IPv6環境を構築しました
プロバイダの DNSサーバまでIPv6で通信して IPv6アドレスの解決までできることを確認しました
IPv6が利用可能な環境はすぐ近くまで来ています
IPv6サーバツールへ戻る