BINDでDNSサーバを立てる。
NSDのほうが余計なプロセスがなくて軽いらしいけど、centOSでNSDのパッケージを探してモニョモニョするのって結構面倒そうなので(yumが使えない)、あっさりBINDで。どうせそんな大規模サイト突っ込むわけじゃないし、と自分のヘタレに言い訳はしておく。
それで、先にGO DADDYでドメインを1つ取ったんだけど、そっちは、これまた先に試用初めてしまった、SERVERSMAN@VPSのプランに設定してしまったので、そんでもって、さくらのVPSと動作を比べてどっちか残す、みたいな感じで試用したいので(まあ、安いからしばらくどっちも残してもいいけど;そうするとLIVE COMMERCEは1つでいいから、サーバ設定バーチャルとか色々しないといけないかも・・・めんどっ!)、新たに、お名前.comで.comドメインを取りました。
前書き長いですけど、ここの主な流れは、
・独自ドメイン取る(できれば、自前DNSへの移行が簡単なところで、色々融通効くところがいいですね)
・VPSでDNSサーバをインストールしてCONFファイルの設定する。
・DNSの名前解決の元になるZONEファイルを作って、AレコードとかMXレコードとか設定していく
・自前DNSが公式に認められるようにレジストラに登録する(→このステップがさ~どこにもかいてないのよぉ~。全然DNS引き込めなくて参ったわ~)
独自ドメイン取るのは業者によって違うし、お名前.comで簡単に取れたので、じゃあ、SSHでイジイジの方から始めます。
先に、BINDのインストールが済んだところからです。(yum install bind)
BIND本体と「bind-chroot」「caching-nameserver」の3つがちゃんとインストールされているか確認しておきます。忘れてたら、一番最初の設定についてのエントリーを確認。
bind-chrootをインストールしたので、「/var/named/chroot/」が、BINDのルートディレクトリになるので、注意。
1)「/var/named/chroot/etc/named.conf」を編集・設定する
named.confのオリジナルは別のところにあるけど、bind-chrootを入れているので、編集ファイルとディレクトリに注意。1個目のワナですな。
[root@server]# cp /var/named/chroot/etc/named.caching-nameserver.conf /var/named/chroot/etc/named.conf
※「named.caching-nameserver.conf」をリネームコピーして使います。このファイルの中身は、殆どオリジナルのnamed.confと同じなので、どっちをベースにしてもいいけど、実際に配置したいファイルと同じ階層のファイルを触るほうが使いやすいと思います。
[root@server]# nano /var/named/chroot/etc/named.conf
- // listen-on port 53 { 127.0.0.1; }; (コメントアウトする=無効)
//listen-on-v6 port 53 { ::1; }; (コメントアウトする=無効)
- version “unknown”; (その下に追記)
- directory “/var/named”; (確認)
dump-file “/var/named/data/cache_dump.db”; (確認)
statistics-file “/var/named/data/named_stats.txt”; (確認)
memstatistics-file “/var/named/data/named_mem_stats.txt”; (確認)
- query-source port 53; (コメント取る=有効)
query-source-v6 port 53; (コメント取る=有効)
- allow-query { localhost; localnets; };
- これだけ全部追記。※forwardersの閉じカッコ「};」忘れないように。
forwarders{
xxx.xxx.xxx.xx; (プライマリDNSのIPアドレス=VPSのIP:例 210.157.1.184;)
xxx.xxx.xxx.xx; (セカンダリDNSのIPアドレス=レジス炉らなどのサービスで借りる:例 210.157.1.185;)
};
※ここの2つのIPアドレスは、1つ目はプライマリDNSのIPアドレス、つまり、今回BINDでDNSサーバを立てているVPSのIPアドレスを入力。2つ目は、ドメインを取得したサービス(今回だったらお名前.comのドメイン管理画面でセカンダリネームサーバを探す。そしてそれを、whoisサービスなどにかけて、そのサーバのIPアドレスを調べる。セカンダリは、無料のレンタルサービスやレジストラが用意しているものなど色々あるので、利用できるものであればOK。(レジストラにはたいてい利用できるものがある)
これを、http://www.cman.jp/network/support/ip.htmlここのサービスで調べるとIPアドレスがわかるから。
- view localhost_resolver の{};内の最後の行(=「include “/etc/named.rfc1912.zones”;」の次の行)に1行追記。○○○.comは取得したドメイン名。
include “/etc/named.○○○.com.zone”;
- 以下の記述(「view”internal”」から「};」まで)を全部、CONFファイルの最後に追記。
—————————————-
view “internal” {
match-clients { localnets; };
match-destinations { localnets; };
recursion yes;
include “/etc/named.rfc1912.zones”;
include “/etc/named.○○○.com.zone”;
};
view “external” {
match-clients { any; };
match-destinations { any; };
recursion no;
include “/etc/named.○○○.com.zone.wan”;
};
—————————————-
保存して閉じる。
2)CONFファイルで定義した2つのZONEファイルを新規作成する
[root@server]# nano /var/named/chroot/etc/named.○○○.com.zone
—————————————-
zone “○○○.com” {
type master;
file “○○○.com.db”;
};
zone “**.***.***.in-addr.arpa” {
type master;
file “**.***.***.in-addr.arpa.db”;
};
—————————————-
※○○○.comは、取得したドメイン名。
※**.***.***は、VPSのIPアドレスの頭から3桁を逆転にして記述。例えば、IPが、012.123.456.78だったとしたら、ここは、456.123.012となる。
保存して閉じる。
[root@server]# nano /var/named/chroot/etc/named.○○○.com.zone.wan
—————————————-
zone “○○○.com” {
type master;
file “○○○.com.db.wan”;
allow-query { any; };
};
—————————————-
保存して閉じる。
3)ZONEファイルにヒモ付けられるDB2ファイルを作成する
[root@server]# nano /var/named/chroot/var/named/○○○.com.db
—————————————-
$TTL 86400
@ IN SOA ○○○.com. root.○○○.com.(
2011050101 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN NS ○○○.com.
IN MX 10 ○○○.com.
@ IN A ***.***.***.**
* IN A ***.***.***.**
—————————————-
※ドメインの後ろの「.」を見落とさないようにつけること。
※@と*のAレコードには、VPSのIPアドレスを記述する。
※シリアルは「西暦+月+日+2ケタの数字を入れる(シリアル)」これで各DNSが最新かどうか、一致してるかどうかを検証しているので、同じときに編集したZONEファイルは必ず同じシリアルにしておくこと。
[root@server]# nano /var/named/chroot/var/named/**.***.***.in-addr.aarpa.db
※「**.***.***」は、VPSのIPの紙桁を逆順にする。(named.○○○.com.zoneファイルに記載したfile名と同じ)
—————————————-
$TTL 86400
@ IN SOA ○○○.com. root.○○○.com.(
2011050101 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN NS ○○○.com.
** IN PTR ○○○.com.
—————————————-
※最後の行の「**」はVPSのIPアドレスの最後の数値。
[root@server]# nano /var/named/chroot/var/named/○○○.com.db.wan
—————————————-
$TTL 86400
@ IN SOA ns1.○○○.com. root.○○○.com.(
2011050101 ; Serial
7200 ; Refresh
7200 ; Retry
2419200 ; Expire
86400 ) ; Minimum
IN NS ns1.○○○.com.
IN MX 10 ○○○.com.
ns1 IN A ***.***.***.**
@ IN A ***.***.***.**
www IN A ***.***.***.**
ftp IN A ***.***.***.**
mail IN A ***.***.***.**
○○○.com. IN TXT “v=spf1 a mx ~all”
—————————————-
※このファイルが外向けのレコードを記載したファイルになるので、必要なAレコード、MX、CNAMEなどはこの中に入れていく。(@、www、ftp、mailなどのAレコードとネームサーバのMXレコード)
※とりあえず上記が必要な設定。
※注意するのは、このファイルには、ネームサーバの名前がでてくること。
「ns1.○○○.com」→頭のns1は任意につけてかまわない。「dns1」とか色々。DNSサーバは1つのドメインに対して通常2つ(1つ目が落ちたときにアクセスできなくなるのを防ぐため)指定するので、1つは自前、1つはドメインを取得したサービスのDNSサーバなどにして、ドメインに設定することが多い。別に3つ指定しても4つ指定してもかまわない。(ドメインへのDNSサーバのヒモ付けは、ドメインの管理会社のWEB画面などから設定する)
4)設定ファイル、ZONEファイルの所有者をNAMEDに変更する
ここで、お気づきかもしれませんが(つうか、これに気づかずえらい長いこと右往左往しましたわ;)named.confファイルで記述した「named.○○○.com.zone」「named.○○○.com.zone.wan」の2つのファイルが、パスの指定先と保存先が違います。
ので、このままでは、パスが通らず、DNSサーバが起動できません。
ということで。
この2つのファイルへのシンボリックリンクを、named.confで記述した場所(=/etc/ディレクトリ)へ作成します。
[root@server]# ln -s /var/namaed/chroot/etc/named.○○○.com.zone /etc/named.○○○.com.zone
[root@server]# ln -s /var/namaed/chroot/etc/named.○○○.com.zone.wan /etc/named.○○○.com.zone.wan
できたら、念のため、/etc/ディレクトリへ移動して、シンボリックリンクが正しく貼れたか確認。
[root@server]# cd /etc/ →/etc/ディレクトリへ移動。
[root@server]# ls -la →ディレクトリ内のファイルの一覧を表示。
ここで、
・/var/named/chroot/etc/named.conf
・/var/named/chroot/etc/named.○○○.com.zone
・/var/namaed/chroot/etc/named.○○○.com.zone.wan
の3ファイルは、いずれも所有者がルートになっているが、DNSサーバによって使用されるファイルなので、所有グループが、「named」でなければ、DNSサーバが起動できない。
はい、またもダダハマり。
[root@server]# chown named:named /var/named/chroot/etc/named.conf
または
[root@server]# chown root:named /var/named/chroot/etc/named.conf
として、所有グループを「named」に変える。所有ユーザはrootでもnamedでも多分OK。(一応namedで動作確認した。)
ここまでできたら、BINDを起動します。
最後に再起動することになるけど、ここまでの設定で、きちんとBINDが起動できる状態になっているか、どこか間違っていないか確認しておくほうが良いので、一旦起動確認。
[root@server]# service named start
再起動の起動オプションのおまじないも忘れずにね!
[root@server]# chkconfig named on
[root@server]# chkconfig –list named
5)さて、ここで、重要な作業が2つ残ってる
ドメインのレジストラのサービス画面で、
・利用するネームサーバの変更登録。
デフォルトは多分レジストラのDNSになってるので、これを、
→自前で立てたDNSサーバ(プライマリDNS)
→ドメインサービス会社等のDNSサーバ(セカンダリDNS)
へ変更する。
・自前で立てたDNSサーバをレジストラに登録してもらう。
→DNSサーバのホスト登録(お名前.comの場合、管理メニューの真ん中くらいの「ホスト登録・変更・削除」メニューからns1.○○○.comをVPSのIPアドレスへ登録。
DNSは通常ドメインに対して、プライマリDNSとセカンダリDNSの2つをヒモ付けて登録します。(前述の通り3つでも4つでもかまわないけど)
自前でDNSサーバを立てたということは、プライマリDNSが自前サーバとなり、セカンダリをどこかで用意しなければなりません。2つ目は別のホストであることが望ましく(1つにしたり、1台のサーバ機で2つのDNSを動かしたりすると、それが落ちたら終わりですよね;)自分で2台のDNSサーバを用意できるならいいのですが、たいていは2台目に困るはず。。。
そこで、ドメインのレジストラのDNSを使用したり、あと、無料のセカンダリサーバレンタルサービスなどもあります。
https://www.xname.org/ などのサービスもありますが、今回はお名前.comでセカンダリが使用できるので、それを使用します。
ドメイン管理画面での設定は省略。
ZONEファイルの変更など、サーバ側の設定とセカンダリのレコード登録のみ備忘しとく。
[root@server]# nano /var/named/chroot/etc/named.○○○.com.zone.wan
「{ };」の間、allow-query{ };の後ろに、
allow-transfer { ***.***.***.** }; →セカンダリサーバのIPアドレスを入れる。
[root@server]# nano /var/named/chroot/var/named/○○○.com.db.wan
IN NS 2nd.dns.com. →ns1.○○○.com. の次の行に、NSレコードとしてセカンダリのドメイン名を記入。
ここで、NAMEDの再起動。
[root@server]# service named restart
最後に、DNSの正引きと逆引きできてるか確認しとく。
しばらくしないと、有効にならないので、ちょっと待つ。
[root@server]# dig ○○○.com →ドメインで正引き
[root@server]# ***.***.***.** →IPアドレスから逆引き
※念のため、公式なドメイン(本LINUX協会など)も引いてみる
dig→jla.linux.or.jp
dig -x→210.171.226.43
これでANSWERの項目に、自分のサーバのドメインまたはIPが出てくれば、OK。
反映されてなければ、もう少し待つ。1日以上おかしな場合は、どっか設定が間違ってると思われる。
仕上げに、DNSの設定問題がないかとか、ちゃんと浸透して行ってるかをチェックしておく。
intoDNS(http://www.intodns.com/)
ここでホスト名を入れると、様々なDNSの値をチェックしてくれます。
参考にさせていただきました。
(DNSサーバ設定について)
http://sakura.off-soft.net/centos/bind_install.html
4.Serversman@VPS DNSサーバー構築(BIND)
http://kajuhome.com/bind.shtml
(DNSサーバ設定後のセカンダリDNSの設定とかレジストラへ登録など)
http://sakura.off-soft.net/centos/onamae_dns.html
*********************************