DNS(Domain Name Server)はインターネットに接続するときにIPアドレス(xxx.xxx.xxx.xxx)を、kajuhome.comの様に人間に分かりやすくアドレスを変換してくれるサーバです。
ネームサーバ(bind)のインストール # yum -y install bind |
bindはホスト名とIPアドレスの対照表をゾーンという単位で管理しています。
マスタサーバとして設定を行なうには、まずゾーン名を決める必要があります。
また、このゾーンには正引きゾーンと逆引きゾーンがあります。
正引きはドメイン名をIPアドレスに変換します。
正引きゾーンファイル名はドメインのkajuhome.comが正引きゾーン名となります
逆引きゾーンはIPアドレスをドメイン名に変換を行ないます。
使用するIPアドレスのネットワークアドレス部分から作成し、ネットワークアドレスを逆から作成しその値+.in-adde.arpaとします。
言葉だと分かりにくいので当サイトの逆引きゾーン名を例とすると、
# vi /etc/named.conf // // 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 { 全てに対してポート番号53をリッスンする listen-on port 53 { any; }; コメントにする // listen-on-v6 port 53 { ::1; }; 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"; bindを使用する範囲を指定(全てのIPに許可) allow-query { any; }; recursion yes; dnssec-enable yes; dnssec-validation yes; dnssec-lookaside auto; /* Path to ISC DLV key */ bindkeys-file "/etc/named.iscdlv.key"; 以下(allow-transfer forwarders)は必要に応じて追加(特に追加の必要はありません) スレーブDNSサーバを指定 allow-transfer{ xxx.xxx.xxx.xxx; }; 外部のネームサーバに問い合わせを転送する場合 複数ある場合は、以下の様に複数行で記述します。 forwarders{ yyy.yyy.yyy.yyy; zzz.zzz.zzz.zzz; }; }; logging { channel default_debug { file "data/named.run"; severity dynamic; }; 逆引き時に問い合わせた他のDNSサーバがエラーだった場合(設定不良)のログは記録しない エラー時の例)下記のログが大量に出力されてしまう対処 error (unexpected RCODE SERVFAIL) resolving error (network unreachable) resolving category lame-servers { null; }; }; 内向きVIEWの定義 view "internal" { 自サーバおよび、自サーバが所属するネットーワークに許可 match-clients { localhost; localnets; }; キャッシュ有効 recursion yes; zone "." IN { type hint; file "named.ca"; }; include "/etc/named.rfc1912.zones"; include "/etc/named.root.key"; 最終行にゾーン指定(以下)を追加 // 正引きゾーン(kajuhome.com)の指定 zone "kajuhome.com" { type master; file "kajuhome.com.lan"; <--- ファイル名に注視 allow-update { none; }; }; // 逆引きゾーン(192.168.1.0/24)の指定 zone "1.168.192.in-addr.arpa" { type master; file "1.168.192.in-addr.arpa.db"; allow-update { none; }; }; }; 外向きVIEWの定義 view "external" { 上記(内向き問い合わせにマッチしなかったIP全て) match-clients { any; }; キャッシュ無効 recursion no; zone "." IN { type hint; file "named.ca"; }; include "/etc/named.rfc1912.zones"; include "/etc/named.root.key"; 最終行にゾーン指定(以下)を追加 // 正引きゾーン(kajuhome.com)の指定 zone "kajuhome.com" { type master; file "kajuhome.com.wan"; <--- ファイル名に注視 allow-update { none; }; }; // 逆引きゾーン(221.151.xxx.yyy)の指定 zone "xxx.151.221.in-addr.arpa" { type master; file "xxx.151.221.in-addr.arpa.db"; allow-update { none; }; }; }; |
以下の部分が view のスコープ外に定義されていませんか? zone "." IN { type hint; file "named.ca"; }; include "/etc/named.rfc1912.zones"; include "/etc/named.root.key"; 以下の様に view スコープ内に上記 zone 定義を移動します。 view 定義外の zone 参照を移動 view "internal" { match-clients { localhost; localnets; }; recursion yes; zone "." IN { type hint; file "named.ca"; }; include "/etc/named.rfc1912.zones"; include "/etc/named.root.key"; zone "kajuhome.com" { type master; file "kajuhome.com.lan"; allow-update { none; }; }; zone "1.168.192.in-addr.arpa" { type master; file "1.168.192.in-addr.arpa.db"; allow-update { none; }; }; }; view "external" { match-clients { any; }; recursion no; zone "." IN { type hint; file "named.ca"; }; include "/etc/named.rfc1912.zones"; include "/etc/named.root.key"; zone "kajuhome.com" { type master; file "kajuhome.com.wan"; allow-update { none; }; }; zone "xxx.151.221.in-addr.arpa" { type master; file "xxx.151.221.in-addr.arpa.db"; allow-update { none; }; }; }; |
内向き正引きゾーンファイル(kajuhome.com.lan)の作成 # vi /var/named/kajuhome.com.lan $TTL 86400 @ IN SOA kajuhome.com. root.kajuhome.com.( 2007031400 ; serial 3600 ; refresh (1 hour) 900 ; retry (15 minutes) 604800 ; expire (1 week) 86400 ; negative (1 day) ) IN NS kajuhome.com. IN MX 10 kajuhome.com. IN A 192.168.1.5 client1 IN A 192.168.1.10 client2 IN A 192.168.1.20 fedora IN CNAME kajuhome.com. www IN CNAME kajuhome.com. |
NSレコードはゾーンを管理するDNSサーバを指定します。
MXレコードはメールの配信先を指定します。(メールサーバの構築で必要となります。)
CNAMEレコードは別名でアクセスする場合に指定します。
Aレコードがホスト名に対応したIPアドレスを設定しています。
内向き逆引きゾーンファイル(1.168.192.in-addr.arpa.db)の作成 # vi /var/named/1.168.192.in-addr.arpa.db $TTL 86400 @ IN SOA kajuhome.com. root.kajuhome.com.( 2007031400 ; serial 3600 ; refresh (1 hour) 900 ; retry (15 minutes) 604800 ; expire (1 week) 86400 ; negative (1 day) ) IN NS kajuhome.com. 5 IN PTR kajuhome.com. 10 IN PTR client1.kajuhome.com. 20 IN PTR client2.kajuhome.com. |
NSレコードは、正引きゾーンファイルで説明しましたので割愛します。
PTRレコードがIPアドレスからホスト名に変換する為のレコードです。
正引きゾーンファイル(kajuhome.com.wan)の作成 # vi /var/named/kajuhome.com.wan $TTL 86400 @ IN SOA kajuhome.com. root.kajuhome.com.( 2007031400 ; serial 3600 ; refresh (1 hour) 900 ; retry (15 minutes) 604800 ; expire (1 week) 86400 ; negative (1 day) ) IN NS kajuhome.com. IN MX 10 kajuhome.com. IN A 221.151.xxx.yyy |
外向きのゾーンファイルには「CNAME」を定義していないので、問い合わせにできる名前は『kajuhome.com』だけとなります。
逆引きゾーンファイル(xxx.151.221.in-addr.arpa.db)の作成 # vi /var/named/xxx.151.221.in-addr.arpa.db $TTL 86400 @ IN SOA kajuhome.com. root.kajuhome.com.( 2007031400 ; serial 3600 ; refresh (1 hour) 900 ; retry (15 minutes) 604800 ; expire (1 week) 86400 ; negative (1 day) ) IN NS kajuhome.com. yyy IN PTR kajuhome.com. |
ルートDNS情報を取得 # wget ftp://ftp.nic.ad.jp/internet/rs.internic.net/domain/named.root --17:15:43-- ftp://ftp.nic.ad.jp/internet/rs.internic.net/domain/named.root => `named.root' ftp.nic.ad.jp をDNSに問いあわせています... 202.12.30.115 ftp.nic.ad.jp[202.12.30.115]:21 に接続しています... 接続しました。 anonymous としてログインしています... ログインしました! ==> SYST ... 完了しました。 ==> PWD ... 完了しました。 ==> TYPE I ... 完了しました。 ==> CWD /internet/rs.internic.net/domain ... 完了しました。 ==> PASV ... 完了しました。 ==> RETR named.root ... 完了しました。 長さ: 2,517 (確証はありません) 100%[=====================================>] 2,517 --.--K/s 17:15:43 (1.22 MB/s) - `named.root' を保存しました [2517] 取得したDNS情報を移動 # mv named.root /var/named/named.ca mv: `/var/named/named.ca' を上書きしてもよろしいですか(yes/no)? y |
ホストファイルの確認 # vi /etc/hosts # Do not remove the following line, or various programs # that require network functionality will fail. 127.0.0.1 localhost.localdomain localhost #192.168.1.5 fedora.kajuhome.com fedora #192.168.1.10 client |
DNSサーバ指定ファイルの確認 # vi /etc/resolv.conf search kajuhome.com nameserver 192.168.1.5 |
名前解決をする順番を hostsファイル→dnsの順に名前解決します。(以外は除外。)
ネームサービススイッチの設定ファイルの設定 # vi /etc/nsswitch.conf #hosts: db files nisplus nis dns ↓ hosts: files dns |
名前解決を行う方法とその利用順序を記述するファイルの確認 # vi /etc/host.conf order hosts,bind |
bindサービスを起動する 【FC1 から Fedora14 / CentOS4 / CentOS5 / CentOS6 の場合】 # /etc/rc.d/init.d/named start 【Fedora15以降 / CentOS7 の場合】 # systemctl start named.service サービス起動に失敗する場合 ログ「/var/log/messages」に下記の様なメッセージが出力され起動しない場合は2つの要因が考えられます。 could not configure root hints from 'named.ca': permission denied loading configuration: permission denied 1.サービスがファイルを読み取る権限がない 対処:設定ファイルやゾーンファイルを含め「named」が読めるように変更 例)# chown named:named /var/named/named.ca 2.SELinuxが有効になっている為拒否される 対処:SELinuxを無効にする 参照:『セキュリティが仇となる?(インストール後のSELinux無効設定方法)』 |
|
|
|
Microsoft Windows XP [Version 5.1.2600] (C) Copyright 1985-2001 Microsoft Corp. nslookupの起動 C:\Documents and Settings\fedora>nslookup Default Server: kajuhome.com Address: 192.168.1.5 正引き試験 > kajuhome.com Server: kajuhome.com Address: 192.168.1.5 Name: kajuhome.com Address: 192.168.1.5 ← ローカルIPアドレスが返ってきた 正引き試験(CNAME) > www.kajuhome.com Server: kajuhome.com Address: 192.168.1.5 Name: kajuhome.com Address: 192.168.1.5 ← ローカルIPアドレスが返ってきた Aliases: www.kajuhome.com ← 別名(CNAME)で解決されている 正引き試験(ショート名) > client1 Server: kajuhome.com Address: 192.168.1.5 Name: client1.kajuhome.com Address: 192.168.1.10 ← ローカルIPアドレスが返ってきた 逆引き試験 > 192.168.1.5 Server: kajuhome.com Address: 192.168.1.5 Name: kajuhome.com ← ホスト名が返ってきた Address: 192.168.1.5 逆引き試験 > 192.168.1.20 Server: kajuhome.com Address: 192.168.1.5 Name: client2.kajuhome.com ← ホスト名が返ってきた Address: 192.168.1.20 nslookupを終了 > exit DOSを終了 C:\Documents and Settings\fedora>exit |
Microsoft Windows XP [Version 5.1.2600] (C) Copyright 1985-2001 Microsoft Corp. nslookupの起動 C:\Documents and Settings\fedora>nslookup Default Server: UnKnown Address: 172.16.12.251 問い合わせるDNSサーバを指定(自サーバのグローバルIPを指定する) 自サーバのグローバルIPアドレスを調べるのに問い合わせるDNSサーバへ 自サーバのグローバルIPアドレスを入力するのは不自然ですが、 bindの動作検証を行うのが目的ですのでご了承ください。 > server 221.151.xxx.yyy Default Server: [221.151.xxx.yyy] Address: 221.151.xxx.yyy 正引き試験 > kajuhome.com Server: [221.151.xxx.yyy] Address: 221.151.xxx.yyy Non-authoritative answer: Name: kajuhome.com Address: 221.151.xxx.yyy ← グローバルIPアドレスが返ってきた 正引き試験(CNAME) > www.kajuhome.com Server: [221.151.xxx.yyy] Address: 221.151.xxx.yyy 外向けゾーンには定義していない為、見つからないと返却された。 *** UnKnown can't find www.kajuhome.com: Non-existent domain また、内向きゾーンファイルも参照していない事も分かる。 正引き試験(試しに内部クライアントを問い合わせてみる) > client1.kajuhome.com Server: [221.151.xxx.yyy] Address: 221.151.xxx.yyy 外向けゾーンには定義していない為、見つからないと返却された。 *** UnKnown can't find client1.kajuhome.com: Non-existent domain また、内向きゾーンファイルも参照していない事も分かる。 逆引き試験 > 221.151.xxx.yyy Server: [221.151.xxx.yyy] Address: 221.151.xxx.yyy Name: kajuhome.com ← ホスト名が返ってきた Address: 221.151.xxx.yyy nslookupを終了 > exit DOSを終了 C:\Documents and Settings\fedora>exit |
named外部指定パラメータの追加 # vi /etc/sysconfig/named 最下位行に以下を追加する OPTIONS="-4" サービスの再起動 【FC1 から Fedora14 / CentOS4 / CentOS5 / CentOS6 の場合】 # /etc/rc.d/init.d/named restart 【Fedora15以降 / CentOS7 の場合】 # systemctl restart named.service 実行サービスの確認 # ps -ef | grep named | grep -v grep named 10726 1 0 09:18 ? 00:00:00 /usr/sbin/named -u named -4 上記の様に、オプションが追記されている事を確認 |
OSの再起動を行なった時にbind(DNSサーバ)を自動的に起動するように設定する
起動時にbindを起動する 【FC1 から Fedora14 / CentOS4 / CentOS5 / CentOS6 の場合】 # chkconfig named on 設定内容を確認 # chkconfig --list named named 0:オフ 1:オフ 2:オン 3:オン 4:オン 5:オン 6:オフ 【Fedora15以降 / CentOS7 の場合】 # systemctl enable named.service 設定内容を確認 # systemctl status named.service named.service - Berkeley Internet Name Domain (DNS) Loaded: loaded (/usr/lib/systemd/system/named.service; enabled) Active: active (running) since Sun, 17 Jun 2012 08:03:51 +0900; 1min 4s ago Main PID: 1209 (named) CGroup: name=systemd:/system/named.service └ 1209 /usr/sbin/named -u named -4 |
chrootとは、bind(named)プロセス等がchrootパスを「/」ルートと認識させ、万一乗っ取られた場合にそのパス以上にアクセスさせない為の機構です。
bindサービスを停止 【FC1 から Fedora14 / CentOS4 / CentOS5 / CentOS6 の場合】 # /etc/rc.d/init.d/named stop 【Fedora15以降 / CentOS7 の場合】 # systemctl stop named.service bind-chrootのインストール # yum -y install bind-chroot 【Fedora17のみ以下を追加実行】 # /usr/libexec/setup-named-chroot.sh /var/named/chroot on bind-chroot導入後(Fedora17除く)は「/etc/sysconfig/named」ファイル内の属性「BOOTDIR」で設定されているパスに サービス起動時に自動マウントされ「chroot」されます。 /etc/sysconfig/named」ファイルの「BOOTDIR」 # cat /etc/sysconfig/named | grep "^ROOTDIR" ROOTDIR=/var/named/chroot bindサービス起動前の「BOOTDIR」配下のbind関連ディレクトリ内容 # ls -l /var/named/chroot/etc/ 合計 12 -rw-r--r-- 1 root root 331 11月 12 18:38 2010 localtime drwxr-x--- 2 root named 4096 1月 10 18:13 2012 named drwxr-xr-x 3 root root 4096 5月 18 07:54 2012 pki # ls -l /var/named/chroot/var/named/ 合計 0 bindサービス起動後の「BOOTDIR」配下のbind関連ディレクトリ内容 # ls -l /var/named/chroot/etc/ 合計 28 -rw-r--r-- 1 root root 331 11月 12 18:38 2010 localtime drwxr-x--- 2 root named 4096 1月 10 18:13 2012 named -rw-r----- 1 root named 1581 1月 16 14:06 2012 named.conf -rw-r--r-- 1 root named 2544 1月 10 18:13 2012 named.iscdlv.key -rw-r----- 1 root named 931 6月 21 19:09 2007 named.rfc1912.zones -rw-r--r-- 1 root named 487 1月 10 18:13 2012 named.root.key drwxr-xr-x 3 root root 4096 5月 18 07:54 2012 pki # ls -l /var/named/chroot/var/named/ 合計 48 -rw-rw---- 1 root named 459 12月 16 12:48 2006 1.168.192.in-addr.arpa.db -rw-rw---- 1 root named 329 3月 14 23:12 2007 xxx.151.221.in-addr.arpa.db drwxr-x--- 6 root named 4096 5月 18 07:54 2012 chroot drwxrwx--- 2 named named 4096 5月 18 07:10 2012 data drwxrwx--- 2 named named 4096 1月 10 18:13 2012 dynamic -rw-rw---- 1 root named 492 12月 16 12:47 2006 kajuhome.com.lan -rw-rw---- 1 root named 388 3月 14 23:27 2007 kajuhome.com.wan -rw-rw---- 1 root named 2518 4月 16 23:52 2007 named.ca -rw-rw---- 1 root named 129 6月 21 19:09 2009 named.empty -rw-rw---- 1 root named 152 6月 21 19:09 2007 named.localhost -rw-rw---- 1 root named 145 6月 21 19:09 2009 named.loopback drwxrwx--- 2 named named 4096 1月 10 18:13 2012 slaves Fedora17(おそらく、bind-chrootのバージョン)では「setup-named-chroot.sh」にてオプションによる有効「on」に した直後に各設定ファイル(ゾーンファイルも含む)が上記ディレクトリに配置されます。 |
bind-chroot適用前のbindプロセス 注:Fedora17は除きます# ps -ef | grep named named 1956 1 0 13:43 ? 00:00:00 /usr/sbin/named -u named bind-chroot適用後のbindプロセス # ps -ef | grep named named 1827 1 1 13:42 ? 00:00:00 /usr/sbin/named -u named -t /var/named/chroot |
自前DNSサーバを外部に公開するに当たって、ルータの設定が必要です。
ルータのポート開閉は、ご自分のルータ取扱説明書をご覧ください。