1 views

実現する機能

外部から自宅サーバー「http://ufuso.dip.jp」にアクセスすると、プロバイダーから提供されているルーター(192.168.24.1)がちゃんと自宅サーバー(192.168.24.2)に繋いでくれますが、自宅のWindowsノートパソコン(192.168.24.3)から自宅サーバー(192.168.24.2)にアクセスすると繋いでくれません。ドメインufuso.dip.jpがIPアドレス192.168.24.2と同じパソコンのものだよと教えてくれるDNSサーバー(BIND)が家庭内LAN内には無いからです。

そこで、自宅サーバーに自宅のWindowsノートパソコンからアクセスできるように自宅内専用のDNSサーバー(内部DNSサーバー)を構築してIPアドレス(192.168.24.2)だけではなく、ufuso.dip.jpでもアクセスできるようにしました。

事前準備

ieServer.Net(無料)Dynamic DO!.jp(無料)お名前.com(有料)などからドメインを取得済であること

ドメイン名の説明はこちら

BIND導入手順

(1)BINDインストール

[root@ufuso ~]# yum -y install bind bind-chroot caching-nameserver ← bind,bind-chroot
インストール
Installed:
  bind.x86_64 32:9.8.2-0.10.rc1.el6_3.2                                         
  bind-chroot.x86_64 32:9.8.2-0.10.rc1.el6_3.2                                  

Complete!

(2)chroot化

[root@ufuso ~]# 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@ufuso ~]# sh bind-chroot-admin ← bind-chroot-adminスクリプト実行

(3)BIND設定

[root@ufuso ~]# 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; }; ← サーバーと同じネットワーク内から
の問合せも許可
        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.24.1; ← ルーター経由接続環境の場合はルーターのIPアドレ
スを指定。PPPoE接続環境の場合はプロバイダから通知されたDNSサーバー
(プライマリ&セカンダリ)のIPアドレスを指定
                };
};

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
        category lame-servers { null; }; ← resolvingというエラーログの出力抑止
};

view "internal" {
        match-clients { localnets; };
        match-destinations { localnets; }; ← 自宅ネットワークの追加

zone "." IN {
        type hint;
        file "named.ca";
};

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
};

[root@ufuso ~]# vi /var/named/chroot/etc/named.ufuso.dip.jp.zone
  ← ufuso.dip.jpの内部向けゾーン定義ファイル作成

zone "ufuso.dip.jp" {
        type master;
        file "ufuso.dip.jp.db";
};
zone "24.168.192.in-addr.arpa" {
        type master;
        file "24.168.192.in-addr.arpa.db";
};


[root@ufuso ~]# echo OPTIONS="-4" >> /etc/sysconfig/named
  ← IPv4のみ有効にする(error (network unreachable) resolvingというエラーログの
出力抑止)

(5)ルートゾーン自動更新設定

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

[root@ufuso ~]# 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


[root@ufuso ~]# chmod 700 named.root_update ← 実行権限付加

[root@ufuso ~]# mv named.root_update /etc/cron.monthly/ ← 毎月自動実行されるディレク
トリへ移動

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

[root@ufuso ~]# vi /var/named/chroot/var/named/ufuso.dip.jp.db ← 正引きゾーンデータ
ベース作成

$TTL    86400
@       IN      SOA     ufuso.dip.jp.  root.ufuso.dip.jp.(
                                      2011062001 ; Serial
                                      28800      ; Refresh
                                      14400      ; Retry
                                      3600000    ; Expire
                                      86400 )    ; Minimum

                 IN NS    ufuso.dip.jp. ← ネームサーバー定義
                 IN MX 10 ufuso.dip.jp. ← メールサーバー定義
@                IN A     192.168.24.240 ← サーバーのプライベートIPを指定(ufuso.dip.jp用)
*                IN A     192.168.24.240 ← サーバーのプライベートIPを指定(*.ufuso.dip.jp用)

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

[root@ufuso ~]#  vi /var/named/chroot/var/named/24.168.192.in-addr.arpa.db
 ← 逆引きゾーンデータベース作成

$TTL    86400
@       IN      SOA     ufuso.dip.jp.  root.ufuso.dip.jp.(
                                      2011062001 ; Serial
                                      28800      ; Refresh
                                      14400      ; Retry
                                      3600000    ; Expire
                                      86400 )    ; Minimum
              IN      NS    ufuso.dip.jp. ← ネームサーバー定義
240           IN      PTR   ufuso.dip.jp. ← IPアドレスに関連付けるホスト名を定義

※ゾーン情報変更時は、Serial行を年月日通番2桁(YYYYMMDDXX)のようにして、必ず変更前よりも大きい数値に変更すること(例:変更前が2005011001なら、変更後は2005011002にする)。

(8)BIND起動

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

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

[root@ufuso ~]# sed -i 's/DNS1=.*/DNS1=127.0.0.1/g' /etc/sysconfig/network-scripts/ifcfg-eth0
 ← サーバー自身を問合せ先DNSサーバーに変更
※ブリッジ接続をしている場合は、ifcfg-eth0をifcfg-br0に変更のこと。

[root@ufuso ~]#  /etc/rc.d/init.d/network restart ← network再起動
インターフェース eth0 を終了中:  デバイスの状態: 3 (切断済み)
                                                           [  OK  ]
ループバックインターフェースを終了中                       [  OK  ]
ループバックインターフェイスを呼び込み中                   [  OK  ]
インターフェース eth0 を活性化中:  アクティブ接続の状態: アクティベート済み
アクティブ接続のパス: /org/freedesktop/NetworkManager/ActiveConnection/4
                                                           [  OK  ]

(9)UDPの53番ポートとTCPの53番ポートをオープンする
ルーターの設定で、UDPの53番ポートとTCPの53番ポートへのアクセスをサーバーに転送するようにする。下図はauひかりのルーターでの設定例。

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

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

> ufuso.dip.jp ← サーバーの正引きテスト
Server:  ufuso.dip.jp
Address:  192.168.24.240

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

> 192.168.24.240 ← サーバーの逆引きテスト

Server:  ufuso.dip.jp
Address:  192.168.24.240

Name:    ufuso.dip.jp ← ドメイン名が返ってきた
Address:  192.168.24.240
> exit ← nslookup停止

C:>

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


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

; <<>> DiG 9.7.0-P2-RedHat-9.7.0-5.P2.el6_0.1 <<>> ufuso.dip.jp
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 52474
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0

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

;; ANSWER SECTION:
ufuso.dip.jp.		86400	IN	A	192.168.24.240

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

;; Query time: 1 msec
;; SERVER: 192.168.24.240#53(192.168.24.240)
;; WHEN: Wed Nov 30 01:38:54 2011
;; MSG SIZE  rcvd: 60

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

; <<>> DiG 9.7.0-P2-RedHat-9.7.0-5.P2.el6_0.1 <<>> -x 192.168.24.240
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 51096
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1

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

;; ANSWER SECTION:
240.24.168.192.in-addr.arpa. 86400 IN	PTR	ufuso.dip.jp.

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

;; ADDITIONAL SECTION:
ufuso.dip.jp.		86400	IN	A	192.168.24.240

;; Query time: 1 msec
;; SERVER: 192.168.24.240#53(192.168.24.240)
;; WHEN: Wed Nov 30 01:39:08 2011
;; MSG SIZE  rcvd: 101

※どうしても、WindowsPCから自宅サーバーにアクセスできない場合は、「内部DNSが機能せずWindows端末からサーバーにアクセスできない場合」を参考にしてください。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください