DNSサーバー構築(BIND)

最終更新日:2010.01.23
本サイトは「CentOSで自宅サーバー構築」サイトの記述を引用して作成

■概要

DNSサーバー(BIND)はufuso.jpというドメイン名からIPアドレスを返したり、IPアドレスからドメイン名を返すサーバー。

ここでは、内部でサーバーにアクセスするときにIPアドレスではなく、ufuso.jpでアクセスできるようにする。⇒内部向けDNSサーバー

外部向けDNSサーバーは設定しない。(Bフレッツ光プレミアムのルーター側に設定しているため不要)

※非固定IPアドレス環境の場合を例に説明するので無料ドメイン又は有料ドメインを取得済であること

※ufuso.jpは当サイトの例なので、各自で置き換えること!



■BINDインストール


RPMforgeリポジトリ導入(RPMforge)を参照してRPMforgeリポジトリを導入する

[root@ufuso ~]# yum -y --enablerepo=remi,epel,rpmforge install bind bind-chroot caching-nameserver

 ← bind,bind-chroot, caching-nameserverインストール
Installed:
bind.x86_64 30:9.3.6-4.P1.el5_4.2
bind-chroot.x86_64 30:9.3.6-4.P1.el5_4.2
caching-nameserver.x86_64 30:9.3.6-4.P1.el5_4.2

Complete!



■BIND設定

(1)BIND設定


[root@ufuso ~]# cp /var/named/chroot/etc/named.caching-nameserver.conf /var/named/chroot/etc/named.conf
 ← BIND設定ファイルコピー

[root@ufuso ~]# chgrp named /var/named/chroot/etc/named.conf ← BIND設定ファイル所有グループ変更

[root@ufuso ~]# vi /var/named/chroot/etc/named.conf ← BIND設定ファイル編集
options {
#listen-on port 53 { 127.0.0.1; }; ← 行頭に#を追加してコメントアウト

#listen-on-v6 port 53 { ::1; }; ← 行頭に#を追加してコメントアウト
version “unknown”; ← bindのバージョン情報の非表示化
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{
192.168.1.1; ← ルーター経由接続環境の場合はルーターのIPアドレスを指定
};
追加(ここまで)
};

view localhost_resolver {
match-clients { localhost; };
match-destinations { localhost; };
recursion yes;
include “/etc/named.rfc1912.zones”;
include “/etc/named.ufuso.jp.zone”; ← 追加
};

最終行へ追加(ここから)

view “internal” {
match-clients { localnets; };
match-destinations { localnets; };
recursion yes;
include “/etc/named.rfc1912.zones”;
include “/etc/named.ufuso.jp.zone”;
};
最終行へ追加(ここまで)

[root@ufuso ~]# vi /var/named/chroot/etc/named.ufuso.jp.zone ← ufuso.jpの内部向けゾーン定義ファイル作成
zone “ufuso.jp” {
type master;
file “ufuso.jp.db”;
};
zone “1.168.192.in-addr.arpa” {
type master;
file “1.168.192.in-addr.arpa.db”;
};

※forwardersには、このDNSサーバーのキャッシュで名前解決ができなかった場合に問合せにいくDNSサーバー(ルーターまたは、プロバイダから通知されたDNSサーバー)を指定する


(2)ルートゾーン最新化

ルートゾーンは世界に13台しかないトップレベルドメインを管理するDNSサーバーのIPアドレスを管理しているファイルで、めったに更新されることはないが、念のため最新化しておく。

[root@ufuso ~]# dig . ns @198.41.0.4 > /var/named/chroot/var/named/named.ca ← ルートゾーン(named.ca)最新化



(3)ルートゾーン自動更新

1ヶ月に一度、ルートゾーンが最新かチェックし、更新されていればルートゾーンの最新化及び、BINDの再起動を自動的に行うようにする。

※ルートゾーンが更新されていた場合のみ、新旧ルートゾーン情報及び、新旧ルートゾーンの差分情報をroot宛にメールする

[root@ufuso ~]# vi named.root_update ← ルートゾーン最新化スクリプト作成

#!/bin/bash

new=`mktemp`
errors=`mktemp`

dig . ns @198.41.0.4 > $new 2> $errors

if [ $? -eq 0 ]; then
sort_new=`mktemp`
sort_old=`mktemp`
diff_out=`mktemp`
sort $new > $sort_new
sort /var/named/chroot/var/named/named.ca > $sort_old
diff –ignore-matching-lines=^\; $sort_new $sort_old > $diff_out
if [ $? -ne 0 ]; then
(
echo ‘——————– old named.root ——————–’
cat /var/named/chroot/var/named/named.ca
echo
echo ‘——————– new named.root ——————–’
cat $new
echo ‘———————- difference ———————-’
cat $diff_out
) | mail -s ‘named.root updated’ root
cp -f $new /var/named/chroot/var/named/named.ca
chown named. /var/named/chroot/var/named/named.ca
chmod 644 /var/named/chroot/var/named/named.ca
/etc/rc.d/init.d/named restart > /dev/null
fi
rm -f $sort_new $sort_old $diff_out
else
cat $errors | mail -s ‘named.root update check error’ root
fi
rm -f $new $errors

[root@ufuso ~]# chmod 700 named.root_update ← ルートゾーン最新化スクリプトへ実行権限付加

[root@ufuso ~]# mv named.root_update /etc/cron.monthly/ ← ルートゾーン最新化スクリプトを毎月自動実行されるディレクトリへ移動



(4)内部向け正引きゾーンデータベース(ドメイン名⇒IPアドレス)作成

[root@ufuso ~]# vi /var/named/chroot/var/named/ufuso.jp.db ← 正引きゾーンデータベース作成
$TTL 86400
@ IN SOA ufuso.jp. root.ufuso.jp.(
2004031901 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN NS ufuso.jp.
IN MX 10 ufuso.jp.
@ IN A 192.168.1.3 ← サーバーのプライベートIPアドレスを指定(ufuso.jpm用)
* IN A 192.168.1.3 ← サーバーのプライベートIPアドレスを指定(*.ufuso.jp用)



(5)内部向け逆引きゾーンデータベース(IPアドレス⇒ドメイン名)作成

[root@ufuso ~]# vi /var/named/chroot/var/named/1.168.192.in-addr.arpa.db ← 逆引きゾーンデータベース作成
$TTL 86400
@ IN SOA ufuso.jp. root.ufuso.jp.(
2004031901 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN NS ufuso.jp.
3 IN PTR ufuso.jp. ← サーバーIPアドレス最下位部(192.168.1.3)とドメイン名を指定



■BIND起動

(1)BIND起動

[root@ufuso ~]# /etc/rc.d/init.d/named start ← BIND起動
namedを起動中: [ OK ]

[root@ufuso ~]# chkconfig named on ← BIND自動起動設定

[root@ufuso ~]# chkconfig –list named ← BIND自動起動設定確認

named 0:off 1:off 2:on 3:on 4:on 5:on 6:off ← ランレベル2〜5のonを確認



(2)UDPの53番ポートとTCPの53番ポートをオープンする

ルーターの設定で、UDPの53番ポートとTCPの53番ポートへのアクセスをサーバーに転送するようにする




■問合せ先DNSサーバーをLinuxサーバーに変更(ルーター経由接続環境の場合)



■問合せ先DNSサーバーをLinuxサーバーに変更

(1)サーバー自身の問合せ先DNSサーバーを自分自身に変更

[root@ufuso ~]# echo “nameserver 127.0.0.1″ > /etc/resolv.conf ← Linuxサーバー自身を問合せ先DNSサーバーとする


(2)問合せ先DNSサーバーをLinuxサーバーに変更

ルーターのDHCP設定でDNSサーバーのIPアドレスをLinuxサーバーのIPアドレスに変更する


(3)問合せ先DNSサーバー変更反映

Linuxサーバー⇒クライアントの順に再起動し、問合せ先DNSサーバーの変更を反映させる





(3)クライアント側の問合せ先DNSサーバー変更反映

クライアントを再起動し、問合せ先DNSサーバーの変更を反映させる



■BIND確認

(1)BIND確認(クライアントがWindowsの場合)

C:>nslookup ← nslookup起動
Default Server: ufuso.jp
Address: 192.168.1.3

> ufuso.jp ← Linuxサーバーの正引きテスト

Server: ufuso.jp
Address: 192.168.1.3

Name: ufuso.jp
Address: 192.168.1.3 ← IPアドレスが返ってきた

> 192.168.1.3 ← Linuxサーバーの逆引きテスト
Server: ufuso.jp
Address: 192.168.1.3

Name: ufuso.jp ← ドメイン名が返ってきた
Address: 192.168.1.3

> exit ← nslookup停止

C:>



(2)BIND確認(クライアントがLinuxの場合)

[root@ufuso ~]# dig ufuso.jp ← Linuxサーバーの正引きテスト

; <> DiG 9.2.3 <> ufuso.jp
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 59712
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;ufuso.jp. IN A

;; ANSWER SECTION:
ufuso.jp. 86400 IN A 192.168.1.3 ← IPアドレスが返ってきた

;; AUTHORITY SECTION:
ufuso.jp. 86400 IN NS ufuso.jp.

;; Query time: 8 msec
;; SERVER: 192.168.1.3#53(192.168.1.3)
;; WHEN: Mon Oct 4 17:39:31 2004
;; MSG SIZE rcvd: 63

[root@ufuso ~]# dig -x 192.168.1.3 ← Linuxサーバーの逆引きテスト

; <> DiG 9.2.3 <> -x 192.168.1.3
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 14938
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1

;; QUESTION SECTION:
;1.1.168.192.in-addr.arpa. IN PTR

;; ANSWER SECTION:
1.1.168.192.in-addr.arpa. 86400 IN PTR ufuso.jp. ← ドメイン名が返ってきた

;; AUTHORITY SECTION:
1.168.192.in-addr.arpa. 86400 IN NS ufuso.jp.

;; ADDITIONAL SECTION:
centossrv.com. 86400 IN A 192.168.1.3

;; Query time: 8 msec
;; SERVER: 192.168.1.3#53(192.168.1.3)
;; WHEN: Mon Oct 4 17:39:39 2004
;; MSG SIZE rcvd: 101


[root@ufuso ~]# /etc/rc.d/init.d/named reload ← BIND設定反映
named を再読み込み中: [ OK ]




にほんブログ村 IT技術ブログ CentOSへ>>>お役に立ちましたらクリックをお願いいたします。励みになります。
にほんブログ村

にほんブログ村 IT技術ブログへ ← 戦闘モード維持のため、参考になりましたらクリックをお願いします。
にほんブログ村

Leave a comment

Your comment