サーバ構築(3) DNSサーバ(BIND)
独自ドメインを取得してサーバ運用をする場合、当然の事ながらまずはドメインを取得しなければなりません。ドメイン取得を扱っている業者さんはたくさんありますので、どこを利用してもいいんですが、注意すべき点は、ドメイン取得時の情報を自分できちんと管理しておくことと、更新は毎年行う(複数年契約しない)ということです。当方のドメインは 2001年に DOMAIN21 という業者さんで取得し、その後順調に運営していましたが、2006年にこの会社が傾いてしまったようで、別の会社さんに(おそらく強制的に)ドメイン管理業務が引き継がれました。このとき、複数年契約は無効にされた(払い込んだお金は丸損となった)模様です。私は毎年更新していたので特に実害はありませんでした。引き継いだ側もえらい迷惑だったんだろうなと推測しますが、メールの問い合わせ対応に不満を感じたので、そこからさらに別の業者さんにドメインを移管して現在に至っております。
それはさておき、DNS(BIND)の設定ですね。我が家の場合、BINDは外向け(WAN側)には自ドメインyomaigoto.jpのプライマリDNSサーバ(コンテンツサーバ)として、内向け(LAN側)には名前解決用のリゾルバ(キャッシュサーバ)として動かします。なお、DNSの基本的なことについて学ぶには、少し古いドキュメントですがJFのDNS-HOWTOをお勧めします。
ところで、OSのインストール時にパッケージの選択で「DNSサーバ」を選択すると、もれなく bind-chroot パッケージがインストールされます。これ(chroot)はBINDのセキュリティ強化策として用いられる手法で、bind-chroot がインストールされていると、当然のごとくnamed(BIND) がデフォルトで /var/named/chroot/ に chroot された状態で起動するようになります。そもそも「chrootってなに?」って方は各自勉強して頂くとして、何か問題になるのかというと、chroot すると勝手に作られる /var/named/chroot/proc が意外にディスク容量を食うという点です。数百メガ~1ギガ弱に育つこともありまして、インストール時に /var を適当に小さく切っていたりするとパンクする恐れがあるのです。/var が パンクするとログイン不能になるので、これは知っておくべきでしょう。ま、最近はHDDもでかいのであまり神経質になる必要はないですが。そんなこともあり、私はインストール時に「DNSサーバ」は選択から外します。
ということで、まずはインストール。続いてヒントファイルを作成します。ヒントファイルはFTPでも配布されていますが、digコマンドを使って生成する方法が前述のDNS-HOWTOでも紹介されています。
# yum -y install bind # cd /var/named # dig ; <<>> DiG 9.3.3rc2 <<>> ;; global options: printcmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 18112 ;; flags: qr rd ra; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 1 ;; QUESTION SECTION: ;. IN NS ;; ANSWER SECTION: . 819 IN NS J.ROOT-SERVERS.NET. . 819 IN NS K.ROOT-SERVERS.NET. . 819 IN NS L.ROOT-SERVERS.NET. . 819 IN NS M.ROOT-SERVERS.NET. . 819 IN NS A.ROOT-SERVERS.NET. . 819 IN NS B.ROOT-SERVERS.NET. . 819 IN NS C.ROOT-SERVERS.NET. . 819 IN NS D.ROOT-SERVERS.NET. . 819 IN NS E.ROOT-SERVERS.NET. . 819 IN NS F.ROOT-SERVERS.NET. . 819 IN NS G.ROOT-SERVERS.NET. . 819 IN NS H.ROOT-SERVERS.NET. . 819 IN NS I.ROOT-SERVERS.NET. ;; ADDITIONAL SECTION: J.ROOT-SERVERS.NET. 87219 IN A 192.58.128.30 # dig @j.root-servers.net > named.ca |
次に、rndcコマンドを使用するためにkeyの生成を行います。ちなみに、keyはこの項を書くために新たに生成しました。実際のものとは異なります。
■keyの作成 # dnssec-keygen -a HMAC-MD5 -b 512 -n USER rndc Krndc.+157+62374 ○内容の確認 # cat Krndc.+157+62374.private Private-key-format: v1.2 Algorithm: 157 (HMAC_MD5) Key: ITp4ES0MQngctltBr4ColyijX8oyPGT7yF8IoRKCjGoiFGaYJkeQuE mBKI2hugAr0U06SXm51umuDR6+2rQwPA== ■rndc.keyの作成 # vi /etc/rndc.key [/etc/rndc.key] 3c3 < secret "bzsyW0gS0v6QkXEZU2fBlZmwkRsHWEwEJZq6 mVFsmTF5WGVkTCOTCAQpqNT7"; --- > secret "ITp4ES0MQngctltBr4ColyijX8oyPGT7yF8I oRKCjGoiFGaYJkeQuEmBKI2hugAr0U06SXm51umuDR6+2rQwPA=="; |
インストール時、named.confは作成されません。サンプルは /usr/share/doc/bind-9.3.3/sample/etc/named.conf にありますが、今ひとつ美しくないので自分で作ります。viewステートメントを使用し、LAN側のみ再起問い合わせを許可(recursion yes)します。WAN側は再起問い合わせを禁止(recursion no)し、自分が権威を持つゾーン(yomaigoto.jp)への問い合わせのみ返答を返します。
# vi /etc/named.conf
[/etc/named.conf]
include "/etc/rndc.key";
controls {
inet 127.0.0.1 allow { localhost; } keys { rndckey; };
};
acl "local-net" {
127.0.0.1; 192.168.1.0/24;
};
acl "allow-hosts" {
xxx.xxx.xxx.xxx(セカンダリDNSのIPアドレス);
};
options {
directory "/var/named";
allow-transfer { allow-hosts; };
pid-file "/var/run/named/named.pid";
};
logging {
category lame-servers {
null;
};
};
view "local-zone" {
match-clients { local-net; };
allow-query { local-net; };
allow-transfer { local-net; };
recursion yes;
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.rev";
allow-update { none; };
};
zone "1.168.192.in-addr.arpa" IN {
type master;
file "1.168.192.rev";
allow-update { none; };
};
};
view "external" {
match-clients { any; };
allow-query { any; };
allow-transfer { local-net; allow-hosts; };
recursion no;
zone "yomaigoto.jp" IN {
type master;
file "yomaigoto.zone";
allow-update { none; };
};
};
|
ゾーンファイルはこんな感じで。逆引きはとりあえず全部設定しておきます。
[/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.rev]
$TTL 3600
@ IN SOA chibi.yomaigoto.jp. root.chibi.yomaigoto.jp. (
20040103 ; Serial
3600 ; Refresh
900 ; Retry
3600000 ; Expire
3600 ) ; Minimum
IN NS chibi.yomaigoto.jp.
1 IN PTR localhost.yomaigoto.jp.
[/var/named/1.168.192.rev]
$TTL 3600
@ IN SOA chibi.yomaigoto.jp. root.chibi.yomaigoto.jp. (
2007092201 ; Serial
3600 ; Refresh
900 ; Retry
3600000 ; Expire
3600 ) ; Minimum
IN NS chibi.yomaigoto.jp.
1 IN PTR gw.yomaigoto.jp
2 IN PTR dummy2.yomaigoto.jp.
3 IN PTR usi.yomaigoto.jp.
4 IN PTR dummy4.yomaigoto.jp.
5 IN PTR printer.yomaigoto.jp.
6 IN PTR chibi.yomaigoto.jp.
7 IN PTR dummy7.yomaigoto.jp.
8 IN PTR dummy8.yomaigoto.jp.
(中略)
252 IN PTR dummy252.yomaigoto.jp.
253 IN PTR dummy253.yomaigoto.jp.
254 IN PTR dummy254.yomaigoto.jp.
[/var/named/yomaigoto.zone]
$TTL 86400
@ 1D IN SOA chibi.as.wakwak.ne.jp. root.yomaigoto.jp. (
2008022701 ; serial (d. adams)
3H ; refresh
15M ; retry
1W ; expiry
1D ) ; minimum
IN NS chibi.yomaigoto.jp.
IN NS chibi.as.wakwak.ne.jp.
IN NS ns1.granitecanyon.com.
IN MX 10 chibi.yomaigoto.jp.
chibi IN A 61.xx.xx.xx
www IN CNAME chibi
www2 IN CNAME chibi
mail IN CNAME chibi
|
wakwakは固定IPオプションつけると正引き/逆引きの設定を入れてくれるので、メールサーバも安心して運用できます。NSレコードにはwakwakに登録してあるホスト名を書いてあります。あとは自動起動設定しておしまい。
# chkconfig named on # service named start |
DNSサーバ立てるのも結構たいへんですが、自宅サーバのドメイン運用はセカンダリDNSを見つけるのも一苦労ですね。探せばフリーで利用できるDNSサーバもありますので、うちではそれを利用してます。どうやって登録したかは既に忘却しました(をい)。