DNSサーバー構築と設定。初心者でもできた6つの手順(CentOS)

ネットワークをやっていくうえでこのDNSサーバーは必須ではないでしょうか。

今回はDNSサーバをCentOS(ver.6)構築した際の構築手順をメモっておきます。

DNSがわからなければとりあえず設定してみよう

DNSサーバーは名前解決(ドメイン名→IPアドレス、IPアドレス→ドメイン名を返す)ができるサーバー。
また、DNSサーバーは以下の2通りのパターンがある。

内部向けDNSサーバー ⇒ 内部からサーバーにアクセスする際、ドメイン名でアクセスできるようにする。
外部向けDNSサーバー ⇒ 外部からサーバーにアクセスする際、自ドメイン名でアクセスできるようにする。

BINDインストール

# yum -y install bind bind-chroot
→BIND、bind-chrootをインストール

・・・

Complete!
#

※chrootについて

chrootはルート・ディレクトリ(/)を変更するコマンド。DNSにおいてBINDでchroot機能を指定した際、指定した
サブディレクトリがデーモン起動後にルート・ディレクトリ(/)として扱われる。

例えば

#
# /etc/named/named.conf
#

というディレクトリがあるとする。このため回避できないセキュリティ・ホールがあったとすると多大な被害を受ける。しかし、chroot機能を使用することにより

/var/named/chroot/etc/named/named.conf

回避できないセキュリティー・ホールがあったとしても、それによる被害はchrootしたディレクトリ外には及ばなく、最少の被害に収まる。
これにより、OS全体を乗っ取られる危険性も減り、誤って、重要なファイルを読まれてしまうことも回避できる。

BIND起動

# find / -name rndc-confgen
/usr/sbin/rndc-confgen
find: File system loop detected; `/var/named/chroot/var/named' is part of the same file system loop as `/var/named'.

# /etc/rc.d/init.d/named start 又は service named start
Generating /etc/rndc.key:
#
#

※上記の表示がされ、BINDが起動しない。
回避するにはrndc-confgenコマンドで/etc/mdc.keyファイルを作成する。

# 通常時

#
# rndc-confgen -a -r /dev/urandom
#

# chroot環境の時

rndc-confgen -a -r /dev/urandom -t /var/named/chroot

↑今回はchrootを動かすのでこちらの設定

# rndc-confgen -a -r /dev/urandom -t /var/named/chroot
wrote key file "/etc/rndc.key"
#

↑成功したみたい

# service named start
named を起動中: [ OK ]
#
# ps -ef | grep named
named 8512 1 0 16:33 ? 00:00:00 /usr/sbin/named -u named -t /var/named/chroot
root 8521 8108 0 16:34 pts/0 00:00:00 grep named
#

正引き、逆引き作成後にrndc reload

※rndc.confをchroot配下に作成

[
# rndc-confgen > /var/named/chroot/etc/rndc.conf
#

※rndc.conf内の以下の設定をnamed.confへ貼り付け

#vi /var/named/chroot/etc/named.conf

# Use with the following in named.conf, adjusting the allow list as needed:
key "rndc-key" {
      algorithm hmac-md5;
      secret "xA34ZS5cHOqY/gvKy6IeqQ==";
};

controls {
      inet 127.0.0.1 port 953
              allow { 127.0.0.1; } keys { "rndc-key"; };
};
# End of named.conf

↓最後の行に貼り付け

options {
        default-key "rndc-key";
        default-server 127.0.0.1;
        default-port 953;
};

rndc.confを再起動

#
# date; rndc -c /var/named/chroot/etc/rndc.conf reload
#

動作確認

medium_4646150837
photo credit: fsse8info via photopin cc

googleを自DNSで正引き検索してみる。
以下の設定はzoneファイルを設定せず、”goolge.co.jp”を自DNSのみに聞くように“+norec”コマンドで確認した。

正引き確認

# dig @localhost google.co.jp +norec

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6_4.6 <<>> @localhost google.co.jp +norec
; (3 servers found)
;; global options: +cmd
;; Got answer:
;; >>HEADER<;; flags: qr ra; QUERY: 1, ANSWER: 0, AUTHORITY: 7, ADDITIONAL: 13

;; QUESTION SECTION:
;google.co.jp.                  IN      A

;; AUTHORITY SECTION:
jp.                     172419  IN      NS      e.dns.jp.
jp.                     172419  IN      NS      b.dns.jp.
jp.                     172419  IN      NS      f.dns.jp.
jp.                     172419  IN      NS      a.dns.jp.
jp.                     172419  IN      NS      d.dns.jp.
jp.                     172419  IN      NS      c.dns.jp.
jp.                     172419  IN      NS      g.dns.jp.

;; ADDITIONAL SECTION:
a.dns.jp.               172419  IN      A       203.119.1.1
a.dns.jp.               172419  IN      AAAA    2001:dc4::1
b.dns.jp.               172419  IN      A       202.12.30.131
b.dns.jp.               172419  IN      AAAA    2001:dc2::1
c.dns.jp.               172419  IN      A       156.154.100.5
c.dns.jp.               172419  IN      AAAA    2001:502:ad09::5
d.dns.jp.               172419  IN      A       210.138.175.244
d.dns.jp.               172419  IN      AAAA    2001:240::53
e.dns.jp.               172419  IN      A       192.50.43.53
e.dns.jp.               172419  IN      AAAA    2001:200:c000::35
f.dns.jp.               172419  IN      A       150.100.6.8
f.dns.jp.               172419  IN      AAAA    2001:2f8:0:100::153
g.dns.jp.               172419  IN      A       203.119.40.1

;; Query time: 0 msec
;; SERVER: ::1#53(::1)
;; WHEN: Fri Nov 15 16:51:41 2013
;; MSG SIZE  rcvd: 426

このように、自DNSには”google.co.jp”の正引き設定をしてない為、“ANSER: 0”を返している事がわかる。

resolv.confはgoogleのDNS(8.8.8.8)を向いているので+norecを抜いたコマンドで、自DNSがわからない場合はGoogleDNSへ聞くようにする。

# dig @localhost google.co.jp

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6_4.6 <<>> @localhost google.co.jp
; (3 servers found)
;; global options: +cmd
;; Got answer:
;; >>HEADER<;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 4, ADDITIONAL: 4

;; QUESTION SECTION:
;google.co.jp.                  IN      A

;; ANSWER SECTION:
google.co.jp.           300     IN      A       74.125.235.152
google.co.jp.           300     IN      A       74.125.235.151
google.co.jp.           300     IN      A       74.125.235.159

;; AUTHORITY SECTION:
google.co.jp.           86398   IN      NS      ns4.google.com.
google.co.jp.           86398   IN      NS      ns1.google.com.
google.co.jp.           86398   IN      NS      ns3.google.com.
google.co.jp.           86398   IN      NS      ns2.google.com.

;; ADDITIONAL SECTION:
ns4.google.com.         172799  IN      A       216.239.38.10
ns2.google.com.         172799  IN      A       216.239.34.10
ns3.google.com.         172799  IN      A       216.239.36.10
ns1.google.com.         172799  IN      A       216.239.32.10

;; Query time: 3726 msec
;; SERVER: ::1#53(::1)
;; WHEN: Fri Nov 15 16:52:12 2013
;; MSG SIZE  rcvd: 224

ANSWERが返ってきたことを確認

逆引き確認

[root@TEST chroot]# dig -x 74.125.235.152

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6_4.6 <<>> -x 74.125.235.152
;; global options: +cmd
;; Got answer:
;; >>HEADER<;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

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

;; ANSWER SECTION:
152.235.125.74.in-addr.arpa. 21600 IN   PTR     nrt19s11-in-f24.1e100.net.

;; Query time: 60 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Fri Nov 15 17:23:18 2013
;; MSG SIZE  rcvd: 84

#
# dig -x 216.239.38.10

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6_4.6 <<>> -x 216.239.38.10
;; global options: +cmd
;; Got answer:
;; >>HEADER<;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

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

;; ANSWER SECTION:
10.38.239.216.in-addr.arpa. 21357 IN    PTR     ns4.google.com.

;; Query time: 57 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Fri Nov 15 17:23:53 2013
;; MSG SIZE  rcvd: 72

利用するDNSサーバの変更

# vi /etc/resolv.conf

# Generated by NetworkManager
#nameserver 8.8.8.8
nameserver 192.168.10.94 ←自DNSを利用し、名前解決するように変更
#
# vi named.conf
options {
listen-on port 53 { 127.0.0.1; 192.168.10.94; }; ←自サーバのアドレスを追加する
listen-on-v6 port 53 { ::1; };
directory "/var/named";
pid-file "/var/run/named/named.pid";
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.10.94; }; ←自サーバのアドレスを追加する
recursion yes;

便利なaliasでコマンド短縮

下記は、rndc reloadを「alias」で”rndcr”という短縮コマンドに変更した。

#
# alias rndcr='rndc -c /var/named/chroot/etc/rndc.conf reload'
#

その他、階層を楽に移動できるようにコマンド短縮

#
# alias cdv='cd /var/named/chroot/var/named'
# alias cde='cd /var/named/chroot/etc'
#

まとめ

DNSは奥が深いです。そんでもって初心者のじぶんにとっては結構覚えることが大変です。
やっぱり、サーバーとネットワークって畑が違えば何とやらです。。。

今回は簡単なインストール手順と設定を紹介しましたので、次回はもう少し細かい設定をメモしていきます。




エンジニアのオンライン学習

ITエンジニアにおすすめの教材、オンラインスクールです。
無料からエンジニアの学習ができる教材などまとめているので参考にしてください。

おすすめオンライン教材
自宅で学習ができるオンラインスクール

ITエンジニアの開発・検証・学習としてインターネット上で専用のサーバ(VPS)を利用しましょう!
実務経験はVPSで学べます。



2件のコメント

こんにちわ。1度目の入力では成功するんですがrebootやshutdown -h nowのあとdigコマンドを使うとエラーになってしまいます。systemctl start named.serviceなどがエラーで入力できません.私的には設定が原因になってると思うのですがうまくいくように教えてください。bind ,bind-chrootをアンインストールして再度設定すればうまくいくのですが。

初めまして。
設定内容はちょっと確認しないとわかりませんが、zoneの設定などでセミコロン「;」を付け忘れると、named-chrootサービスを再起動するタイミングなどでエラーが発生します。

zoneの設定を一度ご確認された方がよいかと思います。
よろしくお願いします。

コメントを残す

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

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

ABOUT US
げんき☆ひろき
インターネット関連のSEをやっています。 ネットワーク、サーバー、ストレージ、仮想基盤まで幅広く手を出しており、MVNOの構築経験もあります。 現在は、Pythonを使ったプログラミングの開発をしネットワークの自動化ツールを作成しています! Pythonの入門書も作成しているので、ぜひ参考にしてください!