BoyChai's Blog - BIND9 https://blog.boychai.xyz/index.php/tag/BIND9/ BIND9-DNS服务器 https://blog.boychai.xyz/index.php/archives/7/ 2022-01-21T15:07:00+00:00 DNSDNS是将域名解析成IP地址的协议,有的时候也用于将IP地址反向解析成域名,也可以实现双向的解析。当客户端使用域名时会向DNS服务器发送请求,DNS会返回相应的IP给客户端之后客户端在向对应的IP发起请求。域名域名是网络上用于网络域、计算机、服务器等网络设备地址的标识。域名的结构如下图结构:域名是分层管理的,最高层的域名是根域"."就是一个点"."。根域:全世界只有13组根服务器,名字分别为A至M,其中10台设置在美国,另外三台设置于英国、瑞典、日本。顶级域名是由ICANN委任的注册机构负责运行。二级域名:二级域名不需要到ICANN进行申请,只需要到顶级域名的注册机构去检查带申请的名字是否可用,并且不是别人的商标时只需要缴纳一笔一年的费用即可得到相应的域名。BIND9BIND9是用于搭建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,需要改成自己的主机ipallow-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:设置类型为masterfile:设置区域的解析记录文件名称为host.com.zoneallow-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只需要写一个区域配置即可,解析记录它会自动同步。这里类型设置成了slavemasters是设置主DNS服务器的IPfile这里设置了一个路径是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 hosthost -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.digdig -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.105nsupdatensupdate是用来添加和删除记录,不支持修改记录。使用方法只能是交互式使用。使用命令前需要把区域的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管理BIND9rndc可以对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.confrndc-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是否为服务端来解决问题。