LinuxでDNSサーバとしてデファクトスタンダードとなっている「BIND」は、キャッシュサーバと権威サーバの両方の機能を持つ。多機能であるがゆえ、脆弱性も多く見つかることから、本番環境で利用する際にはかなり気を使って構築する必要がある。
とはいえ、テスト用途として内部でDNSサーバが欲しい場合には、簡単にレコード設定ができるため重宝する。
今回は、BINDに対して必要最低限の設定を行い、DNS権威サーバとして動作させるまでの設定手順を記載する。
環境
以下の環境にてBINDを構築する。
- OS : RHEL 7.6
- Bind : BIND 9.9.4-RedHat-9.9.4-72.el7
- DNSサーバのIPアドレス : 192.168.11.191
- ドメイン :
example.com
、example2.com
BINDインストール手順
1. yum
を使ってインストール
まずはyum
を使ってBINDをインストールする。
# yum install bind bind-utils -y
読み込んだプラグイン:product-id, search-disabled-repos, subscription-manager
This system is not registered with an entitlement server. You can use subscription-manager to register.
リポジトリー 'dvd' は構成中に名前がありませんので ID を使います
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ bind.x86_64 32:9.9.4-72.el7 を インストール
~(中略)~
インストール:
bind.x86_64 32:9.9.4-72.el7 bind-utils.x86_64 32:9.9.4-72.el7
依存性関連をインストールしました:
audit-libs-python.x86_64 0:2.8.4-4.el7
bind-libs.x86_64 32:9.9.4-72.el7
checkpolicy.x86_64 0:2.5-8.el7
libcgroup.x86_64 0:0.41-20.el7
libsemanage-python.x86_64 0:2.5-14.el7
policycoreutils-python.x86_64 0:2.5-29.el7
python-IPy.noarch 0:0.75-6.el7
python-ply.noarch 0:3.4-11.el7
setools-libs.x86_64 0:3.3.8-4.el7
完了しました!
2. 初期設定
BINDの設定ファイルは/etc/named.conf
となる。最低限動作させるために以下設定を行う。
設定値 | 説明 |
---|---|
listen-on port 53 { any; }; |
デフォルトでは127.0.0.1 のみ許可されており、外部からの名前解決を受付できないようになっているため、any に変更する。 |
allow-query { any; }; |
フォルトではlocalhost のみ許可されており、外部からの名前解決を受付できないようになっているため、any に変更する。 |
recursion no; |
再帰的問い合わせは不要となるため、no とする。 |
zone "[ドメイン名]." IN { ~(省略)~ }; |
ゾーンの設定を記載する。file にはゾーン情報を記載したゾーンファイルのファイル名を記載し、それ以外は定型文として後述する設定例のように記載すればよい。 |
以下が実際に設定した/etc/named.conf
の記載例となる。
options {
listen-on port 53 { any; };
~(中略)~
allow-query { any; };
~(中略)~
recursion no;
~(中略)~
};
~(中略)~
zone "example.com." IN {
type master;
file "example.com.zone";
allow-update { none; };
};
zone "example2.com." IN {
type master;
file "example2.com.zone";
allow-update { none; };
};
3. DNSゾーンファイルを作成
/var/named/
配下にDNSレコードを記載したゾーンファイルを配置する。ファイル名はnamed.conf
にてfile
にて記載したファイル名で配置する。たとえば、example2.com
のドメインであれば、/var/named/example2.com.zone
にゾーンファイルを作成すればよい。
以下、ゾーンファイルexample2.com.zone
の記載例となる。NSレコード、MXレコード、SPFレコード (TXTレコード) 、Aレコードを一通り設定している。
# cat /var/named/example2.com.zone
$TTL 3600
@ IN SOA ns.example2.com. root.example2.com.(
2020082801 ; Serial
10800 ; Refresh
3600 ; Retry
604800 ; Expire
10800 ) ; Minimum
;
IN NS ns.example2.com.
IN MX 10 mail.example2.com.
IN TXT "v=spf1 +ip4:192.168.11.191 +ip4:192.168.11.192 -all"
;
ns IN A 192.168.11.191
mail IN A 192.168.11.192
4. configチェックとBIND起動
BINDのconfigチェック用にnamed-checkconf
というコマンドが用意されているので、実行しておこう。特にメッセージが表示されなければOKとなる。
# named-checkconf
# echo $?
0
configに問題がなければ、BINDを起動させる。
# systemctl start named
# systemctl enable named
# systemctl status named
● named.service - Berkeley Internet Name Domain (DNS)
Loaded: loaded (/usr/lib/systemd/system/named.service; enabled; vendor preset: disabled)
Active: active (running) since 土 2021-08-28 11:27:30 JST; 10s ago
Main PID: 12922 (named)
CGroup: /system.slice/named.service
mq12922 /usr/sbin/named -u named -c /etc/named.conf
8月 28 11:27:37 RHEL7 named[12922]: network unreachable resolving './DNSK...53
8月 28 11:27:37 RHEL7 named[12922]: network unreachable resolving './DNSK...53
8月 28 11:27:37 RHEL7 named[12922]: network unreachable resolving './NS/I...53
8月 28 11:27:37 RHEL7 named[12922]: network unreachable resolving './NS/I...53
8月 28 11:27:37 RHEL7 named[12922]: network unreachable resolving './NS/I...53
8月 28 11:27:38 RHEL7 named[12922]: network unreachable resolving './DNSK...53
8月 28 11:27:38 RHEL7 named[12922]: network unreachable resolving './NS/I...53
8月 28 11:27:39 RHEL7 named[12922]: network unreachable resolving './DNSK...53
8月 28 11:27:39 RHEL7 named[12922]: network unreachable resolving './NS/I...53
8月 28 11:27:40 RHEL7 named[12922]: managed-keys-zone: Unable to fetch DN...ut
Hint: Some lines were ellipsized, use -l to show in full.
5. 動作確認
実際にBINDに対して名前解決ができることを確認しておこう。他サーバからdig
コマンドを使ってレコードの確認を行うと、以下の通りゾーンファイルで設定したレコード情報を取得することができた。
# dig @192.168.11.191 -t any example2.com
; <<>> DiG 9.11.26-RedHat-9.11.26-4.el8_4 <<>> @192.168.11.191 -t any example2.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 29678
;; flags: qr aa rd; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 3
;; WARNING: recursion requested but not available
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;example2.com. IN ANY
;; ANSWER SECTION:
example2.com. 3600 IN SOA ns.example2.com. root.example2.com. 2020082801 10800 3600 604800 10800
example2.com. 3600 IN NS ns.example2.com.
example2.com. 3600 IN MX 10 mail.example2.com.
example2.com. 3600 IN TXT "v=spf1 +ip4:192.168.11.191 +ip4:192.168.11.192 -all"
;; ADDITIONAL SECTION:
ns.example2.com. 3600 IN A 192.168.11.191
mail.example2.com. 3600 IN A 192.168.11.192
;; Query time: 2 msec
;; SERVER: 192.168.11.191#53(192.168.11.191)
;; WHEN: 日 9月 19 15:27:56 JST 2021
;; MSG SIZE rcvd: 216
以上でBINDの設定は完了となる。
0 件のコメント:
コメントを投稿