あらまし
私は,KDDI au-one net というプロバイダの,イーサエコノミーという法人向けサービスを使っています.このイーサエコノミーというサービスは,3〜8bit程度のサブネットで固定IPを割り振ってくれるサービスでして,PPPoEルータのアンナンバード(un-numbered)機能を用いて接続します.簡単に言うと,プロバイダは一つだけですが,自宅PCそれぞれに固定グローバルIPアドレスを振ることができます.
私がお気に入りのサービスとしては,DNSの逆引き権限をユーザのDNSサーバに任せてくれるというところなのですが,今月末から急にIPアドレスの逆引きができなくなり,困りました.
結論から言うと,私のDNSサーバ(bind)設定にミスがあり,それが顕在化したということです.
症状と問題点予測
- LAN側PCでは正引き・逆引き ともに正常に引ける.
- 外部からも正引きは可能.
- 外部から逆引きをしようとすると, 下記のようになる.
server can't find www.zzz.yyy.xxx.in-addr.arpa: SERVFAIL
ローカルからは正しく動作していたため,問題箇所を探すのに時間がかかりました.つまり,疑うべき対象が広がってしまったのです.
仮説の検証
Web上から nslookup をかけられるテストサイトを使って,逆引きクエリを投げてみたところ,確かに DNS query が飛んできましたので,どうやら 仮説1は誤りのようです.KDDIは悪くないです.疑って正直☆スマンかった.
また,仮説2もどうやら間違っていたようです.なぜなら,bindのバージョンを下げても逆引きできなかったから.
私の設定が間違っていた
結論を申し上げると,私が NSレコードを書いたものの,そのFQDNを定義していなかったことが問題かもしれません.ドメインレジストラに,ns1.hogehoge.orgのIPアドレスはxxx.yyy.zzz.wwwと教えておきながら,それを自分のDNSサーバに定義していなかったのです.よって,zone設定ファイルに下記のように記述することで,解決しました.
ns1 IN A xxx.yyy.zzz.www
RFCを読んでいないのでよくわかりませんが,ns1の正引きができないと逆引きできない理由があるのかもしれません.よくわかりません.
なぜ今まで動いていたのか
謎です.今まではレジストラが代わりにns1.hogehoge.org の正引き結果を返していてくれたのかもしれません.
今の設定を公開
外部からの逆引き考慮した bind の設定はあまりありませんので*1,これを機に設定を公開します.
ちなみに,提供されているサブネットを管理しているプロバイダに逆引き権限を委譲されないと,そもそも逆引きクエリが自前サーバまで届かないので注意してください.イーサエコノミーの方は法人営業に相談すると良いでしょう.
なお,設定の意味などはここらへんが詳しい.
/etc/named.conf
acl internal-acl { xxx.yyy.zzz.32/28; 127.0.0.1; }; options { directory "/var/named"; }; // ローカルクライアントからのクエリ用 view "internal-view" { match-clients { internal-acl; }; allow-query { internal-acl; }; allow-recursion { internal-acl; }; zone "." IN { type hint; file "named.ca"; }; zone "localhost" IN { type master; file "localhost.zone"; allow-update { none; }; }; zone "0.0.127.in-addr.arpa" IN { type master; file "localhost.rez.zone"; allow-update { none; }; }; zone "hogehoge.org" { type master; file "hogehoge.org.zone"; allow-update { none; }; }; zone "32h.zzz.yyy.xxx.in-addr.arpa" { type master; file "hogehoge.org.rev.zone"; allow-update { none; }; }; }; // 外部からのクエリ用 view "external-zone" { match-clients { any; }; allow-query { any; }; recursion no; zone "hogehoge.org" { type master; file "hogehoge.org.zone"; allow-update { none; }; }; zone "32h.zzz.yyy.xxx.in-addr.arpa" { type master; file "hogehoge.org.rev.zone"; allow-update { none; }; }; }; key "key" { algorithm hmac-md5; secret "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"; };
逆引きゾーンファイル指定に 「zone "32h.zzz.yyy.xxx.in-addr.arpa" {」のように,32hとつけていますが,これはKDDIイーサエコノミーの上位DNSの逆引きゾーンファイルにてCNAMEとして定義されています.おそらく,「33 IN CNAME 33.33h.zzz.yy.xxx.in-addr.arpa.」などと定義されているのでしょう.私の場合,管理ネットワークアドレスが,xxx.yyy.zzz.32/28 ですので,"32h" なのです.私はこれをKDDIから教えてもらったのかどうか記憶にありません….この話はこちらに詳しくかかれている.
/var/named/named.ca
(略)
/var/named/localhost.zone
$TTL 86400 $ORIGIN localhost. @ 1D IN SOA @ root ( 42 ; serial (d. adams) 3H ; refresh 15M ; retry 1W ; expiry 1D ) ; minimum 1D IN NS @ 1D IN A 127.0.0.1
/var/named/localhost.rez.zone
$TTL 86400 @ IN SOA localhost. root.localhost. ( 1997022700 ; Serial 28800 ; Refresh 14400 ; Retry 3600000 ; Expire 86400 ) ; Minimum IN NS localhost. 1 IN PTR localhost.
/var/named/hogehoge.org.zone
$TTL 86400 @ IN SOA ns1.hogehoge.org. admin@hogehoge.org. ( 2009020100 ; serial 3600 ; refresh 1hr 900 ; retry 15min 604800 ; expire 1w 86400 ; min 24hr ) IN NS ns1.hogehoge.org. IN NS ns2.hogehoge.org. IN MX 10 mail.hogehoge.org. hogehoge.org. IN A xxx.yyy.zzz.34 server IN A xxx.yyy.zzz.34 ns1 IN A xxx.yyy.zzz.34 ns2 IN A aaa.bbb.ccc.ddd router IN A xxx.yyy.zzz.33 www IN CNAME server mail IN A xxx.yyy.zzz.34 ftp IN CNAME server host1 IN A xxx.yyy.zzz.35 : : : :
/var/named/hogehoge.org.rev.zone
$TTL 86400 @ IN SOA ns1.hogehoge.org. admin@hogehoge.org. ( 2009020101 ; serial 3600 ; refresh 1hr 900 ; retry 15min 604800 ; expire 1w 86400 ; min 24hr ) IN NS ns1.hogehoge.org. IN NS ns2.hogehoge.org. IN PTR hogehoge.org. IN A 255.255.255.240 33 IN PTR router.hogehoge.org. 34 IN PTR server.hogehoge.org. 35 IN PTR host1.hogehoge.org. : : : :
ちなみに,KDDIイーサエコノミーの場合,下記のように記述してもOKです.
: 32h.zzz.yyy.xxx.in-addr.arpa. IN NS ns1.hogehoge.org. 32h.zzz.yyy.xxx.in-addr.arpa. IN PTR hogehoge.org. 32h.zzz.yyy.xxx.in-addr.arpa. IN A 255.255.255.240 33.32h.zzz.yyy.xxx.in-addr.arpa. IN PTR router.hogehoge.org. 34.32h.zzz.yyy.xxx.in-addr.arpa. IN PTR server.hogehoge.org. 35.32h.zzz.yyy.xxx.in-addr.arpa. IN PTR host1.hogehoge.org. :
*1:というより,24bitサブネットに対する設定例はよく見かけますが,28bitや29bitのような中途半端な(?)サブネットに対する設定例は見かけないのです.