CentOS 6/bind(内向け用)




※作成中につきご注意ください

前書き

ここに記載している内容は 内向けのDNSサーバー の構築についてです。
外向けの構築ではありませんので注意してください。

LANからドメイン名でサーバーにアクセスするためには 通常 PCの hostsファイル に記述してアクセスするなどひと工夫が必要でした。
例:

Everything is expanded.Everything is shortened.
  1
  2
  3
  4
 
 
 
 
192.168.1.2    example.com
192.168.1.2    www.example.com
192.168.1.2    mail.example.com
192.168.1.2    blog.example.com

それを解決するためLAN内用の 内向けDNSサーバー を構築します。


bindのインストール

DNSサービスを提供するパッケージ bind のインストールを行います。
同時に bind-chroot もインストールします。

# yum -y install bind bind-chroot


CentOS6で提供されている BIND は bind-9.7系 になり、DNSSEC に対応したバージョンとなります。


設定ファイルの編集

bind-chroot用設定ファイルコピー

bind-chroot を使用すると各設定ファイルの PATH が /var/named/chroot 配下に変更になります。
そのため各ファイルをコピーする必要があります。
下記の sh プログラムで一括して処理します。

# vi bind-chroot-admin

下記を入力します。

Everything is expanded.Everything is shortened.
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
-
!
-
!
 
 
-
!
 
 
-
!
 
 
-
-
-
-
|
|
!
-
-
|
|
|
!
!
|
|
|
|
|
|
|
#!/bin/sh
 
# bind-chroot install check
rpm -q bind-chroot > /dev/null 2>&1
[ $? -ne 0 ] && echo bind-chroot not install && exit 1
 
# bind-chroot enabled
sed -i '/^ROOTDIR=/d' /etc/sysconfig/named
echo ROOTDIR=/var/named/chroot >> /etc/sysconfig/named
 
# file copy
filelist=`mktemp`
rpm -ql bind|grep ^/etc >> ${filelist}
rpm -ql bind|grep ^/var >> ${filelist}
for file in `cat ${filelist}`
do
  # directory make
  if [ -d ${file} ]; then
      DIRNAME=/var/named/chroot${file}
      [ ! -d ${DIRNAME} ] && mkdir -p ${DIRNAME}
  fi
  # file copy
  if [ -f ${file} ]; then
      DIRNAME=/var/named/chroot`dirname ${file}`
      [ ! -d ${DIRNAME} ] && mkdir -p ${DIRNAME}
      /bin/cp -a ${file} ${DIRNAME}
  fi
done
rm -f ${filelist}
 
chown named:named /var/named/chroot/var/named/data
chmod 770 /var/named/chroot/var/named/data
chown named:named /var/named/chroot/var/named/dynamic
 
exit

bind-chroot-adminスクリプト実行

# sh bind-chroot-admin


BIND設定(named.conf)の編集

デフォルト状態の設定ファイルを退避します。

# cp /var/named/chroot/etc/named.conf /var/named/chroot/etc/named.conf.rpmdefault

named.conf を開いて編集します。

# vi /var/named/chroot/etc/named.conf

修正個所が細かくあるため全部を記載します。
照らし合わせて漏れの内容に修正してください。
例としてLANのアドレスが 192.168.1.* で記載しています。自分の環境に合わせて修正してください。
また使用するドメインを example.com で記載しています。

Everything is expanded.Everything is shortened.
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
options {
    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";
    allow-query    { localhost; localnets; };
    recursion yes;
 
    dnssec-enable yes;
    dnssec-validation yes;
    dnssec-lookaside auto;
 
    /* Path to ISC DLV key */
    bindkeys-file "/etc/named.iscdlv.key";
    forwarders{
        8.8.8.8;
        8.8.4.4;
    };
};
 
logging {
    channel default_debug {
        file "data/named.run";
        severity dynamic;
    };
    category lame-servers { null; };
};
 
view "internal" {
    match-clients { localnets; };
    match-destinations { localnets; };
 
    zone "." IN {
        type hint;
        file "named.ca";
    };
 
    zone "1.168.192.in-addr.arpa" {
        type master;
        file "1.168.192.in-addr.arpa.db";
    };
 
    include "/etc/named.rfc1912.zones";
    include "/etc/named.example.com.zone";
};
  • 17・18行目について
    参照するDNSサーバーのIPアドレスを記載します。
    ここでは Google の Public DNSサービス のIPアドレスを記載しています。
    プロバイダから提供されているDNSサーバーのIPアドレスなどを入力してください。


ゾーン定義ファイルの作成

例として使用するドメインを example.com で記載しています。

# vi /var/named/chroot/etc/named.example.com.zone
Everything is expanded.Everything is shortened.
  1
  2
  3
  4
 
 
 
 
zone "example.com" {
        type master;
        file "example.com.db";
};


正引きゾーンデータベースファイルの作成

例として使用するドメインを example.com で記載しています。

