ネットワークをやっていくうえでこの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 #
動作確認
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は奥が深いです。そんでもって初心者のじぶんにとっては結構覚えることが大変です。
やっぱり、サーバーとネットワークって畑が違えば何とやらです。。。
今回は簡単なインストール手順と設定を紹介しましたので、次回はもう少し細かい設定をメモしていきます。
サーバーを構築するならVPSがおすすめです。
エンジニアのオンライン学習
ITエンジニアにおすすめの教材、オンラインスクールです。
無料からエンジニアの学習ができる教材などまとめているので参考にしてください。
おすすめオンライン教材 | |
自宅で学習ができるオンラインスクール | |
ITエンジニアの開発・検証・学習としてインターネット上で専用のサーバ(VPS)を利用しましょう!
実務経験はVPSで学べます。
こんにちわ。1度目の入力では成功するんですがrebootやshutdown -h nowのあとdigコマンドを使うとエラーになってしまいます。systemctl start named.serviceなどがエラーで入力できません.私的には設定が原因になってると思うのですがうまくいくように教えてください。bind ,bind-chrootをアンインストールして再度設定すればうまくいくのですが。
初めまして。
設定内容はちょっと確認しないとわかりませんが、zoneの設定などでセミコロン「;」を付け忘れると、named-chrootサービスを再起動するタイミングなどでエラーが発生します。
zoneの設定を一度ご確認された方がよいかと思います。
よろしくお願いします。