自宅サーバを用意したものの、LAN内からドメインでのサイトアクセスができない。
coregaのルータを使用しているときは何も気にせずアクセスできていたが、
NECのAtermにかえてからできなくなった。
内部向けDNSサーバを構築することで、内部からでもwwwアクセスできるらしい。そのときの備忘録。
なお、構築に関して、こちらのサイトを参考にさせていただきました。
とても参考になりました。
http://centossrv.com/bind.shtml
ホスト名:websaba.com
内部IP:192.168.0.20
DNSソフト : BIND
内部向けDNSサーバとして構築し、外部向け設定は省略する。(※1)
すべての操作はrootで行う。
#は、rootユーザでの操作を意味する。
朱色はコメントアウト箇所
赤色は追加箇所
青色は変更箇所
注意点として、
設定ファイルの"}"のあとは、";"(セミコロン)が必要なので注意!
1. BIND一連のソフトをインストールする
#yum -y install bind bind-chroot caching-nameserver
2. chroot化(※2)のためスクリプトを作成する。
#vi 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
echo "Finished."
exit
↑ ----- ここまでスクリプト本文
3. chrootスクリプト(2.で作成したスクリプト)を実行する
#sh bind-chroot-admin
#cp /var/named/chroot/etc/named.conf /var/named/chroot/etc/named_original.conf
5. BIND設定ファイル書き換える。
#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";
#サーバー及び、サーバーと同じネットワーク内のホストからの問合せのみ許可する。
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{
#ルータ経由の場合は、ルータのアドレスを設定する
192.168.0.1;
#プロバイダのDNSサーバを設定する ex)フレッツ東日本の場合
220.210.194.67;
220.210.194.68;
};
};
logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
#error (connection refused) resolvingエラーログの出力抑止
category lame-servers { null; };
};
#内部向け設定
view "internal" {
match-clients { localnets; };
match-destinations { localnets; };
zone "." IN {
type hint;
file "named.ca";
};
include "/etc/named.rfc1912.zones";
include "/etc/named.websaba.com.zone";
};
↑ ----- ここまでBIND設定ファイル
6.内部向けDNS用のゾーン定義ファイルを作成する
#vi /var/named/chroot/etc/named.websaba.com.zone
↓ ----- ここから設定ファイル本文
zone "websaba.com" { type master; file "websaba.com.db"; }; zone "0.168.192.in-addr.arpa" { type master; file "0.168.192.in-addr.arpa.db"; };
↑ ----- ここまで設定ファイル本文
7. IPv4のみ有効にする(error network unreachable resolvingエラーログの出力抑制)
#echo OPTIONS="-4" >> /etc/sysconfig/named
8. ルートゾーン最新化
#dig . ns @198.41.0.4 +bufsize=1024 > /var/named/chroot/var/named/named.ca
9. ルートゾーン自動更新スクリプト作成
#vi named.root_update
↓ ----- ここからスクリプト本文
#!/bin/bash
new=`mktemp`
errors=`mktemp`
dig . ns @198.41.0.4 +bufsize=1024 > $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
↑ ----- ここまでスクリプト本文
10. ルートゾーン自動更新スクリプトの実行権限を変更
#chmod 700 named.root_update
11. ルートゾーン自動更新スクリプト自動実行 (月次実行)
#cp named.root_update /etc/cron.monthly
12.内部向け正引きゾーンデータベース作成
#vi /var/named/chroot/var/named/websaba.com.db
↓ ----- ここから設定ファイル本文
$TTL 86400
@ IN SOA websaba.com. root.websaba.com.(
2011062001 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN NS websaba.com.
IN MX 10 websaba.com.
@ IN A 192.168.1.20 ← サーバーのプライベートIPアドレスを指定(websaba.com用)
* IN A 192.168.1.20 ← サーバーのプライベートIPアドレスを指定(*.websaba.com用)
↑ ----- ここまで設定ファイル本文
13.内部向け逆引きゾーンデータベース作成#vi /var/named/chroot/var/named/0.168.192.in-addr.arpa.db
↓ ----- ここから設定ファイル本文
$TTL 86400
@ IN SOA websaba.com. root.websaba.com.(
2011062001 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN NS websaba.com.
20 IN PTR websaba.com. ← 行先頭にサーバのLANの最下位アドレスを指定すること
↑ ----- ここまで設定ファイル本文
14.bind再起動
#/etc/rc.d/init.d/named restart
or
#service named restart
#service named restart
15. ルータの53番ポートをTCP/UDP共に解放する。
ここはルータ毎の設定によるので、詳細は省略。
16. iptablesでファイアウォール構築している場合は、53番を解放する。
17. 自宅内のパソコンのDNS設定を変更する
DNSサーバのIPが192.168.0.20
ルータのIPが192.168.0.1
の場合、
DNSに上記IPを割り当てればよい。
結果、自宅内部からwwwドメインで自分のサイトにアクセスできるようになった。
(※1)
著者の環境は固定IPではないため、内部向けのDNSサーバとする。
固定IPでなければ外部向けDNSサーバは構築できないようです。
(※2)
chrootとは、もしサーバが乗っ取られた場合にそのパス以外にアクセスできない
ようにする機構のこと。
0 件のコメント:
コメントを投稿