CentOS 中部署 DNS 服务

CentOS 下的名字服务的部署和基础配置:

安装包

先安装相关软件包。

yum install bind-chroot bind-utils -y

编辑 /etc/named.conf 文件,在 option 配置中编辑 listen-on 与 allow-query 选项,前者添加额外的服务监听端口,后者添加授权查询请求主机。

options {
        listen-on port 53 { 127.0.0.1; 10.1.1.1; 10.1.2.1; };
        ...
        allow-query     { localhost; 10.1.1.0/24; 10.1.2.0/24; };
        ....
}

zone "test.local" IN {
        type master;
        file "test.local.zone";
        allow-update { none; };
};

创建和编辑简单区域文件

创建文件 /var/named/test.local.zone 并编辑以下内容

$ORIGIN test.local.
$TTL 86400
@       IN  SOA dns1.test.local. root.test.local. (
        2021122501      ; serial
        21600           ; refresh after 6 hours
        3600            ; retry after 1 hour
        604800          ; expire after 1 week
        86400 )         ; minimum TTL of 1 day

@       IN  NS  dns1.test.local.
dns1    IN  A   10.1.1.1
@       IN  A   10.1.1.1
www     IN  CNAME       test.local.

编辑完成名字区域文件后建议使用命令检查一下合法性:

named-checkzone test.local /var/named/test.local.zone

启动名字服务:

systemctl enable named-chroot
systemctl start named-chroot

尝试查询名字:

# 通过 @<IP地址> 选项以强制指定查询DNS服务器

]# dig @10.1.1.1 test.local

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.8 <<>> @10.1.1.1 test.local
; (1 server found)
;; global options: +cmd
;; Got answer:
;; WARNING: .local is reserved for Multicast DNS
;; You are currently testing what happens when an mDNS query is leaked to DNS
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 17052
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;test.local.                    IN      A

;; ANSWER SECTION:
test.local.             86400   IN      A       10.1.1.1

;; AUTHORITY SECTION:
test.local.             86400   IN      NS      dns1.test.local.

;; ADDITIONAL SECTION:
dns1.test.local.        86400   IN      A       10.1.1.1

;; Query time: 0 msec
;; SERVER: 10.1.1.1#53(10.1.1.1)
;; WHEN: Sat Dec 25 23:29:07 CST 2021
;; MSG SIZE  rcvd: 90

逆向名称解析区域文件

通过IP地址获取完全限定域名 (FQDN) 的区域文件,以 -x 选项尝试查找 10.1.1.1 的完全限定域名。

dig @10.1.1.1 -x 10.1.1.1

此时会尝试向根域名服务器查询,无结果应答。

添加配置 var/named/test.local.rr.zone 区域文件。例如要给 10.1.1.0/24 配置逆向区域解析,最后一个 0 摘掉,前面三个数字反过来加上 .in-addr.arpa. 得到逆向区域完全限定名:1.1.10.in-addr.arpa.

SOA 记录和 NS 记录和普通区域配置一样,添加 PTR 记录 “1” 的值为 test.local。10.1.1.1 会被解析到 test.local 。

$ORIGIN 1.1.10.in-addr.arpa.
$TTL 86400
@       IN  SOA dns1.test.local. root.test.local. (
        2021122501      ; serial
        21600           ; refresh after 6 hours
        3600            ; retry after 1 hour
        604800          ; expire after 1 week
        86400 )         ; minimum TTL of 1 day

@       IN  NS  dns1.test.local.

1       IN  PTR test.local

添加逆向区域配置到 /etc/named.conf:

zone "1.1.10.in-addr.arpa." IN {
        type master;
        file "test.local.rr.zone";
        allow-update { none; };
};

重载后尝试通过IP查询逆向名称:

~]# dig @10.1.1.1 -x 10.1.1.1

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.8 <<>> @10.1.1.1 -x 10.1.1.1
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 51633
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;1.1.1.10.in-addr.arpa.         IN      PTR

;; ANSWER SECTION:
1.1.1.10.in-addr.arpa.  86400   IN      PTR     test.local.1.1.10.in-addr.arpa.

;; AUTHORITY SECTION:
1.1.10.in-addr.arpa.    86400   IN      NS      dns1.test.local.

;; ADDITIONAL SECTION:
dns1.test.local.        86400   IN      A       10.1.1.1

;; Query time: 0 msec
;; SERVER: 10.1.1.1#53(10.1.1.1)
;; WHEN: Sun Dec 26 00:10:22 CST 2021
;; MSG SIZE  rcvd: 120

参考文章

https://access.redhat.com/documentation/zh-cn/red_hat_enterprise_linux/7/html/networking_guide/sec-bind

发表评论