CentOSでBINDでDNSサーバを立てて、正引きと逆引きと設定と、digやnslookupコマンドによる確認方法について説明します。
まず、BINDをインストールします。インストール時は bind ですが、サービス名は named です。
~]# yum install bind
~]# systemctl start named
次に設定ファイルを修正して、待ち受けIPアドレス (listen-on) と問い合わせ可能IPアドレス (allow-query) を設定します。 また、ここではテストで example.local というゾーンを定義します。
/etc/named.conf
options {
#listen-on port 53 { 127.0.0.1; };
listen-on port 53 { 192.168.56.102; };
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";
secroots-file "/var/named/data/named.secroots";
recursing-file "/var/named/data/named.recursing";
#allow-query { localhost; };
allow-query { 192.168.56.0/24; };
recursion yes; # 外部に公開する場合はnoに変更すること(DNS増幅攻撃への対策)
dnssec-enable yes;
dnssec-validation yes;
managed-keys-directory "/var/named/dynamic";
pid-file "/run/named/named.pid";
session-keyfile "/run/named/session.key";
/* https://fedoraproject.org/wiki/Changes/CryptoPolicy */
include "/etc/crypto-policies/back-ends/bind.config";
};
logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
zone "." IN {
type hint;
file "named.ca";
};
# 正引き
zone "example.local" IN {
type master;
file "example.local";
allow-update { none; };
};
# 逆引き
zone "56.168.192.in-addr.arpa" {
type master;
file "example.local.rev";
};
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
次に、正引きと逆引きをするためのファイルを配置します。 正引きでは、server01.example.local を正引きすると 192.168.56.101 になるように設定ファイルを書きます。
/var/named/example.local (正引き用ファイル)
$TTL 86400
@ IN SOA server01.example.local. root.example.local.(
2020020501 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN NS server01.example.local.
server01 IN A 192.168.56.101
server02 IN A 192.168.56.102
逆引きでは、192.168.56.101 を逆引きすると server01.example.local が得られるように設定ファイルを書きます。
/var/named/example.local.rev (逆引き用ファイル)
$TTL 86400
@ IN SOA server01.example.local. root.example.local.(
2020020501 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN NS server01.example.local.
101 IN PTR server01.example.local.
102 IN PTR server02.example.local.
設定後は named-checkconf でBINDの設定が正しいか確認してから、named.confとゾーン情報をリロードします。 起動後は、namedが53/udpで起動しているか確認します。
~]# named-checkconf
~]# rndc reload
~]# ss -ualpn
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
UNCONN 0 0 192.168.56.102:53 0.0.0.0:* users:(("named",pid=10870,fd=512))
UNCONN 0 0 [::1]:53 [::]:* users:(("named",pid=10870,fd=513))
別のPCやサーバからDNS問い合わせをする際はFirewallを修正して、53/udp のパケットが通過できるように設定します。
~]# firewall-cmd --add-service=dns --permanent
~]# firewall-cmd --reload
~]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: enp0s3 enp0s8
sources:
services: cockpit dhcpv6-client dns ssh
...省略...
正引き
準備ができたら dig でDNS問い合わせをしてみます。 PCの設定で問い合わせ先のDNSを変更するのは面倒なので、digの @ で問い合わせ先DNSサーバのIPを指定して問い合わせます。 コマンドを入力すると以下のように server01.example.local を正引きすると 192.168.56.101 であることがわかりました。
~]$ dig @192.168.56.102 server01.example.local
;; QUESTION SECTION:
;server01.example.local. IN A
;; ANSWER SECTION:
server01.example.local. 86400 IN A 192.168.56.101
;; AUTHORITY SECTION:
example.local. 86400 IN NS server01.example.local.
nslookup を使う場合は、2番目の引数にDNSサーバのIPを指定します。
~]$ nslookup server01.example.local 192.168.56.102
Server: 192.168.56.102
Address: 192.168.56.102#53
Name: server01.example.local
Address: 192.168.56.101
逆引き
digで逆引きする場合は -x オプションでIPを指定します。
~]$ dig @192.168.56.102 -x 192.168.56.101
...省略...
;; QUESTION SECTION:
;101.56.168.192.in-addr.arpa. IN PTR
;; ANSWER SECTION:
101.56.168.192.in-addr.arpa. 86400 IN PTR server01.example.local.
;; AUTHORITY SECTION:
56.168.192.in-addr.arpa. 86400 IN NS server01.example.local.
;; ADDITIONAL SECTION:
server01.example.local. 86400 IN A 192.168.56.101
nslookup を使う場合は、1番目の引数に逆引きしたいIPを指定して実行します。
~]$ nslookup 192.168.56.101 192.168.56.102
101.56.168.192.in-addr.arpa name = server01.example.local.
以上です。