2010/12/02

ServersMan@VPSをDNSサーバにしてIPv6の名前解決をする

ドメインをお名前.comで取得して、プライマリDNSサーバをServersman@VPSに構築しました。 お名前.comの標準機能にはDNSのレコード管理がありますが、AAAAレコードに対応していません。

そこでお名前.comのセカンダリDNSの機能を使ってAAAAレコードを持つDNSサーバのセカンダリとして動いてもらう事にしました。

なおOSは Debian Squeezeを使っていて、パッケージで導入したBINDのバージョンは9.7.1です。

重要! 制限事項 〜できること、できないこと〜

今回は新規に取得したドメイン名の管理を自分の手で行なう事、特にVPSサーバ以外の IPv6接続に使う複数のAAAAレコードの管理が目的です。

取得したドメイン名(example.org)下のホスト名からIPアドレスを検索する正引きについては自由に制御する事が可能です。

しかしPTRレコード(*.ip6.arpa, *.in-addr.arpa)の名前解決は、IPアドレスを管理する事業者でないとできません。

ServersMan@VPSでは、UbicName管理下のドメインでないとPTRレコードの管理ができないところがポイントです。

とはいえTCPWrapperでparanoia設定を使うわけでもないし、自分の目的の範囲では逆引きは必要ないので、今回は値段と興味のバランスを取ってお名前.comでドメインを新規に取得しました。

このトレードオフはバランスが悪いので、ServersMan@VPSだけを使っているのであれば、(たかだか1800円ですし)UbicNameを使ってドメインを取得しないと後悔すると思います。

自分でDNSサーバを管理する理由

IPv6に対応したDNS管理機能を提供する事業者は、それほど多くはありません。 また何かしらのサービスに含まれている場合もありますが、それらの機能を使うために支払う金額は、比較的高額です。

海外の事業者もいくつかチェックしましたが、AAAAレコードに対応しているかどうか明記していないところや、信用できなさそうなところばかりでした。

今回ドメインを取得したお名前.comも、標準のDNSレコード管理機能ではAAAAレコードの登録はできません。

そういう意味ではUbicNameは問題ないですよね。普通は。ServersMan側で逆引きにもちゃんと対応しているし。 個人的に問題なのは自由にCNAMEとAAAAレコードが追加できないところでした。

IPv6対応は早急に進むと思われるので、あと1,2年の間には、ほとんどのドメイン管理事業者は無償提供のDNS管理機能でのAAAAレコードの管理に対応するでしょう。

けれど、どうせ1、2レコードの追加ができるだけだろうし、いろいろ制限も多そうなので、自分でDNSサーバを立てることにしました。

そこで問題になるのは、ドメイン保持者としてDNSサーバを登録する場合には、最低でも2台のDNSサーバ名が必要です。 そこで追加料金なしに利用できるお名前.comの標準機能、セカンダリDNSサーバを利用することにしました。

とりあえずServersMan@VPSでDNSサーバを構築する

パッケージを使ってしまえば、debianをDNSサーバにするのは、それほど難しくありません。

難しいのは「正しく」使うことです。その点では、まだまだ修行中です…。

パッケージの導入

既に一般ユーザで作業をしていますが、hostnameが変わると使えなくなるsudoは怖いので、しばらくrootで作業をしました。

# apt-get install bind9 dnsutils
簡単に設定

設定するドメイン名を example.orgだとすると、まずは

/etc/bind/named.conf.localに追加したzone設定

zone "example.org" {
        type master;
        file "/etc/bind/db.example.org";
        allow-transfer { 210.172.129.81; };
        notify yes;
        forwarders {};
};

次にfile行に追加したファイルを作成します。

/etc/bind/db.example.orgファイルの全体

$TTL	1800
@	IN	SOA	example.org. root.example.org. (
			      1		; Serial (updated: 2010/12/2 08:37)
			 604800		; Refresh
			  86400		; Retry
			2419200		; Expire
			   1800)	; Negative Cache TTL
;
@	IN	NS	www.example.org.
@	IN	NS	2nd.dnsv.jp.
@	IN	MX	20	www.example.org.
@	IN	A	183.1xx.xx.xxx
@	IN	AAAA	2001:2e8:601:x:x:x:x:x
www	IN	A	183.1xx.xx.xxx
www	IN	AAAA	2001:2e8:601:x:x:x:x:x

安定して動くようになったらファイル先頭のTTLとSOAセクション最後のNegativeCache TTLの値を604800秒(48時間)程度に増やします。 頻繁に設定を変更する可能性のある間は短かめの時間にしておいた方が便利だと思います。