# vi /var/named/chroot/var/named/example.com.db
Everything is expanded.Everything is shortened.
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 
 
 
 
 
 
 
 
 
 
 
$TTL    86400
@       IN      SOA     example.com.  root.example.com.(
                                      2012040501 ; Serial
                                      28800      ; Refresh
                                      14400      ; Retry
                                      3600000    ; Expire
                                      86400 )    ; Minimum
        IN NS    example.com.
        IN MX 10 example.com.
@       IN A     192.168.1.2
*       IN A     192.168.1.2

各行の修正個所の説明

  • 2行目
    ドメイン名の最後に . (ドット)を追記するのを忘れないでください。
  • 3行目
    Serial の値は 年月日+2桁の番号です。
    修正を加えるたびに更新してください。
  • 8行目(NSレコード)
    メールサーバーの記述です。
    ドメイン名の最後に . (ドット)を追記するのを忘れないでください。
  • 9行目(MXレコード)
    メールサーバーの記述です。
    メールサービスを構築していない場合は記載不要です。
    ドメイン名の最後に . (ドット)を追記するのを忘れないでください。
  • 10・11行目(Aレコード)
    サーバーのIPアドレスを指定してください。
    ここでは例として 192.168.1.2 を記載しています。


逆引きゾーンデータベースファイルの作成

例としてLANのアドレスが 192.168.1.* で記載しています。
例として使用するドメインを example.com で記載しています。
自分の環境に合わせて修正してください。

# vi /var/named/chroot/var/named/1.168.192.in-addr.arpa.db
Everything is expanded.Everything is shortened.
  1
  2
  3
  4
  5
  6
  7
  8
  9
 
 
 
 
 
 
 
 
 
$TTL    86400
@       IN      SOA     example.com.  root.example.com.(
                                      2012040501 ; Serial
                                      28800      ; Refresh
                                      14400      ; Retry
                                      3600000    ; Expire
                                      86400 )    ; Minimum
              IN      NS    example.com.
2             IN      PTR   example.com.

各行の修正個所の説明

  • 2行目
    ドメイン名の最後に . (ドット)を追記するのを忘れないでください。
  • 3行目
    Serial の値は 年月日+2桁の番号です。
    修正を加えるたびに更新してください。
  • 8行目(NSレコード)
    メールサーバーの記述です。
    ドメイン名の最後に . (ドット)を追記するのを忘れないでください。
  • 9行目(PTRレコード)
    サブドメインの記述です。
    サーバーのIPアドレスを指定してください。
    ここでは例として 192.168.1.2 の下位ブロックの 2 を記載しています。
    ドメイン名の最後に . (ドット)を追記するのを忘れないでください。


DNS問い合わせ先変更

サーバーのネットワーク設定にある DNSサーバー 情報を変更します。

# sed -i 's/DNS1=.*/DNS1=127.0.0.1/g' /etc/sysconfig/network-scripts/ifcfg-eth0

DNSサーバー変更反映

# /etc/rc.d/init.d/network restart


その他の修正

  • IPv6の無効化
    # echo OPTIONS="-4" >> /etc/sysconfig/named

  • ルートゾーン(named.ca)最新化
    定期的に変更がないか確認する スクリプトも公開されています。
    検索サイトで必要に応じて処理できるように組み込んでください。
    # dig . ns @198.41.0.4 > /var/named/chroot/var/named/named.ca


BIND自動起動設定

# chkconfig named on
# chkconfig --list named
named           0:off   1:off   2:on    3:on    4:on    5:on    6:off


BIND起動

# /etc/rc.d/init.d/named start
namedを起動中:                                             [  OK  ]

/var/log/message で エラーに関する内容の記述がないか確認します。


PCのDNSサーバー情報設定変更

LAN に Windows などの PC を接続している場合、参照する DNSサーバー を変更します。
インターネットプロトコル(TCP/IP) のプロパティーを開いて、優先DNSサーバー を サーバーのIPアドレスを入力してください。

&ref(): File not found: "XP_DNS設定変更画面.png" at page "CentOS 6/bind(内向け用)";
例:設定画面(Windwos XPの場合)


