1 views

実現する機能

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

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

事前準備

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

BIND導入手順

1 BINDインストール

[root@ufuso ~]# yum -y install bind ← bindインストール
インストール:
  bind.x86_64 32:9.9.4-14.el7                                                   

完了しました!

2 BIND設定

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

[root@ufuso ~]# vi /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のバージョン情報の非表示化 
        listen-on-v6 { none; };
        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; 192.168.24.0/24; }; ← サーバーと同じネット
ワーク内からの問合せも許可
        /*
         - If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.
         - If you are building a RECURSIVE (caching) DNS server, you need to enable
           recursion.
         - If your recursive DNS server has a public IP address, you MUST enable access
           control to limit queries to your legitimate users. Failing to do so will
           cause your server to become part of large scale DNS amplification
           attacks. Implementing BCP38 within your network would greatly
           reduce such attack surface
        */
        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
アドレスを指定。
                106.187.2.33; ← プロバイダから通知されたDNSサーバー(プライマリ)
のIPアドレスを指定
                106.187.2.41; ← プロバイダから通知されたDNSサーバー(セカンダリ)
のIPアドレスを指定
                };
        managed-keys-directory "/var/named/dynamic";

        pid-file "/run/named/named.pid";
        session-keyfile "/run/named/session.key";
};

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

view "internal" {
        match-clients {
                localhost;
                192.168.24.0/24; ← サーバーと同じネットワークを追加
        };
        zone "." IN {
                type hint;
                file "named.ca";
        };
        zone "ufuso.dip.jp" IN { ← 正引きゾーン名「ufuso.dip.jp」を指定
                type master;
                file "ufuso.dip.jp.lan"; ← 正引き設定情報の保存ファイル名を指定
                allow-update { none; };
        };
        zone "24.168.192.in-addr.arpa" IN { ← 逆引きゾーン名「24.168.192
.in-addr.arpa」を指定
                type master;
                file "24.168.192.db"; ← 逆引き設定情報の保存ファイル名を指定
                allow-update { none; };
        };
include "/etc/named.rfc1912.zones";
};


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

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

$TTL 86400
@   IN  SOA     ufuso.dip.jp. root.ufuso.dip.jp. (
        2011071001  ;Serial
        3600        ;Refresh
        1800        ;Retry
        604800      ;Expire
        86400       ;Minimum TTL
)

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


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

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

$TTL 86400
@   IN  SOA     ufuso.dip.jp. root.ufuso.dip.jp. (
        2011071001  ;Serial
        3600        ;Refresh
        1800        ;Retry
        604800      ;Expire
        86400       ;Minimum TTL
)

        IN  NS      ufuso.dip.jp. ← ネームサーバー定義
        IN  PTR     ufuso.dip.jp. ← IPアドレスに関連付けるホスト名を定義
        IN  A       255.255.255.0 ← ドメインが属する範囲の定義
240     IN  PTR     ufuso.dip.jp. ← IPアドレスに関連付けるホスト名を定義

5 BIND起動

[root@ufuso ~]# systemctl start named ← BIND起動

[root@ufuso ~]# systemctl enable named ← BIND自動起動設定
ln -s '/usr/lib/systemd/system/named.service' '/etc/systemd/system/multi-user.target.wants/named.service'

6 本サーバーをDNSサーバーとして登録
赤枠1のネットワークアイコンをクリックして、接続しているifcfgの名称を確認します。下図では赤枠2になります。
bind01

[root@ufuso ~]# cd /etc/sysconfig/network-scripts
 ← network-scriptsフォルダへ移動

[root@ufuso network-scripts]# vi ifcfg-enp2s0 ← enp2s0ファイルの編集
DEVICE=eth0
HWADDR=90:E6:BA:C9:DE:B3
TYPE=Ethernet
UUID=1a318fab-faa0-4487-832e-3000d65b7b81
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=none
IPADDR=192.168.24.240
PREFIX=24
GATEWAY=192.168.24.1
DNS1=192.168.24.240 ← 本機を第1DNSサーバーとして追記
DOMAIN=ufuso.dip.jp
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
NAME="System eth0"
DNS2=192.168.24.1 ← ルーターを第2DNSサーバーにする

[root@ufuso network-scripts]# cd ← network-scriptsフォルダから移動

[root@ufuso ~]# systemctl restart network ← networkの再起動

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

8 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:>

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


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

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6_4.6 <<>> ufuso.dip.jp
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 56900
;; 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 ← IPアドレスが
返ってきた

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

;; Query time: 0 msec
;; SERVER: 192.168.24.240#53(192.168.24.240)
;; WHEN: Sun Dec 15 15:25:51 2013
;; MSG SIZE  rcvd: 60

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

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6_4.6 <<>> -x 192.168.24.240
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 18792
;; 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: 0 msec
;; SERVER: 192.168.24.240#53(192.168.24.240)
;; WHEN: Sun Dec 15 15:26:01 2013
;; MSG SIZE  rcvd: 101

10 chroot環境への移行

[root@ufuso ~]# yum -y install bind-chroot ← chrootのインストール 
Installed:
  bind-chroot.x86_64 32:9.8.2-0.17.rc1.el6_4.6                                  

Complete!

[root@ufuso ~]# /usr/libexec/setup-named-chroot.sh /var/named/chroot on ← chrootの起動

[root@ufuso ~]# systemctl stop named ← namedの停止

[root@ufuso ~]# systemctl disable named ← namedの自動起動停止
rm '/etc/systemd/system/multi-user.target.wants/named.service'

[root@ufuso ~]# systemctl start named-chroot ← chrootの起動

[root@ufuso ~]# systemctl enable named-chroot ← chrootの自動起動設定
ln -s '/usr/lib/systemd/system/named-chroot.service' '/etc/systemd/system/multi-user.target.wants/named-chroot.service'

[root@ufuso ~]# ll /var/named/chroot/etc ← chroot環境への移行確認 
合計 24
-rw-r--r--. 1 root root   331  7月 21 12:39 localtime
drwxr-x---. 2 root named    6  6月 10 17:13 named
-rw-r-----. 1 root named 2209  7月 21 12:16 named.conf
-rw-r--r--. 1 root named 2389  6月 10 17:13 named.iscdlv.key
-rw-r-----. 1 root named  931  6月 21  2007 named.rfc1912.zones
-rw-r--r--. 1 root named  487  7月 19  2010 named.root.key
drwxr-x---. 3 root named   24  7月 21 12:39 pki
-rw-r-----. 1 root named   77  7月 21 12:33 rndc.key

[root@ufuso ~]# ll /var/named/chroot/var/named ← chroot環境への移行確認  
合計 24
-rw-r--r--. 1 root  root   346  7月 21 12:32 24.168.192.db
drwxr-x---. 7 root  named   56  7月 21 12:39 chroot
drwxrwx---. 2 named named   22  7月 21 12:33 data
drwxrwx---. 2 named named   83  7月 21 12:39 dynamic
-rw-r-----. 1 root  named 2076  1月 28  2013 named.ca
-rw-r-----. 1 root  named  152 12月 15  2009 named.empty
-rw-r-----. 1 root  named  152  6月 21  2007 named.localhost
-rw-r-----. 1 root  named  168 12月 15  2009 named.loopback
drwxrwx---. 2 named named    6  6月 10 17:13 slaves
-rw-r--r--. 1 root  root   348  7月 21 12:32 ufuso.dip.jp.lan

9 Replies to “CentOS 7.0 で自宅に内部DNSサーバー構築(BIND)”

  1. 始めました。
    サーバーの勉強を始めたばかりの者なんです。
    おかげさまで頑張って勉強しています。ありがとうございます。

    二つの質問をさせて頂きます。

    一つ目は、2. bind 設定の部分なんですが、
    106.187.2.33; ← プロバイダから通知されたDNSサーバー(プライマリ)のIPアドレスを指定
    106.187.2.41; ← プロバイダから通知されたDNSサーバー(セカンダリ)のIPアドレスを指定
     プロバイダから通知されたDNSサーバーのIPアドレスというのは最初ドメインを購入したプロバイダのDNSサーバーのことなんでしょうか。

    二つ目は、自分が持っているドメイン名がtest.comとしたらここでの設定通りにすればDNSサーバーが
         dns1.test.com
    dns2.test.com
    のようになるのでしょうか

    まだ、勉強しているところですのでばかばかしい質問かもしれませんが、勇気をだして質問します。
    宜しくお願い致します。

  2. プロバイダというのは、インターネットサービスプロバイダ(ISP)のことです。
    また、ドメイン(test.com)を取得しただけでは、dns1.test.comやdns2.test.comをDNSサーバーにすることはできません。

    理由は長くなりますが、順序立てて説明しますと(IPアドレスはお宅用に変更のこと)、

    取得したドメインのIPアドレスは、ISPから送られてきた自宅ルーターのIPアドレス(ISPが勝手に決めるので流動的。192.168.24.1などのルーターのIPアドレスは自宅ネットワーク用なので固定なのです。)になりますので、ドメインを取得しただけではルーターにはアクセスできますが、ドメイン(test.com)をホスト名にした自宅サーバー(192.168.24.240)にはアクセスできません。
    自宅のルーターに、自宅サーバーのIPアドレス192.168.24.240をtest.comのIPアドレスとする設定をしなければ、http://test.comで外部からアクセスしても、自宅サーバーにアクセスできないわけです。

    この設定をしても、ルーターの電源を切ったりするとhttp://test.comで外部からアクセスしたのに自宅サーバーにアクセスできない場合があります。自宅ルーターのIPアドレスが不定期に変わるからです。test.comのIPアドレスを定期的に自宅ルーターのIPアドレスに合わせる必要があるのはこのためです。

    ここまで設定できると、内部DNSサーバーを構築しても安定稼働できますが、今時の自宅ルーターにはDNSサーバーの機能が無いはずなので、dns1.test.comを設定することはできないと思います。仮にドメインを取得した会社がDNSサーバーを無償で提供しているのでできるよという場合でも、ISPのDNSサーバーを迂回する結果となるので、アクセスが遅くなるだけで得にはなりません。インターネット全体からみても迷惑な設定になりますので、やらないほうがいいでしょう。

  3. tu様
    お世話になっております。

    迅速で親切な説明誠にありがとうございます。
    私はまだ知識が足りないようです。それで、別の質問になるかもしれませんが、もう一つの愚かな質問させて頂きます。

    自分のパソコン上にここでの説明通り設定を行いました。それで、インタネット側IPアドレスでは外部から接続しても「test」という文字がちゃんと出るようになりました。しかし、ドメインでは接続ができないです。
    そこで、考えてみましたが、お名前.comから購入した自分のドメインのDNSサーバーがdns1.onamae.comとdns2.onamae.comになっているのでそこをなんとかしなければと思いました。もし、私の考えが合っているのであればドメイン設定でdnsサーバー名に何を入れればいいでしょうか。もし、間違っていればどうすればいいのかを教えて頂きたいです。

    毎度のご無礼な質問申し訳ないと思いますが、どうぞ宜しくお願い致します。

  4. チェ様、お疲れ様です。

    さて、「ドメインでは接続ができない」ということですので、自宅用のDNSサーバーとインターネット用のDNSサーバーの一方又は両方の設定が完了していないということだと思われます。

    インターネット用のDNSサーバー、dns1.onamae.comとdns2.onamae.comの設定が完了していないのかもしれないということですので、必要な設定手順を説明します。

    1.お名前.comのDNSレコード設定ガイドのサイトへ移動して、ドメイン名と自宅ルーターのIPアドレスを登録します。ただ、この方法は自宅ルーターのIPアドレスが変更されるたびに接続できなくなりますので、やり直さなければなりません。

    2.自宅にWindowsパソコンがあれば、それにダイナミックDNSクライアントのダウンロードと設定を行うことで、自宅ルーターのIPアドレスが変更されても自動で更新してくれます。

    3.自宅にWindowsパソコンが無い場合、CentOSに「DICE」をインストールする方法が一般的ですが、残念ながらお名前.comでは使えないようです。WindowsのライセンスDVDでもあれば、仮想化して使うという手もあります。それも駄目なら「mydns お名前.com」で検索すると対策はあるかも、です。

    ご質問を頂いて、こちらも勉強になりました。質問を受ける側としては、質問に関係のある製品名、サービス名やその設定内容、サーバーなどが出すエラーメッセージや具体的な症状などの情報を時系列に並べて提供していただければ、充分なアドバイスも可能かと思います。正確を期すために、回答の前に確認の再質問をされる回答者も多いので、よろしくお願いします。

  5. tu様
    ご返答ありがとうございます。
    おかげさまで知りたいところがわかるようになりました。
    リンクまで入れる配慮にはとても感動しました。

    これから仮想化したwindowにダイナミックDNSを設定して試してみようと思っております。

    これからは質問の際具体的な状況も申し上げますのでどうか宜しくお願い致します。

  6. 初めまして。
    無謀にも自宅サーバーを構築しようとしてます、スパー初心者です。
    DNSサーバー構築が上手く出来ずに困っている所こちらのサイトに辿り着き勉強をさせて頂いています。
    そこで少し質問をさせて下さい。

    6 本サーバーをDNSサーバーとして登録
    赤枠1のネットワークアイコンをクリックしてーーー
    と言うところで、赤枠のアイコンの中には有線の表記しか無いようです。

    enp2s0ファイルの編集で、記載されているに内容が違います。
    ※公開して良いか悪いのか分からないので、ダメそうな数字は消しましたが、このような表記です。

    TYPE=”Ethernet”
    BOOTPROTO=”none”
    DEFROUTE=”yes”
    IPV4_FAILURE_FATAL=”no”
    IPV6INIT=”yes”
    IPV6_AUTOCONF=”yes”
    IPV6_DEFROUTE=”yes”
    IPV6_FAILURE_FATAL=”no”
    NAME=”enp2s0″
    UUID=
    DEVICE=”enp2s0″
    ONBOOT=”yes”
    IPADDR=
    PREFIX=”24″
    GATEWAY=
    DNS1=
    IPV6_PEERDNS=”yes”
    IPV6_PEERROUTES=”yes”
    IPV6_PRIVACY=”no”

    それ以前の設定方法に不備が在ったようにも思えますが、2〜4の内容を繰り返し確認しても問題ないように思えるのえすが・・・

    こちらのサイトで紹介されている方法でコードを入れると、同じ表示になり苦もなく進めて来られたので大変助かっていましたが、素人の浅知恵では如何にすることもできない状況です。
    止っては、他のサイトを探し、また止まっては他のサイトを探すと言う繰り返しの中で、今回初めての質問となりますが、どうぞ宜しく御願いします。

    1. masaさん、ご質問有り難うございます。
      早速本題ですが、我が家の自宅サーバーは、有線しかないので、
      「6 本サーバーをDNSサーバーとして登録
      赤枠1のネットワークアイコンをクリックしてーーー
      と言うところで、赤枠のアイコンの中には有線の表記しか無いようです。」
      とのご指摘はそのとおりです。しかし、自宅のDNSサーバーが有線か無線かで自宅内ネットワークのDNS設定方法に違いは無いはずです。DNSサーバーのIPアドレスを追記し、正引き逆引きゾーンの設定をするだけですから。

      自宅内のネットワークだけに使う内部DNSサーバーですので、自宅サーバー以外の自宅PCからホスト名で自宅サーバーにアクセスできないのだと思われますが、そのPCからIPアドレスでもアクセスできないのでしょうか。PCのhostsファイルに明記してもダメですか。回答になっていないかもしれませんが、現象を教えていただければ少しは的を得た回答に近づけると思います。

      楽しみながら頑張ってください。

      1. tu様
        さっそくのアドバイス有難うございます。
        自分なりにいろいろ調べた所、こちらの前段階の(WEBサイト構築)からうまく設定が出来ていない様で、外部からの接続が不安定な状態と言う事が判明し、原因はそこにあるのではないかと推測しました。
        まずは、外部からの接続を完璧にしてから上記方法をためさせて頂きたいと思います。

        恥の上塗りになりますが、例えば(2) BIND設定で初期の状態を書き換えるわけですが、間違えて余計な所まで消したものを保存してしまった場合、通常はどのような手段で元に戻すのでしょうか?(私の力量ですと、記載されている記号や文字を理解して元に戻すのは不可能です。あくまでも初期の状態に戻したい場合です。)
        恥ずかしながらそういう事態がおこった場合OSの再インストールまで戻っていました。作業に大変時間がかかってしまう上にHDDの負担も相当な物と思われますが、BINDに限らず設定ファイル元のソフトをアインストールし、再インストールするとすべての設定が初期の状態に戻るのでしょうか?
        もしくは、設定の項目だけ残ってしまって再インストールしても変わらないのでしょうか?
        どうぞご教授お願いします。

        1. masaさん、お疲れ様です。

          設定ファイル元のソフトをアインストールして再インストールすると、すべての設定が初期の状態に戻り、元の設定は旧ファイルとして別名で残っている場合が多いです。安心してアンインストールしてください。

コメントを残す

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

CAPTCHA


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