ネットワークエンジニア系ブログ。エンターテイメント、おすすめ映画、本、キッズ系などお役立ち情報を紹介!

GOISBLOG

サーバー技術

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

投稿日:2014年3月5日 更新日:

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

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

photo credit: JohnSeb via photopin cc

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

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

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

スポンサーリンク


BINDインストール

[root@TEST ~]# 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起動

[root@TEST named]# 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'.

[root@TEST ~]# /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を動かすのでこちらの設定

[root@TEST ~]# rndc-confgen -a -r /dev/urandom -t /var/named/chroot
wrote key file "/etc/rndc.key"

↑成功したみたい

[root@TEST ~]# service named start
named を起動中: [ OK ]

[root@TEST ~]# 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配下に作成

[root@TEST named]# 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”コマンドで確認した。

正引き確認

[root@TEST chroot]# 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へ聞くようにする。

[root@TEST chroot]# 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

[root@TEST chroot]# 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サーバの変更

[root@TEST named]# vi /etc/resolv.conf

# Generated by NetworkManager
#nameserver 8.8.8.8
nameserver 192.168.10.94 ←自DNSを利用し、名前解決するように変更
[root@TEST etc]# 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”という短縮コマンドに変更した。

[root@TEST etc]# 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は奥が深いです。そんでもって初心者のじぶんにとっては結構覚えることが大変です。
やっぱり、サーバーとネットワークって畑が違えば何とやらです。。。

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

この記事が気に入ったら
いいね!しよう

Twitter で
スポンサーリンク

-サーバー技術
-,

Copyright© GOISBLOG , 2016 AllRights Reserved.