#概要
CentOS7.1を使用して、内部向けDNSを構築します。
DNSサーバーとして、BIND 9.9.4を使用します。
各種サイトや構築を通じて、自分なりの理解した内容などを記載していきます。
以下URLを参考にしました。
http://centossrv.com/bind.shtml
http://www.itmedia.co.jp/keywords/bind_tsukuru_dns_server.html
http://www.atmarkit.co.jp/ait/articles/0309/09/news001.html
http://www.atmarkit.co.jp/ait/articles/0310/15/news001.html
http://qiita.com/shrkw/items/8410e9cb65eb789a40e1
#DNS構築
##DNSインストールディレクトリ構成
CentOS7.1でyumコマンドを使用した、BINDのディレクトリ構成を下に書きます。
chrootとは
BINDのサービス「named-chroot」によって、DNSのプロセスがアクセス可能な範囲を制限します。
内部的にchrootコマンドを使用しているはずです(名前的に)
DNSでなぜ必要かというと、DNSサーバーは基本的に世界中に公開するので、悪い人から攻撃を受ける恐れがあります。
そこで、DNS関係のプロセスの参照出来る範囲を制限することにより、
万が一ユーザー権限を奪われてしまっても、大事なファイルは参照出来なくさせます。
今回のDNS設定では /var/named/chroot/ が DNSプロセスにとってのルートディレクトリになります。
詳しくはhttp://www.atmarkit.co.jp/ait/articles/0309/09/news001.html
##インストール
bind(DNSサーバープログラム)と、bind-chroot(BIND用にカスタマイズされたchrootプログラム?)をインストールします。
[root@mng-server ~]# yum -y install bind bind-chroot
bind-chrootのインストールで生成された、chroot化スクリプトを実行します。
[root@mng-server ~]# /usr/libexec/setup-named-chroot.sh /var/named/chroot on
これを実行することにより、以下のようにディレクトリやファイルがマウントされます。
スクリプトをoffにすると、mount先のファイルが綺麗になくなって、mount元にのみ存在します。
また、BIND設定完了後に起動するサービス「named-chroot」によっても、マウントされます。
今まで触っていたファイルが急に消えてなくなるように見えるため、注意が必要です。
mount元 | mount先 |
---|---|
/etc/named | /var/named/chroot/etc/named |
/etc/named.root.key | /var/named/chroot/etc/named.root.key |
/etc/named.conf | /var/named/chroot/etc/named.conf |
/etc/named.rfc1912.zone | /var/named/chroot/etc/named.rfc1912.zones |
/etc/rndc.key | /var/named/chroot/etc/rndc.key |
/etc/named.iscdlv.key | /var/named/chroot/etc/named.iscdlv.key |
/run/named | /var/named/chroot/run/named |
/var/named | /var/named/chroot/var/named |
/usr/lib64/bind | /var/named/chroot/usr/lib64/bind |
##named.confの作成
各種サイトを調べて、自分なりの理解した内容を書きます。
間違っている可能性も十分あるので注意してください。
BINDを構築する上での、大元の設定ファイルが named.conf です。
今回の構成では、/var/named/chroot/etc/named.conf が格納先になります。
chrootでマウントされているので、実体は/etc/named.confに有ります。
まずはファイル全体の中身を以下のように変更します。
環境に依存する内容もあるので、適宜修正してください。
/* 内部セグメントを定義 */
acl "mylabo-network" {
192.168.11.0/24;
192.168.12.0/24;
192.168.13.0/24;
192.168.14.0/24;
192.168.15.0/24;
};
options {
#listen-on port 53 { 127.0.0.1; };
listen-on-v6 port 53 { ::1; } ; //IPv6は使用しません
version "unknown";
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; mylabo-network; }; //内部セグメントからの問い合わせのみ許可します
/*
- 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は無効にします */
dnssec-enable no;
dnssec-validation no;
//dnssec-lookaside auto;
managed-keys-directory "/var/named/dynamic";
/* Path to ISC DLV key */
bindkeys-file "/etc/named.iscdlv.key";
/* 自分自身で名前解決出来ない場合は、上位のDNSサーバー(自宅ルーター)にフォワードします */
forwarders {
192.168.11.1;
};
forward only;
pid-file "/run/named/named.pid";
session-keyfile "/run/named/session.key";
};
logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
category lame-servers { null; }; //追加(error (connection refused) resolvingというエラーログの出力抑止)
};
view "internal" {
/* 最上部で定義したローカルネットワークを、内部問い合わせとして定義します */
match-clients { localhost; mylabo-network; };
match-destinations { localhost; mylabo-network; };
zone "." IN {
type hint;
file "named.ca";
};
/* 正引きゾーン */
zone "mylabo.local" IN {
type master;
file "mylabo.local.lan";
};
/* 逆引きゾーン */
zone "11.168.192.in-addr.arpa" {
type master;
file "11.168.192.in-addr.arpa.rev";
};
zone "14.168.192.in-addr.arpa" {
type master;
file "14.168.192.in-addr.arpa.rev";
};
zone "15.168.192.in-addr.arpa" {
type master;
file "15.168.192.in-addr.arpa.rev";
};
include "/etc/named.rfc1912.zones"; //localhostなどの定義
include "/etc/named.root.key";
};
/* 内部むけDNSなので、外部向けのViewはコメントアウト
view "external" {
match-clients { any; };
match-destinations { any; };
recursion no;
};
*/
###named.confの構成について
named.confは大きく分けて、↓の4種類のカテゴリに分かれます。
acl "任意のacl名称" {
省略
};
options {
省略
};
logging {
省略
};
view "任意のview名称" {
省略
};
一つずつ簡単に解説します。
####1カテゴリ目:acl(access control list)
named.confを編集していく上で、ネットワークアドレスなどを指定して、
アクセス可否などを設定する箇所があります。
例えば5セグメントを指定したい時は、5セグメント分書いても動作しますが、
いちいち書くのがめんどくさいので、名前を付ける事が出来ます。
今回のサンプルではmylabo-networkを定義しました。
/* 内部セグメントを定義 */
acl "mylabo-network" {
192.168.11.0/24;
192.168.12.0/24;
192.168.13.0/24;
192.168.14.0/24;
192.168.15.0/24;
};
↑の定義をすると、↓のように、他の設定項目で使用できる名前となります。
allow-query { localhost; mylabo-network; }; //内部セグメントからの問い合わせのみ許可します
####2カテゴリ目:options
BINDの色々な動作を指定します。
大事なポイントやデフォルトから変更したところを説明していきます。
#listen-on port 53 { 127.0.0.1; };
listen-on-v6 port 53 { ::1; } ; //IPv6は使用しません
BINDが名前解決を受け付けるNICインターフェースのIPアドレスを指定します。
例えば「listen-on port 53 { 127.0.0.1; };」の設定値なら、「127.0.0.1」のインターフェースへの
アクセスのみ受け付ける形になるので、自分自身しか名前解決をすることが出来ない構成になります。
それでは困るので、コメントアウトします。
「listen-on-v6 port 53 { ::1; } ;」はIPv6なので、今回は使用しません。
このまま自分自身のみ受け付ける設定にします。
version "unknown";
BINDのバージョンを記載している箇所になりますが、ここに正しいバージョン書くと
外部からのBINDのバージョンを確認出来てしまうので、
脆弱性を攻撃されやすくなってしまいます。
なので、unknownにして隠します。
directory "/var/named";
named.confが4カテゴリに分けられるうちの、3カテゴリ目(logging)、4カテゴリ目(view)で
各種ファイルへの参照を指定するのですが、それらのカレントディレクトリをここで指定します。
今回の構成ではchroot構成なので、絶対パスは「/var/named/chroot/var/named」です。
混乱しやすいところなので注意しましょう。
allow-query { localhost; mylabo-network; }; //内部セグメントからの問い合わせのみ許可します
名前解決を受け付ける、DNSクライアントのIPアドレスを指定します。
mylabo-network は1カテゴリ目(acl)で定義しました。
recursion yes; // インターネットに接続するので、フルサービスリゾルバ(キャッシュサーバ)としても動作させます
yesにすると、自分自身で解決出来ない問い合わせに対して、ほかのDNSサーバたちを使用して再帰問い合わせをします。
noではしません。
/* DNSSECは無効にします */
dnssec-enable no;
dnssec-validation no;
//dnssec-lookaside auto;
managed-keys-directory "/var/named/dynamic";
DNSSECというセキュリティ機能の仕様有無を指定します。
公開鍵暗号方式を使用してセキュィティ向上を図るようです。
今回は使用しません。
/* 自分自身で名前解決出来ない場合は、上位のDNSサーバー(自宅ルーター)にフォワードします */
forwarders {
192.168.11.1;
};
forward only;
コメントにも書いてますが、他のDNSへフォワードする際のIPアドレスを指定します。
「forward only;」の箇所がよくわかってないので、詳しい方、是非教えてください。
forward には二種類の指定があり、 only か first です。
以下説明引用
このオプションは、forwarders オプションが記述されているときのみ有効になる。
first を指定すると、最初に(キャッシュの中に答えが見つからなければ) forwarders で指定した
ネームサーバに問い合わせ、もし答えが得られなければ次に自分自身で答えを見つけようとする。
only を指定すると、単純に forwarders で指定したネームサーバに問い合わせる。
デフォルトは first。
LAN 内のネームサーバのような、インターネットに直接問い合わせをさせたくないサーバで使用される。
引用終了
onlyにするとインターネット上にあるサーバーの名前解決(google.co.jp)が出来たのですが、
firstではできませんでした。
上記の説明では、firstでも外部へ名前解決してくれそうな内容ですが、してくれませんでした。謎です。
####3カテゴリ目:logging
DNSの各種ログファイルの出力を設定します。
channel default_debug {
file "data/named.run";
severity dynamic;
};
category lame-servers { null; }; //追加(error (connection refused) resolvingというエラーログの出力抑止)
上記はデフォルトのログ出力に、「category lame-servers { null; };」を加えました。
また、BINDの名前解決をする際のデバッグ出力の例を以下に書きます。
logging {
channel "default_debug" {
file "data/named.run";
severity debug;
print-time yes;
print-severity yes;
print-category yes;
};
category queries { "default_debug"; };
category resolver { "default_debug"; };
category lame-servers { null; }; //追加(error (connection refused) resolvingというエラーログの出力抑止)
channel "default_debug"のseverity をdebugにすることにより、ログ出力のレベルを指定します。
下記3種類のyesの指定は、ログ内に時間やログの内容・ログレベル(debugとかinfoとか)を出力します。
これら出力されないとわかりにくいので、yesが良いと思います。
print-time yes;
print-severity yes;
print-category yes;
ログ出力の例
18-Dec-2015 23:49:38.702 queries: info: client 127.0.0.1#54599 (torapc.mylabo.local): view internal: query: torapc.mylabo.local IN A + (127.0.0.1)
18-Dec-2015 23:49:38.703 queries: info: client 127.0.0.1#57318 (3.11.168.192.in-addr.arpa): view internal: query: 3.11.168.192.in-addr.arpa IN PTR + (127.0.0.1)
18-Dec-2015 23:49:39.705 queries: info: client 127.0.0.1#34290 (3.11.168.192.in-addr.arpa): view internal: query: 3.11.168.192.in-addr.arpa IN PTR + (127.0.0.1)
18-Dec-2015 23:49:45.654 queries: info: client 127.0.0.1#38613 (google.co.jp): view internal: query: google.co.jp IN A + (127.0.0.1)
18-Dec-2015 23:49:45.654 resolver: debug 1: createfetch: google.co.jp A
18-Dec-2015 23:49:45.669 queries: info: client 127.0.0.1#33558 (207.126.194.173.in-addr.arpa): view internal: query: 207.126.194.173.in-addr.arpa IN PTR + (127.0.0.1)
18-Dec-2015 23:49:45.669 resolver: debug 1: createfetch: 207.126.194.173.in-addr.arpa PTR
18-Dec-2015 23:49:46.669 queries: info: client 127.0.0.1#51301 (207.126.194.173.in-addr.arpa): view internal: query: 207.126.194.173.in-addr.arpa IN PTR + (127.0.0.1)
↓のページにloggingの詳細が書かれています。
http://www.atmarkit.co.jp/ait/articles/0310/15/news001.html
####4カテゴリ目:view
viewの基本的な使い方は、内部向けの名前解決の処理方法と、外部向けの処理方法を分けて設定することが出来ます。
view "internal" で内部向けの設定、view "external"で外部向けの設定を加えるのが一般的です。
viewの名前は任意の名前を設定することが出来ます。
/* 最上部で定義したローカルネットワークを、内部問い合わせとして定義します */
match-clients { localhost; mylabo-network; };
match-destinations { localhost; mylabo-network; };
viewで処理するための条件をここで指定します。
match-clientsでは、名前解決の要求元のIPアドレスを指定します。
自分自身と、内部ネットワークをview "internal"として定義します。
match-destinationsの指定は、BINDサーバーのインターフェースのIPアドレスを指定します。
例えば、192.168.15.1のインターフェース用のviewを定義、
192.168.16.1用のviewを定義、といったようにインターフェースごとに処理方法を分けることが可能です。
今回は特に分割する必要がないので、「localhost; mylabo-network;」としてますが、
これはネットワークアドレスでの指定ですので、正確な指定ではありませんね(´-`)
zone "." IN {
type hint;
file "named.ca";
};
DNSのルートドメインの指定です。
この指定は他のサーバーでも同一のものになります。
type でhintと指定しているので、ルートドメイン用の定義になります。
file で指定しているのが、他のファイルへの参照を表しています。
optionカテゴリのdirectoryでカレントディレクトリを指定していますので、
「/var/named/chroot/var/named/named.ca」のファイルを参照してください、という意味になります。
chroot環境なので、注意が必要です。
named.caファイルは、インストール時にデフォルトで生成されます。
/* 正引きゾーン */
zone "mylabo.local" IN {
type master;
file "mylabo.local.lan";
};
正引き用のゾーンの指定です。
zone でDNSのサフィックスを定義できます。
type でmasterと指定しているので、DNSプライマリサーバーであることを表しています。
slave と指定すると、セカンダリサーバーとなります。
fileで正引き用のゾーンファイルを指定しています。
「/var/named/chroot/var/named/mylabo.local.lan」を参照します。
/* 逆引きゾーン */
zone "11.168.192.in-addr.arpa" {
type master;
file "11.168.192.in-addr.arpa.rev";
};
zone "14.168.192.in-addr.arpa" {
type master;
file "14.168.192.in-addr.arpa.rev";
};
zone "15.168.192.in-addr.arpa" {
type master;
file "15.168.192.in-addr.arpa.rev";
};
逆引き用のゾーンの指定です。
zoneの指定方法が特殊ですが、それ以外は正引き用と変わりません。
今回逆引きしたいのは3セグメントあるので、3つの定義があります。
192.168.11.0/24のセグメント用の定義が一番上のものになります。
ネットワークセグメントを逆順に記載するのと、末尾に「.in-addr.arpa」を追加する必要があります。
「.in-addr.arpa」を付与することで、正引きと同じ機能を使って、逆引きを出来るようにします。
例)
torapc.mylabo.local→正引き→192.168.11.3
3.11.168.192.in-addr.arpa→正引き→torapc.mylabo.local
「3.11.168.192.in-addr.arpa」というホスト名として、正引きをする処理となります。
include "/etc/named.rfc1912.zones"; //localhostなどの定義
include "/etc/named.root.key";
named.confファイルは、includeを使用して、外部にあるファイルから定義を引用することが出来ます。
ローカルホストの定義や、ルートドメイン用のファイルは、それぞれのBINDで定義するよりも
一個のファイルを流用したほうが整理しやすくなります。
「named.rfc1912.zones」の中身を下に書きます。
// named.rfc1912.zones:
//
// Provided by Red Hat caching-nameserver package
//
// ISC BIND named zone configuration for zones recommended by
// RFC 1912 section 4.1 : localhost TLDs and address zones
// and http://www.ietf.org/internet-drafts/draft-ietf-dnsop-default-local-zones-02.txt
// (c)2007 R W Franks
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
zone "localhost.localdomain" IN {
type master;
file "named.localhost";
allow-update { none; };
};
zone "localhost" IN {
type master;
file "named.localhost";
allow-update { none; };
};
zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {
type master;
file "named.loopback";
allow-update { none; };
};
zone "1.0.0.127.in-addr.arpa" IN {
type master;
file "named.loopback";
allow-update { none; };
};
zone "0.in-addr.arpa" IN {
type master;
file "named.empty";
allow-update { none; };
};
IPv4, IPv6のローカルホスト用の正引き、逆引きが定義されていることがわかります。
##ゾーンファイルの作成
ゾーンファイル(名前解決のための情報)を作成します。
今回の例では正引き1種類。
逆引き3種類のファイルを作成します。
###正引き用ファイルについて
/var/named/chroot/var/named/の直下に
mylabo.local.lanファイルを作成します。
$TTL 3600
@ IN SOA mng-server.mylabo.local. root.mylabo.local. (
2015121701 ; serial
3600 ; refresh 1hr
900 ; retry 15min
604800 ; expire 1w
86400 ; min 24hr
)
IN NS mng-server.mylabo.local.
torapc IN A 192.168.11.3
storage IN A 192.168.14.253
ESXi-Primary IN A 192.168.15.50
ESXi-Secondary IN A 192.168.15.51
vCenter IN A 192.168.15.252
mng-server IN A 192.168.15.253
各種要素を下で説明していきます。
$TTL 3600
3600秒間(1時間)このゾーンの内容が、他のDNSサーバーにキャッシュされることを表しています。
これを長くしすぎると、ゾーンファイルを更新しても、なかなか他のサーバーへ情報が浸透しないことになります。
即反映させるには、ほかのDNSサーバーのキャッシュを全てクリアする必要があるのですが、
現実的ではありません。というかムリです。なのでそこそこの時間にするのが良いのかなと思います。
@ IN SOA mng-server.mylabo.local. root.mylabo.local. (
2015121701 ; serial
3600 ; refresh 1hr
900 ; retry 15min
604800 ; expire 1w
86400 ; min 24hr
)
SOA(Start Of Authority)レコードの定義です。
SOAレコードについて簡単に説明すると、「私はこのドメインの情報を管理します」という宣言です。
上記の例では、「mylabo.local」ドメインを管理しているDNSサーバーは、
「mng-server.mylabo.local.」ということを表しています。
(ドメインの正確な定義については無視します)
それでは1つずつ解説していきます。
@
自分自身のゾーン名を表しています。直接 mng-server.mylabo.local.と書いても問題ありません。
IN
決まり文句です。InterNetから取られているとか、INternet から取られているとか言われています。(どっちでもいい)
SOA
レコードの種類を表しています。IN SOAとか、IN NSとか、INT A とか指定が可能です。
mng-server.mylabo.local.
MNAMEです。
ゾーンファイルの基となるデータを持つネームサーバの名前を表しています。
基本的に自分自身になります。
root.mylabo.local.
RNAMEです。このゾーンを管理する管理者のメールアドレスを表しています。
メールアドレスの@を.に変換するらしいので、
root@mylabo.local. というメールアドレスになります。
( )でくくられた各種設定値
DNSセカンダリサーバーと連携する際の各種設定値を指定することが出来ます。
serial
ゾーンファイルのバージョンを表す数字です。
年月日2桁の昇順の数字 を書く場合が多いです。
ゾーンファイルが大きいと新しいバージョンと認識されるので、
セカンダリサーバーはプライマリサーバーのバージョンを見に行き、
バージョンが大きければゾーン転送をすることになります。
年月日で書くと、管理しやすいことがわかります。
refresh
ゾーンの情報をリフレッシュするまでの時間です。
DNSセカンダリサーバはゾーン転送をした後、この時間経過後、
ゾーンの更新がされたかを問い合わせ、必要に応じて再度データを手に入れようとします
この時に、上のserialを使用してバージョンを比較します。
retry
refreshでゾーン情報の更新ができなかった場合に、
retryで指定された時間後に再度リフレッシュを試みます。
expire
何らかの理由でゾーン情報のリフレッシュができない状態が続いた場合、
セカンダリネームサーバが持っているデータをどれだけの時間利用してもよいかを示します。
min(Negative cache TTL)
ネガティブキャッシュとは、存在しないドメイン名であるという情報のキャッシュを意味します
(ネガティブキャッシュの維持する時間)
存在しないことを問い合わせの都度確認すると時間がかかりますし、上位DNSサーバーへの負荷もかかるので、
キャッシュとして保持します。
IN NS mng-server.mylabo.local.
NSレコードです。決まり文句なので、自分自身の情報を書きましょう
torapc IN A 192.168.11.3
share-storage IN A 192.168.14.253
ESXi-Primary IN A 192.168.15.50
ESXi-Secondary IN A 192.168.15.51
vCenter IN A 192.168.15.252
mng-server IN A 192.168.15.253
Aレコードです。各種ホスト名のIPアドレスを定義していきます。
###逆引き用ファイルについて
3セグメント分の逆引き用ファイルを作成します。
基本的には正引き用ファイルと構成は同じです。
Aレコードの代わりにPTRレコードで、逆引き用の情報を定義します。
$TTL 3600
@ IN SOA mng-server.mylabo.local. root.mylabo.local. (
2015121701 ; serial
3600 ; refresh 1hr
900 ; retry 15min
604800 ; expire 1w
86400 ; min 24hr
)
IN NS mng-server.mylabo.local.
3 IN PTR torapc.mylabo.local.
$TTL 3600
@ IN SOA mng-server.mylabo.local. root.mylabo.local. (
2015121701 ; serial
3600 ; refresh 1hr
900 ; retry 15min
604800 ; expire 1w
86400 ; min 24hr
)
IN NS mng-server.mylabo.local.
253 IN PTR share-storage.mylabo.local.
$TTL 3600
@ IN SOA mng-server.mylabo.local. root.mylabo.local. (
2015121701 ; serial
3600 ; refresh 1hr
900 ; retry 15min
604800 ; expire 1w
86400 ; min 24hr
)
IN NS mng-server.mylabo.local.
50 IN PTR ESXi-Primary.mylabo.local.
51 IN PTR ESXi-Secondary.mylabo.local.
252 IN PTR vCenter.mylabo.local.
253 IN PTR mng-server.mylabo.local.
##ファイアウォールのDNSポート解放
firewalldを使用してDNSポート(TCP:53 UDP:53)を解放します。
参考にしました
http://qiita.com/shrkw/items/8410e9cb65eb789a40e1
firewalldを止めていたので、有効にします。
[root@mng-server ~]# systemctl start firewalld
[root@mng-server ~]#
[root@mng-server ~]# systemctl enable firewalld
ln -s '/usr/lib/systemd/system/firewalld.service' '/etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service'
ln -s '/usr/lib/systemd/system/firewalld.service' '/etc/systemd/system/basic.target.wants/firewalld.service'
[root@mng-server ~]# systemctl status firewalld
firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled)
Active: active (running) since 日 2015-12-20 13:47:27 JST; 12s ago
Main PID: 2201 (firewalld)
CGroup: /system.slice/firewalld.service
└─2201 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid
12月 20 13:47:27 mng-server.mylabo.local systemd[1]: Started firewalld - dynamic firewall daemon.
firewalldで現在使用しているゾーンを表示します。
[root@mng-server ~]# firewall-cmd --list-all
public (default, active)
interfaces: eno16777984
sources:
services: dhcpv6-client ssh
ports:
masquerade: no
forward-ports:
icmp-blocks:
rich rules:
eno16777984のインターフェースが、ゾーンpublicで稼働しています。
servicesの項目が、ポート解放しているサービスです。
dnsが無いので追加しますが、その前にdnsサービスの定義内容を念のため確認します。
[root@mng-server ~]# cat /usr/lib/firewalld/services/dns.xml
<?xml version="1.0" encoding="utf-8"?>
<service>
<short>DNS</short>
<description>The Domain Name System (DNS) is used to provide and request host and domain names. Enable this option, if you plan to provide a domain name service (e.g. with bind).</description>
<port protocol="tcp" port="53"/>
<port protocol="udp" port="53"/>
</service>
tcp 53, udp 53が定義されています。
ではpublicゾーンにdnsを追加します。
[root@mng-server ~]# firewall-cmd --list-services --zone=public --permanent
dhcpv6-client ssh
[root@mng-server ~]# firewall-cmd --add-service=dns --zone=public --permanent
success
[root@mng-server ~]# firewall-cmd --list-services --zone=public --permanent
dhcpv6-client dns ssh
リロードして有効化します。
[root@mng-server ~]# firewall-cmd --reload
success
##BIND起動
ここまで構築したら、あとはサービス起動できます。
[root@mng-server named]# systemctl start named-chroot
[root@mng-server named]# systemctl enable named-chroot ← 自動起動設定
ln -s '/usr/lib/systemd/system/named-chroot.service' '/etc/systemd/system/multi-user.target.wants/named-chroot.service'
##名前解決確認
###正引き
digコマンドで正引きを確認します。
[root@mng-server ~]# dig torapc.mylabo.local.
; <<>> DiG 9.9.4-RedHat-9.9.4-18.el7_1.5 <<>> torapc.mylabo.local.
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 45901
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;torapc.mylabo.local. IN A
;; ANSWER SECTION:
torapc.mylabo.local. 3600 IN A 192.168.11.3
;; AUTHORITY SECTION:
mylabo.local. 3600 IN NS mng-server.mylabo.local.
;; ADDITIONAL SECTION:
mng-server.mylabo.local. 3600 IN A 192.168.15.253
;; Query time: 0 msec
;; SERVER: 192.168.15.253#53(192.168.15.253)
;; WHEN: 木 12月 17 23:03:49 JST 2015
;; MSG SIZE rcvd: 105
;; ANSWER SECTION:の1行下に名前解決のレコードが表示されました。
###逆引き
こちらもdigコマンド -x で逆引きを確認します。
[root@mng-server named]# dig -x 192.168.11.3
; <<>> DiG 9.9.4-RedHat-9.9.4-18.el7_1.5 <<>> -x 192.168.11.3
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 54774
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;3.11.168.192.in-addr.arpa. IN PTR
;; ANSWER SECTION:
3.11.168.192.in-addr.arpa. 3600 IN PTR torapc.mylabo.local.
;; AUTHORITY SECTION:
11.168.192.in-addr.arpa. 3600 IN NS mng-server.mylabo.local.
;; ADDITIONAL SECTION:
mng-server.mylabo.local. 3600 IN A 192.168.15.253
;; Query time: 0 msec
;; SERVER: 192.168.15.253#53(192.168.15.253)
;; WHEN: 木 12月 17 23:18:13 JST 2015
;; MSG SIZE rcvd: 128