この設定ファイルで重要なのは2行目で、root@example.orgのメールアドレスでメールを受け取ることができると表明している点です。

しかも"@ IN MX"行で、そのメールは"www.example.org"が受け付けるとなっています。

この"www.example.org"がServersMan@VPSで作成したホスト名になるので、名前を変更したいなら"www"全てを適当な名前に変更します。

debianにはexim4が導入されていましたが、外部からメールを受け取る25番ポート(smtp)はlocalhostだけに開いていました。

このためにexim4の再設定が必要になります。

MTAの再設定

"exim4"パッケージを再設定しようとすると、「"exim4-config"でやってくれ」といわれるので、そちらのパッケージを指定してlocalesのように再設定をします。

# dpkg-reconfigure exim4-config

最初に選択する項目は先頭の「internet site; mail is sent and received directly using SMTP」です。 はぁ。

次にmail nameを入力しますが…。用途に応じてホスト名だったり、ホスト名+ドメイン名なFQDNだったり、ドメイン名だったりを入力します。

今回はホスト名と関係なく、foo@example.org形式のメールアドレスを作成したかったので、 example.orgと入力しました。

次に25番ポートを開くIPアドレスを入力します。 デフォルトでは、IPv4とIPv6のloopbackアドレスが入っているので、追加する形でVPSサーバに割り当てられたIPv4とIPv6アドレスを追加します。

127.0.0.1 ; ::1 ; 183.1xx.xx.xxx ; 2001:2e8:601:x:x:x:x:x

次にlocal domainを入力するので、local host名とexample.orgを入力しておきます。

example.org ; www

受け取るrelay mailのアドレスはないので、ここと次のsmarthostについての欄は空欄。

次にdial-upだったら頻繁に発生しないようにするけど…、と聞かれるので、そんな気づかいは無用と"No"を選択。 だんだん質問がマニアックに…。

qmailは最近流行ってるわけでもないしMaildir形式はパス。ファイルサイズが大きくなるのが心配ですが、伝統のmbox形式に変更。

そして設定ファイルの形式が単一ファイルなのか、50ぐらいに分割したファイル群なのかを選択。 これって決められるのは嬉しいような混乱を招くだけのような…。

rootとpostmaster宛てのメールはforwardして欲しくないんだけど、どのユーザに届ける?と聞かれたので、唯一の作業用アカウント名を指定。

ここまで質問に答えると、無事にexim4が再起動して終了。 期待通りに動いているかテストします。

MTAの動作テスト

とりあえず外部からのメールについての応答をするか25番ポートの開き具合いを確認しておきます。

# netstat -naW | grep :25
tcp        0      0 183.1xx.xx.xxx:25      0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN
tcp6       0      0 2001:2e8:601:x:x:x:x:x:25 :::*                    LISTEN
tcp6       0      0 ::1:25                  :::*                    LISTEN

とりあえずはVPSに割り当てられたIPv4とIPv6アドレスが加わっていれば大丈夫です。

次は、いきなりメールがバウンスしても困るので、とりあえずはローカルユーザからexample.orgユーザ宛てのメールが出せるかテストします。

# mail -s 'test from localhost' root@example.org

このメールは先ほど指定した /var/spool/mail/user1 などのローカルユーザ名のファイルになっているはず。

一般ユーザでメールを読むのもmailコマンドでできますが、/var/spool/mail以下のファイルを直接確認した方が早いです。

# su - user1
$ mail

これぐらいの設定が終ったら、DNSサーバの設定を続けます。

DNSサーバ側の残作業

/etc/bind/named.conf.localと/etb/bind/db.example.orgの2つのファイルの設定が終りました。

後から問題がみつかったので、 /etc/bind/named.conf.optionsファイルを編集します。

options {
	directory "/var/cache/bind";
	auth-nxdomain no;    # conform to RFC1035
	listen-on-v6 { any; };
	recursion no;
};

ServersMan@VPSでは/etc/resolv.confは再起動の度に初期化されるようですし、これを変更する意味はないので、forwardersは空のままでキャッシュサーバとしては働かないようにしておきます。

最後に再起動をして設定を反映させます。

# /etc/init.d/bind9 restart
基本的な稼働確認

digコマンドを使って名前が引けることと、外部からのaxfrリクエストを拒絶するところは確認しておきます。

まずはVPS上で、digコマンドを使って名前を引いてみます。

# dig @::1 www.example.org
...
;; ANSWER SECTION:
www.example.org.	1800	IN	A	183.1xx.xx.xxx
...