動作確認

  • サーバー上から正引きの確認
    # dig example.com
    ; <<>> DiG 9.7.4-P1-RedHat-9.7.4-2.P1.fc14 <<>> example.com
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 48104
    ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0
    
    ;; QUESTION SECTION:
    ;example.com.                   IN      A
    
    ;; ANSWER SECTION:
    example.com.            86400   IN      A       192.168.1.2
    
    ;; AUTHORITY SECTION:
    example.com.            86400   IN      NS      example.com.
    
    ;; Query time: 0 msec
    ;; SERVER: 127.0.0.1#53(127.0.0.1)
    ;; WHEN: Fri Apr  6 15:39:37 2012
    ;; MSG SIZE  rcvd: 70
  • サーバー上から逆引きの確認
    # dig -x 192.168.1.2
    ; <<>> DiG 9.7.4-P1-RedHat-9.7.4-2.P1.fc14 <<>> -x 192.168.1.2
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 39616
    ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
    
    ;; QUESTION SECTION:
    ;2.1.168.192.in-addr.arpa.      IN      PTR
    
    ;; ANSWER SECTION:
    2.1.168.192.in-addr.arpa. 86400 IN      PTR     example.com.
    
    ;; AUTHORITY SECTION:
    1.168.192.in-addr.arpa.   86400 IN      NS      example.com.
    
    ;; ADDITIONAL SECTION:
    example.com.              86400 IN      A       192.168.1.2
    
    ;; Query time: 0 msec
    ;; SERVER: 127.0.0.1#53(127.0.0.1)
    ;; WHEN: Fri Apr  6 15:42:33 2012
    ;; MSG SIZE  rcvd: 110
  • サーバー上から外部ドメインの正引き確認
    # dig google.co.jp
    ; <<>> DiG 9.7.4-P1-RedHat-9.7.4-2.P1.fc14 <<>> google.co.jp
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 18643
    ;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 13, ADDITIONAL: 0
    
    ;; QUESTION SECTION:
    ;google.co.jp.                  IN      A
    
    ;; ANSWER SECTION:
    google.co.jp.           299     IN      A       74.125.235.95
    google.co.jp.           299     IN      A       74.125.235.87
    google.co.jp.           299     IN      A       74.125.235.88
    
    ;; AUTHORITY SECTION:
    .                       28829   IN      NS      f.root-servers.net.
    .                       28829   IN      NS      k.root-servers.net.
    .                       28829   IN      NS      j.root-servers.net.
    .                       28829   IN      NS      g.root-servers.net.
    .                       28829   IN      NS      l.root-servers.net.
    .                       28829   IN      NS      d.root-servers.net.
    .                       28829   IN      NS      c.root-servers.net.
    .                       28829   IN      NS      b.root-servers.net.
    .                       28829   IN      NS      h.root-servers.net.
    .                       28829   IN      NS      e.root-servers.net.
    .                       28829   IN      NS      a.root-servers.net.
    .                       28829   IN      NS      m.root-servers.net.
    .                       28829   IN      NS      i.root-servers.net.
    
    ;; Query time: 91 msec
    ;; SERVER: 127.0.0.1#53(127.0.0.1)
    ;; WHEN: Fri Apr  6 15:44:55 2012
    ;; MSG SIZE  rcvd: 289
  • PCからブラウザで確認
    ブラウザでサーバードメインのURLを入力してWebページが表示されるか確認します。
    同様に外部サイト(例:googleなど)を入力して表示されることを確認します。


エラーログについて

エラーログに記録される内容の対処方法をまとめます。

  • dlv.isc.org SOA: no valid signature found
    dlv.isc.org SOA: got insecure response; parent indicates it should be secure
    • 原因
      named.conf で指定した forwarders のDNSサーバーが dnssec に対応していない。
    • 対策
      dig コマンドを使って forwarders に指定したDNSサーバーが ANSWER SECTION に RRSIG のレコードが含まれていることを確認します。
      Google の Public DNSサービスなどが RRSIG に対応しています。
      例:Google Public DNSサービスが対応していることを確認します。
      # dig +dnssec dlv.isc.org @8.8.8.8
      
      ; <<>> DiG 9.3.6-P1-RedHat-9.3.6-20.P1.el5 <<>> +dnssec dlv.isc.org @8.8.8.8
      ;; global options:  printcmd
      ;; Got answer:
      ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 56613
      ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
      
      ;; OPT PSEUDOSECTION:
      ; EDNS: version: 0, flags: do; udp: 512
      ;; QUESTION SECTION:
      ;dlv.isc.org.                   IN      A
      
      ;; ANSWER SECTION:
      dlv.isc.org.            299     IN      A       149.20.16.8
      dlv.isc.org.            299     IN      RRSIG   A 5 3 300 20120506010004 20120406010004 64263 dlv.isc.org. GaD5Et2B … 略 … 2TT3A7eU5xrb4 /JM=
      
      ;; Query time: 267 msec
      ;; SERVER: 8.8.8.8#53(8.8.8.8)
      ;; WHEN: Fri Apr  6 13:49:09 2012
      ;; MSG SIZE  rcvd: 227
  • open: /etc/rndc.key: file not found loading configuration: file not found
    • 原因: named.conf に include指定があるが rndc.key ファイル自体が見つからない。
    • 対策: rndc.key の作成を作成します。
      # rndc-confgen -a
      wrote key file "/etc/rndc.key"
      # mv /etc/rndc.key /var/named/chroot/etc/
      # chown named:named /var/named/chroot/etc/rndc.key
  • the working directory is not writable
    • 原因: named.conf の directory に設定したディレクトリーに書き込み許可または権限がないため。
    • 対策: named ユーザまたは named グループが書き込めるようにパーミッション・権限を修正します。
      例として named グループが書き込めるように権限を変更
      # chmod g+w /var/named/chroot/var/named




Last-modified: 2015-04-23 (木) 17:51:03 (1329d)