DNS(bind9) の設定 (setup to dns and rerational server in CentOS 6.2)

writen in utf-8 s.kato since '12/03/25 last update'14/05/04

設定の流れ

bindはデーモンとして動作させるのが一般的です。セキュリティなどの面でinetd系でも動かせなくもないですが、オーバーヘッドを考えるとあまり賢明ではないでしょう。

設定は以下の流れを繰り返します。

  1. 構成ファイル(named.confなど)を編集
  2. レコードファイルを編集または作成
  3. namedを再起動
  4. digなどを利用して動作確認

ゾーンレコードファイルを編集した場合はシリアルNOを更新すること。
グローバルでIPv6を利用しない場合はv6に聴きに行かないようにしたほうが良い。
ログは致命的なエラーやリレーに悪用されるのを避けるためにも是非出力してください。
named のデバッグモード起動、rndc のための rndc.key や dig , nslookup を追記しました。

ファイル構成 (relational files)

CentOS 6.2のパッケージのDNSに関連するファイル構成です。

bind9のサンプル (sample)

以外と知られて無いのですが、インストールするとサンプルファイルも一緒にインストールされます。

/usr/share/doc/bind-9.7.3/sample/

デフォルトのファイル (default file)

/etc/named.conf
/etc/named.iscdlv.key
/etc/named.rfc1912.zones
/etc/named.root.key

/etc/sysconfig/named
/etc/rndc.key				グループがrootになっているのでnamedに変える必要あり

/var/named/named.ca			root
/var/named/named.localhost		local
/var/named/named.loopback		loopback = local ?

/etc/sysconfig/named

他のディストリビューションではファイルの構成が違うので注意してください。
Debian 7.1 の場合は/etc/bindの下で、グループ名もbindになっています。

追加したファイル (append file)

Graph.Kの場合です。ディレクトリを切りなおしました。メンテナンスを楽にするためです。
それぞれのゾーンレコードのためのゾーンファイルです。ゾーンファイルは後ろにzoneとつけたり、datと付けたりと色々な流儀があるみたいですが、どうせnamed.confなどのファイルの中で指定するので、思いっきりゾーン名のままのファイル名にしています。このあたりは好みです。

/var/named/graphk/graphk.co.jp
/var/named/graphk/24.xxxx.xxxx.xxx-in-addr.arpa
/var/named/graphk/graphk.co.jp.local
/var/named/graphk/xxx.168.192.in-addr.arpa

構成ファイル (named.conf)

bindはどのバージョンからかviewを利用できるようになりました。externalとinternalを分けてレコードを書けるので、とても便利です。文法はコメントを参照してください。すみません。

Graph.Kのための/etc/named.conf

// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
// See /usr/share/doc/bind*/sample/ for example named configuration files.

// options set
acl localnet {			//localnetを定義
        192.168.1.0/24;
        127.0.0.1;
};

acl SERVERS {			//SERVERを定義
        127.0.0.1;		//ほんとは不要
        192.168.xxx.xxx;//dnsサーバのローカルアドレス。ローカルで利用するための定義。
        203.141.xxx.xxx;//aspのdnsサーバ。これもほんとは要らないが、、。
};

/* how to disable dns listen on ipv6 * IPv6をディセーブルにするためのやり方のメモ
 /etc/name.conf
        listen-on-v6            { none; };
 /etc/sysconfig/named
        OPTIONS="-4"
*/

options {
        listen-on port 53       { any;  };      // 127.0.0.1; };
        listen-on-v6            { none; };      // append for disable v6
//      listen-on-v6 port 53    { ::1;  };      // remove for disable v6
        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";
        allow-query             { any; };       // localhostから変更
        allow-query-cache       { localnet; };  // append
        allow-transfer          { SERVERS; };   // append
        forwarders              { 203.141.xxx.xxx; };    // append
        recursion               yes;

        /* Path to ISC DLV key */
//      bindkeys-file           "/etc/named.iscdlv.key";
};

logging {
        channel default_debug {
                file            "data/named.run";
                severity        dynamic;
        };
};

//内部向けです。内部からは外のドメイン全部引けるようにしてあります。
view "internal" {
        match-clients   { localnet; };
        recursion       yes;

        zone "." IN {
                type    hint;
                file    "named.ca";	//rootドメインの定義ファイル。内部用です。
        };

        zone "graphk.co.jp" {
                type    master;
                file    "graphk/graphk.co.jp.local";//ローカルのレコード定義ファイル。
        };

        zone "1.168.192.in-addr.arpa" {
                type    master;
                file    "graphk/1.168.192.in-addr.arpa";//ローカルの逆引き定義ファイル。
        };

        //include "/etc/named.rfc1912.zones";	//意味不明なので、コメントアウト。笑

};

//外部向です。最低限度しか定義してません。外部から汎用dnsサーバとして利用できません。
//dnsのリレーサーバとして悪用されるのを防止するためです。
view "external" {		
        match-clients    { any; };
        recursion       no;			//外部向けには悪用防止で再呼び出しを禁止。

        zone "graphk.co.jp" {
                type    master;
                file    "graphk/graphk.co.jp";
        };
        // reverce
        zone "24.224.114.221.in-addr.arpa" { //この定義はプロバイダとの契約形態で無意味。
                type    master;
                file    "graphk/xxx.xxx.114.221.in-addr.arpa";
        };
};

ファイル中の日本語コメントはWebに上げる際に追加しました。普段は怪しいですが、英文でしかコメント書いてません。外部向けは必要最低限のレコードしか定義してません。内部向けはデフォルトで利用するためにルートレコードをインクリュードしてます。このあたりはあまり解説してるサイトがないようです。

レコードファイル

書式

<name>			IN	A	<ipv4 address>
<name>			IN	AAAA	<ipv6 address>

<rv_ipaddress>.in-addr.arpa.	IN	PTR <server name>

<domain>		IN	MX	<prefenece> <server name>

<alias domain name>	IN	CNAME	<domain name>

NSやMXで指定されるサーバはCNAMEで指定してはいけない。

alias domain name: www.graphke.co.jpなどドメイン含めたサーバ名。
domain name: 	graphk.co.jpのようなドメイン。
rv_ipaddress: 	192.168.1.192なら192.1.168.192のように逆に書いたアドレス。
name: 		ドメインを除いたノード名。
prefenece: 	1~?の数字。小さい数字が優先される。
server name: 	smtp.graphk.co.jpのようなドメインを含めたサーバ名。

Graph.Kのための外部向けレコードファイル

whois,jwhoisの内容も参照しながら見てください。

$TTL 3600
@               IN      SOA     dns.graphk.co.jp. root.dns (
                        120322403       ; serial
                        28800           ; refresh 8H    900  14M
                        7200            ; retry   2H    900  14M
                        604800          ; expire  7D 1W 8640 2.4H
                        3600            ; ttl     1H    3600 1H
                        )

@               IN      A       221.114.xxx.xxx
                IN      NS      dns.graphk.co.jp.       ;1st
                IN      NS      mars.kcom.ne.jp.        ;2nd

                IN      MX      1 smtp

dns             IN      A       221.114.xxx.xxx          ; primary dns

smtp            IN      A       221.114.xxx.xxx
www             IN      A       221.114.xxx.xxx
ftp             IN      A       221.114.xxx.xxx

IPv6の無効化

デフォルトでIPv6が有効になっています。このままではログを出してるとにエラーが出まくるので、アタックなどのログが見づらくなるのと無駄にディスクを早く潰すだけなので、禁止しました。

/etc/named.conf

listen-on-v6 {none;};

/etc/sysconfig/named

#OPTIONS="-u bind"
OPTIONS="-4"

iptables

デフォルトではポートが閉じられているので外部と通信できるようにする必要があります。
iptablesを無効にするという選択肢もありますが、LAN内部にステップになるようなマシンや、だれかのPCのウイルスが入った場合はダメージが出るので、必要なポートだけ開けるようにした方が無難です。
一部のWebページでは起動時、スクリプトでテーブルを設定するような紹介もありますが、CentOS6.2ではセーブしたファイルを起動時に自動的にロードするようになっています。

/etc/servicesでポートアドレスを確認すること。 なお、--dportで指定するポートアドレスはservicesで登録されてるニーモニックも利用できる。

確認

iptables -L

for dns (domain tcp/udp)

iptables -A INPUT -p udp --dport 53 -j ACCEPT
iptables -A INPUT -p tcp --dport 53 -j ACCEPT
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT

iptablesのフィルタリングデータのセーブ

/etc/init.d/iptables save

確認のための情報 (conferm)

dnsのデバッグログ

IPv6が有効なとき

> /etc/init.c/named restart

shutting down
no longer listening on 127.0.0.1#53
no longer listening on 192.168.1.223#53
exiting
zone SUB24.224.114.221.in-addr.arpa/IN: loaded serial 12032201
zone graphk.co.jp/IN: loaded serial 12032202
managed-keys-zone ./IN: loaded serial 17
running
zone SUB24.224.114.221.in-addr.arpa/IN: sending notifies (serial 12032201)
zone graphk.co.jp/IN: sending notifies (serial 12032202)
error (network unreachable) resolving 'mars.kcom.ne.jp/AAAA/IN': 2001:500:1::803f:235#53
error (network unreachable) resolving 'mars.kcom.ne.jp/AAAA/IN': 2001:dc3::35#53
error (network unreachable) resolving 'mars.kcom.ne.jp/AAAA/IN': 2001:502:ad09::5#53
~
error (network unreachable) resolving 'pri.authdns.ripe.net/AAAA/IN': 2001:dc0:1:0:4777::140#53
error (network unreachable) resolving 'pri.authdns.ripe.net/AAAA/IN': 2001:67c:e0::5#53
error (network unreachable) resolving 'ns3.nic.fr/A/IN': 2001:620::5#53
error (network unreachable) resolving 'tr2.turkrdns.com/A/IN': 2001:503:a83e::2:30#53
^[[B^[[B

IPv4のみのとき

> /etc/init.c/named restart

shutting down
no longer listening on 127.0.0.1#53
no longer listening on 192.168.1.223#53
exiting
zone 24.224.114.221.in-addr.arpa/IN: loaded serial 12032201
zone graphk.co.jp/IN: loaded serial 12032202
managed-keys-zone ./IN: loaded serial 17
zone 24.224.114.221.in-addr.arpa/IN: sending notifies (serial 12032201)
zone graphk.co.jp/IN: sending notifies (serial 12032202)
running

dnsの情報

jwhois (whois) の内容です。 whoisは昔からありましたが、jwhoisはjpnドメインに併せてこの5~6年ぐらいでサービスが始まりました。 オーナーはIIJです。 試験運用だったのですが、ボードメンバーの〇〇〇-comさん持ちで、松〇さん、明〇さんに作業してもらったDBサーバ系のアクセスの改善作業が反映されて本格運用に至っています。

onicos.co.jp (jwhois)

a. [Domain Name]                ONICOS.CO.JP
g. [Organization]               Onicos
l. [Organization Type]          Corporation
m. [Administrative Contact]     SK6053JP
n. [Technical Contact]          SK6053JP
p. [Name Server]                dns1.onicos.co.jp
p. [Name Server]                dns4.dion.ne.jp
s. [Signing Key]
[State]                         Connected (2012/08/31)
[Registered Date]               2001/08/06
[Connected Date]                2001/08/08
[Last Update]                   2011/09/01 01:22:44 (JST)

onicos.com (whois)

   Administrative Contact:
      Onicos,inc                ch8p47jp5xp@networksolutionsprivateregistration.com
      ATTN ONICOS.COM
      care of Network Solutions
      PO Box 459
      Drums, PA 18222
      US
      570-708-8780

   Technical Contact:
      Network Solutions, LLC.           customerservice@networksolutions.com
      13861 Sunrise Valley Drive
      Herndon, VA 20171
      US
      1-888-642-9675 fax: 571-434-4620


   Record expires on 11-Jun-2013.
   Record created on 11-Jun-2002.
   Database last updated on 24-Mar-2012 03:02:44 EDT.

   Domain servers in listed order:

   DNS1.ONICOS.CO.JP
   DNS2.ONICOS.CO.JP

graphk.co.jp (jwhois)

Domain Information:
a. [Domain Name]                GRAPHK.CO.JP
g. [Organization]               Graph K Limited.
l. [Organization Type]          Limited
m. [Administrative Contact]     AT2212JP
n. [Technical Contact]          AY3912JP
p. [Name Server]                dns.graphk.co.jp
p. [Name Server]                mars.kcom.ne.jp
s. [Signing Key]
[State]                         Connected (2012/12/31)
[Registered Date]               2002/12/12
[Connected Date]                2003/12/03
[Last Update]                   2012/01/01 01:32:07 (JST)

確認作業

関連ファイル

Cent OS の場合の各種ファイルは前記してありますが、再度メモ
起動スクリプトは /etc/init.d/named
データベースファイル系 /var/name
設定ファイルは/etc/named*
namd のDB操作のためのコマンドの為のキー /etc/rndc.key

rndc コマンドが動かない場合 ( rndc.key )

rndc で named のdbを操作する場合、/etc/rndc.key に named がアクセスできる必要があります。
インストール後、chown コマンドで、このキーファイルのグループを named に変更しておいてください。
デフォルトではグループがrootユーザになっています。

>chown .named /etc/rndc.key

namedのデバッグモード

named のデバッグモードは-gオプションを付けて起動します。

/usr/sbin/name -u named -c /etc/namd.conf -g

digで確認

ローカルと外部からサーバを指定してdigコマンドを実行し、設定したレコードを確認します。 メールを使っている場合は mx フィールドを必ず確認してください。

> dig @server server.domain
> dig @server domein mx

graphk.co.jpの場合

> dig @server www.graphk.co.jp
> dig @server graphk.co.jp mx 

nslookupで確認

nslookupは Linux と Windows で微妙にオプションが異なります。利用する場合は注意してください。インタラクティブモードではわりと同じ操作ができます。
digと同じで設定したサーバを指定して設定したレコードを確認します。mxフィールドなどの細かな設定の確認の仕方はヘルプなどをご確認ください。

*対話モード
> nslookup
> server <server>
> <terget>;

*対話モードをサーバを指定して起動
> nslookup - <server>

参考URL

以下は確認してないようで、注意が必要です。