次に外部のサイトからaxfrリクエストを送ってみます。

$ dig @183.1xx.xx.xxx example.org axfr
; (1 server found)
;; global options: +cmd
; Transfer failed.

とりあえず、これぐらできたらお名前.comのドメインNaviに移動して設定をしていきます。

  • 「ホスト登録・変更・削除」から"www.example.org"と"183.1xx.xx.xxx"のIPアドレスの組を登録する
  • 「セカンダリDNS設定」から、「他のネームサーバを利用」を選択し、プライマリ:"www.example.org"、セカンダリ:"2nd.dnsv.jp"としてDNSサーバを登録する

まずホスト登録を行なう必要があるところが、ひっかかりやすそうな感じがします。

とりあえず手元の環境では、ここまで終っていますが、自分のプロバイダのDNSサーバに反映されるのはお名前.comでドメインを取得した後に設定されたTTL設定の48時間後のようです。 更新が終わらないので、しばらく様子をみることにします。

待ち時間で、その他の確認作業

お名前.comでの作業が無事に終ると、数分後には2nd.dnsv.jpでzoneファイルが転送されているようでした。

ここで2nd.dnsv.jpに登録されている情報を確認しておきます。 家のLinuxからnslookupを使います。

$ nslookup -type=AAAA www.example.org 2nd.dnsv.jp
Server:		2nd.dnsv.jp
Address:	210.172.129.81#53

www.example.org	has AAAA address 2001:2e8:601:x:x:x:x:x
VPSの/etc/resolv.confにあるDNSサーバで同じ事をしてみる

たまたま確認したら反映が終っていたので、同じようなqueryを投げてみました。

$ nslookup -type=AAAA www.example.org 202.2xx.2xx.xx
Server:		202.2xx.2xx.xx
Address:	202.2xx.2xx.xx#53

Non-authoritative answer:
www.example.org	has AAAA address 2001:2e8:601:x:x:x:x:x

Authoritative answers can be found from:
example.org	nameserver = www.example.org.
example.org	nameserver = 2nd.dnsv.jp.
2nd.dnsv.jp	internet address = 210.172.129.81
外部からのスキャン

あとは外部からスキャナを使っていろいろ確認してみるのが良さそうです。 例えば www.mxtoolbox.com は、SMTPサーバの簡単な応答チェックもできます。

例えば黄色になって"Warning"となっている項目は例えば次のようになっています。

250 dti-vps-srv02 Hello please-read-policy.mxtoolbox.com [64.20.227.133] [156 ms]

このSMTPの応答をみているとExim4の動きとして、/etc/hostsのIPアドレスのすぐ次に書いてあるホスト名を、そのまま応答名に使うようです。

そこで/etc/hostsを次のように変更しました。

127.0.0.1 localhost
::1 localhost
2001:2e8:601:x:x:x:x:x v6-2001-2e8-601-x-x-x-x-x.ub-freebit.net dti-vps-srv02 www www.example.org
183.1xx.xx.xxx v-183-1xx-xx-xxx.ub-freebit.net dti-vps-srv02 www www.example.org

sudoを正しく動かすためには、uname -nの出力になるホスト名が、この中に含まれていなければなりません。 また/etc/hostnameにwwwを一行で書くなどしてホスト名の変更を恒久的にします。

設定を反映させるためにexim4のリスタートをします。

# /etc/init.d/exim4 restart

これで先ほどのチェックを再び行ないます。

250 v6-2001-2e8-601-x-x-x-x-x.ub-freebit.net Hello please-read-policy.mxtoolbox.com [64.20.227.133] [156 ms]

こんな事を繰り返しながら問題がないか確認していきます。

とりあえず限定された外部とのメールのやり取りもできるので、あとはDNSの変更がプロバイダまで反映されるのを待とうと思います。

メールサーバは無料版のGoogleAppsに統合してしまうというのも手かとは思いますが、既にプロバイダからそういうアドレスを貰っていて、重複してもつまらないので、今回はパスしました。

そうそう今回はいわゆるコンテンツDNSサーバを構築したので、直接関連しないですが、キャッシュDNSサーバのセキュリティについては IPA DNS Security、などのドキュメントを参照してください。

2010/12/2 23:55反映:
この文書にあるhttp://recursive.iana.org/などでチェックすると、IPv6のアドレスでだけrecursionを許可している設定が見つかったので、named.conf.optionsにrecursion no;の設定を本文に反映させています。

0 件のコメント: