名前解決を行ってくれる DNS (Domain Name System) サーバーを構築します。
動作していますが、参考程度にとどめこのまま設定しないでください。
目次 |
[root@host3 ~]# yum -y install bind bind-chroot
[root@host3 ~]# vi bind-chroot-admin ← bind-chroot-adminスクリプト作成
#!/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
[root@host3 ~]# sh bind-chroot-admin ← bind-chroot-adminスクリプト実行
[root@host3 ~]# echo 'OPTIONS="-4"' >> /etc/sysconfig/named
← IPv6を使わない場合は設定 ( 使うなら設定しない )
[root@host3 ~]# vi /var/named/chroot/etc/named.conf ← BIND設定ファイル編集
//
// 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 {
#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";
allow-query { localhost; localnets; };← 問い合わせを許可する範囲 ( 内部ネットワーク等を指定 )
allow-transfer { localhost; localnets; };← ゾーン情報の転送を許可する範囲 ( セカンダリDNSがいればその場所/範囲 )
recursion yes;
dnssec-enable yes;
dnssec-validation yes;
dnssec-lookaside auto;
/* Path to ISC DLV key */
bindkeys-file "/etc/named.iscdlv.key";
追加(ここから)
forwarders{
192.168.1.1; ← ルーター経由接続環境の場合はルーターのIPアドレスを指定
XXX.XXX.XXX.XXX; ← プロバイダから通知されたDNSサーバー(プライマリ)のIPアドレスを指定
XXX.XXX.XXX.XXX; ← プロバイダから通知されたDNSサーバー(セカンダリ)のIPアドレスを指定
};
追加(ここまで)
};
logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
category lame-servers { null; }; ← 追加(error (connection refused) resolvingというエラーログの出力抑止)
};
以下より、全行変更(ここから)
view localhost_resolver {
match-clients { localhost; };
match-destinations { localhost; };
recursion yes;
include "/etc/named.rfc1912.zones";
include "/etc/named.sudachi.jp.zone";
};
view "internal" {
match-clients { localnets; };
match-destinations { localnets; };
recursion yes;
include "/etc/named.rfc1912.zones";
include "/etc/named.sudachi.jp.zone";
};
view "external" {
match-clients { any; };
match-destinations { any; };
recursion no;
include "/etc/named.sudachi.jp.zone.wan";
};
[root@host2 ~]# vi /var/named/chroot/etc/named.sudachi.jp.zone ← sudachi.jpの内部向けゾーン定義ファイル作成
zone "sudachi.jp" {
type master;
file "sudachi.jp.db";
};
zone "1.168.192.in-addr.arpa" {
type master;
file "1.168.192.in-addr.arpa.db";
};
centossrv.comの外部向けゾーン定義ファイル作成※固定IPアドレス環境の場合のみ
[root@host2 ~]# vi /var/named/chroot/etc/named.sudachi.jp.zone.wan
zone "sudachi.jp" {
type master;
file "sudachi.jp.db.wan";
allow-query { any; };
allow-transfer {
XXX.XXX.XXX.XX; ← このゾーン情報の転送先として(セカンダリネームサーバーのIPアドレス)を追加
};
notify yes; ← このゾーン情報変更時は即座に上記セカンダリへ反映させる
};
ルートゾーンは世界に13台しかないトップレベルドメインを管理するDNSサーバーのIPアドレスを管理しているファイルで、めったに更新されることはないが、念のため最新化しておく。
[root@host3 ~]# dig . ns @198.41.0.4 > /var/named/chroot/var/named/named.ca
1ヶ月に一度、ルートゾーンが最新かチェックし、更新されていればルートゾーンの最新化及び、BINDの再起動を自動的に行うようにする。
[root@host3 ~]# 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@host3 ~]# chmod 700 named.root_update ← ルートゾーン最新化スクリプトへ実行権限付加
[root@host3 ~]# mv named.root_update /etc/cron.monthly/ ← ルートゾーン最新化スクリプトを毎月自動実行されるディレクトリへ移動
[root@host3 ~]# vi /var/named/chroot/var/named/sudachi.jp.db ← 正引きゾーンデータベース作成
$TTL 86400
@ IN SOA sudachi.jp. root.sudachi.jp.(
2011061901 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN NS sudachi.jp.
IN MX 10 sudachi.jp.
@ IN A 192.168.1.3 ← サーバーのプライベートIPアドレスを指定(sudachi.jp用)
* IN A 192.168.1.3 ← サーバーのプライベートIPアドレスを指定(*.sudachi.jp用)
[root@host3 ~]# vi /var/named/chroot/var/named/1.168.192.in-addr.arpa.db ← 逆引きゾーンデータベース作成
$TTL 86400
@ IN SOA sudachi.jp. root.sudachi.jp.(
2011061901 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN NS sudachi.jp.
3 IN PTR sudachi.jp. ← サーバーIPアドレス最下位部(192.168.1.3)とドメイン名を指定
※固定IPアドレス環境の場合のみ
[root@host3 ~]# vi /var/named/chroot/var/named/sudachi.jp.db.wan ← 外部向け正引きゾーンデータベース作成
$TTL 86400
@ IN SOA ns1.sudachi.jp. root.sudachi.jp.(
2011061901 ; Serial
7200 ; Refresh
7200 ; Retry
2419200 ; Expire
86400 ) ; Minimum
IN NS ns1.sudachi.jp.
IN NS 2nd.dnsv.jp.
IN MX 10 sudachi.jp.
ns1 IN A XXX.XXX.XXX.XXX ← サーバーのグローバルIPアドレスを指定(ns1.sudachi.jp用)
@ IN A XXX.XXX.XXX.XXX ← サーバーのグローバルIPアドレスを指定(sudachi.jp用)
www IN A XXX.XXX.XXX.XXX ← サーバーのグローバルIPアドレスを指定(www.sudachi.jp用)
ftp IN A XXX.XXX.XXX.XXX ← サーバーのグローバルIPアドレスを指定(ftp.sudachi.jp用)
mail IN A XXX.XXX.XXX.XXX ← サーバーのグローバルIPアドレスを指定(mail.sudachi.jp用)
sudachi.jp. IN TXT "v=spf1 a mx ~all"
[root@host3 ~]# /etc/rc.d/init.d/named start ← BIND起動 namedを起動中: [ OK ] [root@host3 ~]# chkconfig named on ← BIND自動起動設定