DNS

DNS是将域名解析成IP地址的协议,有的时候也用于将IP地址反向解析成域名,也可以实现双向的解析。
DNS在互联网中的关系
当客户端使用域名时会向DNS服务器发送请求,DNS会返回相应的IP给客户端之后客户端在向对应的IP发起请求。

域名

域名是网络上用于网络域、计算机、服务器等网络设备地址的标识。域名的结构如下图
域名结构
结构:域名是分层管理的,最高层的域名是根域"."就是一个点"."。
根域:全世界只有13组根服务器,名字分别为A至M,其中10台设置在美国,另外三台设置于英国、瑞典、日本。顶级域名是由ICANN委任的注册机构负责运行。
二级域名:二级域名不需要到ICANN进行申请,只需要到顶级域名的注册机构去检查带申请的名字是否可用,并且不是别人的商标时只需要缴纳一笔一年的费用即可得到相应的域名。

BIND9

BIND9是用于搭建DNS服务器的一个软件应用。

安装

[root@localhost ~]# yum -y install bind
[root@localhost ~]# named -v
BIND 9.11.26-RedHat-9.11.26-6.el8 (Extended Support Version) <id:3ff8620>

主配置

主配置文件为/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 {
        listen-on port 53 { 127.0.0.1; };    //监听的ipv4端口以及ip,需要改成自己的主机ip
        listen-on-v6 port 53 { ::1; };    //监听的ipv6端口以及ip,改成自己的ipv6地址。用不到可以直注释掉
        directory       "/var/named";    //区域文件存放位置
        dump-file       "/var/named/data/cache_dump.db";    //当执行rndc dumpdb时服务器存放数据库文件路径名
        statistics-file "/var/named/data/named_stats.txt";    //当执行rndc stats命令的时候,服务器会统计信息追加到的文件路径
        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; };    //允许查询的ip,需要改为any

        /*
         - 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-enable yes;    //开启dnssec
        dnssec-validation yes;    //设置dnssec在递归查询服务器上开启

        managed-keys-directory "/var/named/dynamic";    //指定目录中的文件储存,跟踪管理DNSSEC密钥

        pid-file "/run/named/named.pid";    //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;
        };
};
//定义了根区域,没事可以看一下他这个区域文件(/var/named/named.ca),里面配置了13个根主机以及ipv4的地址还有ipv6的地址
zone "." IN {
        type hint;
        file "named.ca";
};

include "/etc/named.rfc1912.zones";    //标注的文件也作为配置生效,这个一般用于存放区域的配置
include "/etc/named.root.key";    //标注的文件也作为配置生效

这个文件里面暂只需要修改的配置已列出:
listen-on port 53 { 服务器的IP; }; //监听的ipv4端口以及ip,需要改成自己的主机ip
allow-query { any; }; //允许查询的ip,需要改为any
其他配置看自己需求来

各种类型的记录

SOA记录:起始授权记录 表示一个授权区域的开始
NS记录:标识一个域的域名服务器
A记录:将主机名转换为ipv4地址
AAAA记录:将主机名转换为ipv6地址
CNAME记录:别名记录 解析域名
MX记录:邮件交换记录
PTR记录:将地址转换成域名 反向解析

配置一个正向解析域

编辑区域文件/etc/named.rfc1912.zones在最底下添加内容

[root@localhost ~]# tail -n5 /etc/named.rfc1912.zones
zone "host.com." IN {
        type master;
        file "host.com.zone";
        allow-update { none; };
};

zone:定义一个区域写法为 zone "域名." IN {配置}
type:设置类型为master
file:设置区域的解析记录文件名称为host.com.zone
allow-update:设置动态更新的ip,我这写的是none即不允许动态更新
现在设置此域名的解析记录,在/var/named/下创建对应文件host.com.zone并编辑

[root@localhost named]# pwd
/var/named
[root@localhost named]# touch host.com.zone
[root@localhost named]# vim host.com.zone
host.com. 600 IN SOA ns1.host.com. chai.simplefish.cn. (
                        202212101      ;序列号,每次更新记录则需要修改
                        10800          ;刷新时间,没隔多久到主服务器更新一次
                        900            ;重试时间,应该小于刷新时间
                        604800         ;过期时间,当辅助dns服务器无法联系主服务器的时间,超过这个时间则过期
                        86400          ;非权威应答的ttl,缓存DNS记录多长时间
)
host.com. 600 IN NS ns1.host.com.
ns1.host.com. 60 IN A 192.160.0.100
dns.host.com. 60 IN A 192.160.0.100
bind.host.com. 60 IN A 192.160.0.100
www.host.com. 60 IN A 192.160.0.100
[root@localhost named]# systemctl start named    //启动服务

一共有六条记录,其中SOA和NS记录时必须要有的。
记录写法为:主机名 TTL值 IN 记录类型 值
在bind9里的所有配置文件中 所有的域名最后都必须带有".",这个"."意味着根域的意思所以必须要有,不然启动服务的时候会报语法错误。

测试

打开自己电脑的CMD执行一下操作

C:\Users\SimpleFish>nslookup    //使用nslookup工具
默认服务器:  public1.114dns.com 
Address:  114.114.114.114

> server 192.168.0.100          //server设置测试dns的服务器地址
默认服务器:  [192.168.0.100]
Address:  192.168.0.100

> set type=any                  //设置类型为any(全部)
> host.com                      //查看host.com的SOA记录
服务器:  [192.168.0.100]
Address:  192.168.0.100

host.com
        primary name server = ns1.host.com
        responsible mail addr = chai.simplefish.cn
        serial  = 202212101
        refresh = 10800 (3 hours)
        retry   = 900 (15 mins)
        expire  = 604800 (7 days)
        default TTL = 86400 (1 day)
host.com        nameserver = ns1.host.com
ns1.host.com    internet address = 192.160.0.100
> ls host.com                                       //列出host.com的基本记录
[[192.168.0.100]]
 host.com.                      NS     server = ns1.host.com
 bind                           A      192.160.0.100
 dns                            A      192.160.0.100
 ns1                            A      192.160.0.100
 www                            A      192.160.0.100
>

配置一个反向解析域

[root@localhost ~]# tail -n5 /etc/named.rfc1912.zones    //查看区域配置文件
zone "0.168.192.in-addr.arpa" IN {
        type master;
        file "0.168.192.in-addr.zone";
        allow-update { none; };
};
[root@localhost ~]# cat /var/named/0.168.192.in-addr.zone              //查看区域的解析文件
0.168.192.in-addr.arpa. 600 IN SOA ns1.host.com. chai.simplefish.cn. (
                        202212101      ;序列号,每次更新记录则需要修改
                        10800          ;刷新时间,没隔多久到主服务器更新一次
                        900            ;重试时间,应该小于刷新时间
                        604800         ;过期时间,当辅助dns服务器无法联系主服务器的时间
                        86400          ;非权威应答的ttl,缓存DNS记录多长时间
)
0.168.192.in-addr.arpa. 600 IN NS ns1.host.com.
100.0.168.192.in-addr.arpa. 600 IN PTR dns.host.com.
100.0.168.192.in-addr.arpa. 600 IN PTR bind.host.com.
100.0.168.192.in-addr.arpa. 600 IN PTR www.host.com.
[root@localhost ~]# systemctl restart named

和正向解析的写法略有差别,反向解析的去域名是网段反写加in-addr.arpa,然后解析记录文件也是必须要写SOA记录和NS记录的,反向解析的记录类型为PTR。然后依旧是必须带根域"."。

测试

C:\Users\SimpleFish>nslookup
默认服务器:  public1.114dns.com
Address:  114.114.114.114

> server 192.168.0.100
默认服务器:  [192.168.0.100]
Address:  192.168.0.100

> set type=PTR         //设置类型为PTR反向解析记录
> 192.168.0.100
服务器:  [192.168.0.100]
Address:  192.168.0.100

100.0.168.192.in-addr.arpa      name = dns.host.com
100.0.168.192.in-addr.arpa      name = www.host.com
100.0.168.192.in-addr.arpa      name = bind.host.com
0.168.192.in-addr.arpa  nameserver = ns1.host.com
ns1.host.com    internet address = 192.160.0.100

委派DNS

委派DNS的意思实质上就是指自己域名的下一级域名交给另一台主机来管理,也可以叫做子域。具体配置如下

[root@linux-1 ~]# tail -n 5 /etc/named.rfc1912.zones 
zone "host.com." IN {
        type master;
        file "host.com.zone";
        allow-update { none; };
};
[root@linux-1 ~]# cat /var/named/host.com.zone 
host.com. 600   IN SOA  dns1.host.com. chai.simplefish.cn. (
                                        0       ; serial
                                        10800   ; refresh
                                        900     ; retry
                                        604800  ; expire
                                        86400 ) ; minimum
host.com.               600 IN NS ns1.host.com.
dns1.host.com.          60 IN A 192.168.1.111
ns1.host.com.           60 IN A 192.168.1.111
www.host.com.           60 IN A 192.168.1.111
shanghai.host.com.      600 IN NS ns2.host.com.
ns2.host.com.           60 IN A 192.168.1.112

把需要委托的下一级域名指定一条NS记录,记录指向委派的主机,上面是把shanghai.host.com这个三级域委派给192.168.1.112主机
再来看一下被委派主机的配置

[root@linux-2 ~]# tail -5 /etc/named.rfc1912.zones 
zone "shanghai.host.com." IN {
        type master;
        file "shanghai.host.com.zone";
        allow-update { none; };
};
[root@linux-2 ~]# cat /var/named/shanghai.host.com.zone 
shanghai.host.com. 600  IN SOA  dns1.shanghai.host.com. chai.simplefish.cn. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
shanghai.host.com.                      600 IN NS ns1.shanghai.host.com.
ns1.shanghai.host.com.                  60 IN A 192.168.1.112
dns1.shanghai.host.com.                 60 IN A 192.168.1.112
www.shanghai.host.com.                  60 IN A 192.168.1.112

被委派的则就可以正常配置,测试的话只需要指定第一台dns即可查询到委派的信息
第三台主机测试如下

[root@linux-3 ~]# dig -t A www.host.com @192.168.1.111 +short
192.168.1.111
[root@linux-3 ~]# dig -t A www.shanghai.host.com @192.168.1.111 +short
192.168.1.112

辅助DNS

主DNS的配置需要修改的参数如下

listen-on port 53 { 服务器的IP; };    //监听的ipv4端口以及ip,需要改成自己的主机ip
allow-query     { any; };    //允许查询的ip,需要改为any
allow-transfer  { 辅助DNS服务器的IP };      //允许同步自己信息的服务器,默认没有这个参数需要在主配置文件的options {}里面添加,这个参数可以写在区域文件里面。
also-notify   { 辅助DNS服务器的IP };      //当服务器记录更新时通知对应设置的服务器,默认没有这个参数需要在主配置文件的options {}里面添加,这个参数可以写在区域文件里面。

辅助DNS的配置需要修改的参数如下

listen-on port 53 { 服务器的IP; };    //监听的ipv4端口以及ip,需要改成自己的主机ip
allow-query     { any; };    //允许查询的ip,需要改为any
masterfile-format text;    //设置同步到本地的文件格式,默认没有这个参数需要在主配置文件的options {}里面添加

主DNS的区域配置和解析配置如下

[root@master ~]# tail -n5 /etc/named.rfc1912.zones
zone "host.com." IN {
        type master;
        file "host.com.zone";
        allow-update { none; };
};
[root@master ~]# cat /var/named/host.com.zone
host.com. 600 IN SOA ns1.host.com. chai.simplefish.cn. (
                        202212201      ;序列号,每次更新记录则需要修改
                        10800          ;刷新时间,没隔多久到主服务器更新一次
                        900            ;重试时间,应该小于刷新时间
                        604800         ;过期时间,当辅助dns服务器无法联系主服务                                                                                                             器的时间
                        86400          ;非权威应答的ttl,缓存DNS记录多长时间
)
host.com. 600 IN NS ns1.host.com.
ns1.host.com. 60 IN A 192.160.0.101
dns.host.com. 60 IN A 192.160.0.101
bind.host.com. 60 IN A 192.160.0.101
www.host.com. 60 IN A 192.160.0.101
[root@master ~]# systemctl restart named

辅助DNS的区域配置和解析配置如下

[root@slave ~]# tail -n5 /etc/named.rfc1912.zones
zone "host.com." IN {
        type slave;
        masters { 192.168.0.101; };
        file "slaves/host.com.zone";
};
[root@slave ~]# systemctl restart named

辅助DNS只需要写一个区域配置即可,解析记录它会自动同步。
这里类型设置成了slave
masters是设置主DNS服务器的IP
file这里设置了一个路径是slaves这个路径是可以自己改的,如果要改的话权限一定对的上不然可能会出问题,我建议就是创建的文件或者目录的用户和属组都换成named
刷新成功后他会在/var/named/slaves下生成对应的文件

[root@slave slaves]# pwd
/var/named/slaves
[root@slave slaves]# cat host.com.zone
$ORIGIN .
$TTL 600        ; 10 minutes
host.com                IN SOA  ns1.host.com. chai.simplefish.cn. (
                                202212201  ; serial
                                10800      ; refresh (3 hours)
                                900        ; retry (15 minutes)
                                604800     ; expire (1 week)
                                86400      ; minimum (1 day)
                                )
                        NS      ns1.host.com.
$ORIGIN host.com.
$TTL 60 ; 1 minute
bind                    A       192.160.0.101
dns                     A       192.160.0.101
ns1                     A       192.160.0.101
www                     A       192.160.0.101

他这种是宏定义的方式来同步解析文件这种写法后面也会说一下。反向解析的辅助DNS配置一样域名换一下即可。

智能DNS

智能DNS主要作用就是不同的网段去解析一个域名,可以实现解析不同的地址。

ACL组

ACL组可以用来定义一个ip的范围。any参数就是一个acl组,他代表的是全部的IP。定义方式如下

acl "acl_name" {
        acl_name;        //其他的acl组
        192.168.0.0/24;  //网段
        !192.168.0.2;   //不包括192.168.0.2这个ip
        {                        //添加ip组
                192.168.1.2;
                192.168.1.3;
        };
};

view视图

view视图可以对acl组单独设置dns的区域解析。写法方式如下

view "view_name" {                     //设置view视图的名称
    match-clients { acl组; };          //设置acl组
    recursion yes;                     //允许递归查询
    zone "host.com." {                 //正常写zone区域
        type master;
        file "host.com.zone";
        allow-update { none; };
    };
};

如果要使用view视图那么就需要把所有的区域都放到view视图里面,除了自己设置的默认还有一个默认的view视图,名称为"default",需要把根域"."加进去以及/etc/named.rfc1912.zones里的所有zone。

配置

[root@localhost named]# tail -n14 /etc/named.conf //查看主配置文件。
include "/etc/named-view.conf";     //引入我自己创建的视图文件

view "default" {
        match-clients { any; };
        recursion yes;
        zone "." IN {
                type hint;
                file "named.ca";
        };

        include "/etc/named.rfc1912.zones";
};

include "/etc/named.root.key";
[root@localhost named]# cat /etc/named-view.conf          //查看我自己创建的视图文件内容

acl "test01" {
                192.168.0.101;                   //定义acl test01
};

acl "test02" {
                192.168.0.107;                   //定义acl test02
};    

view "test01" {                                  //配置视图test01
        match-clients { test01; };
        recursion yes;
        zone "host.com." {
                type master;
                file "host.com.test01.zone";
                allow-update { none; };
        };
};

view "test02" {                                 //配置视图test02
        match-clients { test02; };
        recursion yes;
        zone "host.com." {
                type master;
                file "host.com.test02.zone";
                allow-update { none; };
        };
};

我把根域和named.rfc1912.zones里的所有域都放到了default视图里面。然后我还引入了一个文件用来专门放acl和view的文件,配置文件是有前后之分的如果把"default"视图放到前面则都只会匹配"default"视图所以我把它放到了前面,文件里定义了两个acl,分别是两个ip,之后分别配置了一个视图,视图里都是同一个域名但是解析文件不一样。当匹配到acl规则之后会走对应的解析文件。否则走"default"视图。

公网DNS

因为BIND软件开源所以公网dns涉及到一个安全的问题,就有了BIND-CHROOT这个东西,当运行的时候bind会在另一个根下运行,当服务器因为DNS某些漏洞被黑入的时候他也只能在这个根下操作。从而保证整个服务器的数据安全。
配置bind-chroot的方式

[root@localhost ~]# yum -y install bind    
[root@localhost ~]# yum -y install bind-chroot
[root@localhost ~]# cd /var/named/chroot/etc/
[root@localhost etc]# ln /etc/named* ./  
ln: /etc/named: hard link not allowed for directory
[root@localhost etc]# cd ../var/named/
[root@localhost named]# ln /var/named/* ./
ln: /var/named/chroot: hard link not allowed for directory
ln: /var/named/data: hard link not allowed for directory
ln: /var/named/dynamic: hard link not allowed for directory
ln: /var/named/slaves: hard link not allowed for directory
[root@localhost named]# mkdir data dynamic slaves
[root@localhost named]# chown named:named data dynamic slaves
[root@localhost named]# systemctl start named-chroot

装好bind-chroot之后需要把原来的文件结构都搞到/var/named/chroot下这个chroot下就是一个服务运行的根,开启时服务名称改为named-chroot,文件结构不管是复制还是剪切都可以只要有对应结构的文件都在就行,我这里做的是硬链接,往后的配置都需要在/var/named/chroot/这个根下面进行。

BIND-UTILS工具包

安装

[root@localhost named]# yum -y install bind-utils 

nslookup

非交互式
nslookup "解析的域名"

[root@localhost ~]# nslookup ns1.host.com
Server:         192.168.0.105
Address:        192.168.0.105#53

Name:   ns1.host.com
Address: 192.168.0.105

交互式
nslookup进入交互,"server DNS服务器地址"指定dns服务器地址、"set type=类型"可以设置类型SOA记录和MX记录需要单独设置才能查看、直接输入域名则输出解析的地址。

[root@localhost ~]# nslookup
> server 192.168.0.105
Default server: 192.168.0.105
Address: 192.168.0.105#53
> www.host.com
Server:         192.168.0.105
Address:        192.168.0.105#53

Name:   www.host.com
Address: 192.168.0.105
> set type=SOA
> host.com
Server:         192.168.0.105
Address:        192.168.0.105#53

host.com
        origin = ns1.host.com
        mail addr = chai.simplefish.cn
        serial = 0
        refresh = 86400
        retry = 86400
        expire = 86400
        minimum = 86400

host

host -t "类型" "域名" "DNS地址"

[root@localhost ~]# host -t A www.host.com 192.168.0.105
Using domain server:
Name: 192.168.0.105
Address: 192.168.0.105#53
Aliases:

www.host.com has address 192.168.0.105
[root@localhost ~]# host -t ns host.com 192.168.0.105
Using domain server:
Name: 192.168.0.105
Address: 192.168.0.105#53
Aliases:

host.com name server ns1.host.com.

dig

dig -t "类型" "域名" @"DNS地址" 参数
+short 返回精简结果
-x 进行逆向域名查询
+noall 忽略全部,不进行输出
+answer 只输出结果,省略过程
+trace:进行迭代查

[root@localhost ~]# dig -t A www.host.com @192.168.0.105

; <<>> DiG 9.11.26-RedHat-9.11.26-6.el8 <<>> -t A www.host.com @192.168.0.105
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 47724
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: d97935613cf3169f270c53e061ed0fe27016722968769c4a (good)
;; QUESTION SECTION:                           //说明查询内容
;www.host.com.                  IN      A    

;; ANSWER SECTION:                             //查询结果
www.host.com.           60      IN      A       192.168.0.105

;; AUTHORITY SECTION:                          //查询附加内容
host.com.               600     IN      NS      ns1.host.com.    

;; ADDITIONAL SECTION:                         //查询附加内容
ns1.host.com.           60      IN      A       192.168.0.105

;; Query time: 0 msec
;; SERVER: 192.168.0.105#53(192.168.0.105)
;; WHEN: Sun Jan 23 03:20:50 EST 2022
;; MSG SIZE  rcvd: 119
[root@localhost ~]# dig -t A www.host.com @192.168.0.105 +short
192.168.0.105

nsupdate

nsupdate是用来添加和删除记录,不支持修改记录。使用方法只能是交互式使用。使用命令前需要把区域的allow-update参数修改一下,改成使用nsupdate主机的ip即可。可以使用acl。

[root@localhost ~]# tail -n5 /etc/named.rfc1912.zones
zone "host.com." IN {
        type master;
        file "host.com.zone";
        allow-update { 192.168.0.105; };                 //修改允许动态更新的ip地址
};
[root@localhost ~]# systemctl restart named              //重启生效   
[root@localhost ~]# nsupdate                           
> server 192.168.0.105                                      //指定DNS服务器地址
> update add server.host.com 60 A 192.168.0.105             //add就是添加 之后写一条记录 记录写法很严格给必须是"记录 TTL 记录类型 记录值"
> send                              //更新
> quit                              //退出
[root@localhost ~]# dig -t A server.host.com @192.168.0.105 +short
192.168.0.105
[root@localhost ~]# nsupdate
> server 192.168.0.105
> update del server.host.com                   //del为删除删除记录
> send
> quit
[root@localhost ~]# dig -t A server.host.com @192.168.0.105 +short

是用这个命令不会在自己创建的记录文件里添加记录,而是会生成一个jnl日志文件,正常编辑为乱码。

[root@localhost named]# cat host.com.zone.jnl
;BIND LOG V9
▒8▒▒JhostcomX6ns1hostcomchai
simplefishcnQ▒Q▒Q▒Q▒JhostcomX6ns1hostcomchai
simplefishcnQ▒Q▒Q▒Q▒serverhostcom<▒i▒JhostcomX6ns1hostcomchai
simplefishcnQ▒Q▒Q▒Q▒serverhostcom<▒iJhostcomX6ns1hostcomchai
simplefishcnQ▒Q▒Q▒Q▒[root@localhost named]#

RNDC管理BIND9

rndc可以对bind9进行热更新,可以对某个域的解析单独进行重载。使用方法如下

[root@localhost ~]# rndc-confgen
# Start of rndc.conf
key "rndc-key" {
        algorithm hmac-md5;
        secret "e7SaG876PM54+/1bRFh/JQ==";
};

options {
        default-key "rndc-key";
        default-server 127.0.0.1;
        default-port 953;
};
# End of rndc.conf

# Use with the following in named.conf, adjusting the allow list as needed:
# key "rndc-key" {
#       algorithm hmac-md5;
#       secret "e7SaG876PM54+/1bRFh/JQ==";
# };
#
# controls {
#       inet 127.0.0.1 port 953
#               allow { 127.0.0.1; } keys { "rndc-key"; };
# };
# End of named.conf

rndc-confgen这个命令会生成两段配置,使用"#"注释的配置字段需要放到服务端的配置文件里,未注释的字段需要放到控制端进行配置。
服务端配置

[root@localhost ~]# tail -n8 /etc/named.conf
key "rndc-key" {
        algorithm hmac-md5;
        secret "e7SaG876PM54+/1bRFh/JQ==";
};
controls {
        inet 192.168.0.105 port 953                //这个地址需要修改成DNS服务器的主机地址
        allow { any; } keys { "rndc-key"; };       //这个allow {} 是允许谁来进行操作,我这里写的any意思为全部,不建议这样搞建议写成控制端的ip。
};
[root@localhost ~]# systemctl restart named

控制端配置

[root@localhost ~]# cat /etc/rndc.conf               
key "rndc-key" {
            algorithm hmac-md5;
            secret "e7SaG876PM54+/1bRFh/JQ==";
};

options {
            default-key "rndc-key";
            default-server 192.168.0.105;
            default-port 953;
};
[root@localhost ~]# rm -rf /etc/rndc.key        //默认系统里会自带一个rndc的key删除即可
[root@localhost ~]# rndc status                     //查看状态,不报错就可以用了
version: BIND 9.11.26-RedHat-9.11.26-6.el8 (Extended Support Version) <id:3ff8620>
running on localhost.localdomain: Linux x86_64 4.18.0-305.3.1.el8.x86_64 #1 SMP Tue Jun 1 16:14:33 UTC 2021
boot time: Sun, 23 Jan 2022 10:21:45 GMT
last configured: Sun, 23 Jan 2022 10:21:45 GMT
configuration file: /etc/named.conf
CPUs found: 1
worker threads: 1
UDP listeners per interface: 1
number of zones: 104 (97 automatic)
debug level: 0
xfers running: 0
xfers deferred: 0
soa queries in progress: 0
query logging is OFF
recursive clients: 0/900/1000
tcp clients: 3/150
TCP high-water: 3
server is up and running

这是基本的配置,使用方式如下
不允许动态更新的域

allow-update { none; };    //配置区域的时候这个参数为none
[root@localhost ~]# dig -t A a.host.com @192.168.0.105 +short
[root@localhost ~]# echo "a                       A       192.168.0.105" >> /var/named/host.com.zone
[root@localhost ~]# rndc reload host.com
zone reload queued
[root@localhost ~]# dig -t A a.host.com @192.168.0.105 +short
192.168.0.105

允许动态更新的域

allow-update { IP; };    //配置区域的时候这个参数有内容
[root@localhost ~]# dig -t A b.host.com @192.168.0.105 +short
[root@localhost ~]# echo "b                       A       192.168.0.105" >> /var/named/host.com.zone
[root@localhost ~]# rndc freeze host.com     //冻结这个动态域
[root@localhost ~]# rndc reload host.com     //重载
zone reload queued
[root@localhost ~]# rndc thaw host.com       //启用动态域
The zone reload and thaw was successful.
[root@localhost ~]# dig -t A b.host.com @192.168.0.105 +short
192.168.0.105

其他

宏定义写法

$ORIGIN .                            //宏定义根域
$TTL 600        ; 10 minutes         //宏定义TTL值
//定义之后的就可以不用谢TTL和根域了,就和这条SOA记录一样,他会自动的在域名后面加根域和TTL
host.com                IN SOA  ns1.host.com. chai.simplefish.cn. (                
                                2          ; serial
                                86400      ; refresh (1 day)
                                86400      ; retry (1 day)
                                86400      ; expire (1 day)
                                86400      ; minimum (1 day)
                                )
                        NS      ns1.host.com.
$ORIGIN host.com.                          //重新定义域名
$TTL 60 ; 1 minute                         //重新定义TTL
dns                     A       192.168.0.105      //域名则可以省略掉宏定义的内容
ns1                     A       192.168.0.105
www                     A       192.168.0.105

如何验证我的配置?

使用nslookup,host,dig,ping都可以来验证自己配置的DNS服务器,如果服务器可以重启依旧不同则可以依次检查服务器的防火墙、网络互通性、客户端的DNS是否为服务端来解决问题。

最后修改:2022 年 07 月 30 日
如果觉得我的文章对你有用,请随意赞赏