IPv6に勤しんでみる bind 正引き
IPv6の続きです。毎回あの難解なv6のアドレスを打つのは大変なのでbindをいれてAAAAを返せるようにしてみようと思います。
ちなみに前回リモートホストからtelnetで80番をたたけなかったのは、いないと思っていたip6tables様にディフェンスされていたせいでした。良い仕事してやがる・・・。
どーもデフォルトで入るみたいですね。とりあえず止まっておいてもらいました。
# /etc/init.d/ip6tables off # chkconfig ip6tables off
ふむ。
いくつかデーモンを入れたらフィルタリングもきっちり書かなきゃですね。
$ wget http://ftp.isc.org/isc/bind9/9.6.0-P1/bind-9.6.0-P1.tar.gz $ tar zxvf bind-9.6.0-P1.tar.gz $ cd bind-9.6.0-P1
ISCデザイン変わった? https://www.isc.org/ まあそれはさておき、
デフォルトのままconfigureすればAAAAも書ける気がしますがオプションがあるか一応調べてみておきます。
$ grep v6 --enable-ipv6 use IPv6 default=autodetect --with-kame=PATH use Kame IPv6 default path /usr/local/v6 # POSIX doesn't include the IPv6 Advanced Socket API and glibc hides # parts of the IPv6 Advanced Socket API as a result. This is stupid # as it breaks how the two halves (Basic and Advanced) of the IPv6 # Define _GNU_SOURCE to pull in the IPv6 Advanced Socket API.
ふむ。自動検出のようですが一応enableつけておきますか。
もう一つ--with-kameってのがありますね。PosixはAdvanced Socket APIの機能を隠してるから有効にするっぽい事がかいてます。kameプロジェクト実装のipv6ライブラリのパスを指定してるのかな?...とりあえず試しにこっちはなしでいれてみます。
$ ./configure --enable-ipv6 --disable-openssl-version-check $ make $ su # make install # ./mkinstalldirs /usr/local/bin/ # /usr/bin/install -c isc-config.sh /usr/local/bin/ # ./mkinstalldirs /usr/local/bind/bin /usr/local/bind/var/run/ /usr/local/bind/etc # /usr/bin/install -c isc-config.sh /usr/local/bind/bin
つづいて設定。インストールまわりは以前かいてたり つ http://d.hatena.ne.jp/clmind/20080719/1216455892
versionは違いますが。
では、まずは正引きから
# vi /usr/local/bind/etc/named.conf key "rndc-key" { algorithm hmac-md5; secret "xxxxxxxxxxxxxxxxxxxxx"; }; controls { inet 127.0.0.1 port 953 allow { 127.0.0.1; } keys { "rndc-key"; }; }; options { directory "/usr/local/bind/etc"; pid-file "/usr/local/bind/var/run/named.pid"; recursion yes; max-ncache-ttl 300; max-cache-ttl 3600; allow-query { any; }; listen-on-v6 { any; }; }; logging { channel "default_syslog" { syslog local5; }; category lame-servers { null; }; category default { default_syslog; }; }; zone "v6" IN { type master; file "v6.zone"; };
optionsでlisten-on-v6を設定しておかないとダメな模様。
# vi v6.zone $TTL 600 @ IN SOA ns.v6. root.v6. ( 20090303 ; serial 3600 ; refresh 1hr 900 ; retry 15min 604800 ; expire 1w 86400 ; min 24hr ) IN NS ns.v6. ns IN AAAA xxxx:xxxx:xxxx:8401::902 v6server IN AAAA xxxx:xxxx:xxxx:8401::902 v6client IN AAAA xxxx:xxxx:xxxx:8401::903
起動してローカルからdigでAAAAを引いてみる。
# dig @xxxx:xxxx:xxxx:8401::902 v6client.v6 AAAA ; <<>> DiG 9.6.0-P1 <<>> @xxxx:xxxxx:xxxx:8401::902 v6client.v6 AAAA ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 55296 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1 ;; QUESTION SECTION: ;v6client.v6. IN AAAA ;; ANSWER SECTION: v6client.v6. 600 IN AAAA xxxx:xxxxx:xxxx:8401::903 ;; AUTHORITY SECTION: v6. 600 IN NS ns.v6. ;; ADDITIONAL SECTION: ns.v6. 600 IN AAAA xxxx:xxxxx:xxxx:8401::902 ;; Query time: 1 msec ;; SERVER: xxxx:xxxxx:xxxx:8401::902#53(xxxx:xxxxx:xxxx:8401::902) ;; WHEN: Tue Mar 3 15:
普通にひけた。digコマンドの@の後ろがv6なのがなんともたまりませんな。
ちゃんと指定できるのか心配でしたが大丈夫でした。
続いてclient側でresolv.confを設定して引いてみる
# vi /etc/resolv.conf nameserver xxxx:xxxx:xxxx:8401::902 search v6
リゾルバを指定せずにdigで
# dig v6client.v6 AAAA ; <<>> DiG 9.3.4-P1 <<>> v6client.v6 AAAA ;; global options: printcmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 17971 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1 ;; QUESTION SECTION: ;v6client.v6. IN AAAA ;; ANSWER SECTION: v6client.v6. 600 IN AAAA xxxx:xxxxx:xxxx:8401::903 ;; AUTHORITY SECTION: v6. 600 IN NS ns.v6. ;; ADDITIONAL SECTION: ns.v6. 600 IN AAAA xxxx:xxxxx:xxxx:8401::902 ;; Query time: 1 msec ;; SERVER: xxxx:xxxxx:xxxx:8401::902#53(xxxx:xxxxx:xxxx:8401::902) ;; WHEN: Tue Mar 3 15:49:31 2009 ;; MSG SIZE rcvd: 102
うむ!(`・ω・´)想定通り
これでtelnetもホスト名で叩けますな。
$ telnet v6server 80 Trying xxxx:xxxx:xxxx:8401::902... Connected to v6server.v6 (xxxx:xxxx:xxxx:8401::902). Escape character is '^]'. GET <h1>It works!</h1>Connection closed by foreign host.
ちなみに設定してて疑問に思ったのですが、同一ホスト名にAレコードとAAAAレコード両方指定されている場合はブラウザとかはどっち優先するのかなと。
で、調べてみたらfirefoxとかではv6優先みたいですね。まあ最終的には移行するのだから当然か。
IPv6が優先されることでfirefoxが遅いってな記事が結構ありました。
まあこの辺はアプリケーションの実装によるんでしょうね〜。