详解DNS BIND配置及原理

简介

DNS,全称Domain Name System,是一个记录域名和IP地址互相映射的一个系统,可以将用户访问互联网中所使用的域名转换成对应的IP地址。通过域名得到对应的IP地址的过程被称为域名解析。DNS运行于UDP协议之上,使用53端口

DNS 解析过程

首先,客户端先在本地缓存查找是否有缓存域名,比如没有,客户端发送DNS请求IP地址或主机名,DNS服务器在收到客户端的请求后;

(1) 检查DNS服务器的缓存,若查到请求地址或名称,即向客户机发送应答信息

(2) 若没有查到,则在数据库中查找,若查到请求的地址或名称,即向客户端发出应答信息

(3) 若没有查到,则将请求发给根域DNS服务器,并依序从根域查找顶级域,由顶级域查找二级域,二级域查找三级,直至找到要解析的地址或名称,即向客户机所在的网络的DNS服务器发出应答相应

(4) 若没有找到,返回信息错误

5294226-96827b55e2fb888a.png-52.7kB

DNS服务器分类

DNS服务器的类型可以分为以下几种

(1) 主服务器,负责至少解析一个域内的域名,维护所负责解析的域数据库,可对该域数据进行读写操作

(2) 辅服务器,负责从主服务器或其他辅服务器中复制相关解析库,为主服务器缓解解析压力

(3) 缓存服务器,不负责域名解析,仅仅作为缓存,加速解析速度

(4) 转发服务器,发现非本机负责的请求后,不再向根发起请求,而是直接转发给指定的一台或多台服务器,自身并不保存查询


. 代表根域,负责全球互联网域名IPV4根服务器、域名体系和IP等管理。全世界共有13台IPV4根域服务器。1个位主根服务器在美国。其余12个均为辅根服务器,其中9台在美国,欧洲2台位于英国和瑞典,亚洲一个位于日本。

顶级域 .com,.net,.edu等这些域名为顶级域,也称为一级域。是互联网DNS等机制中最高的域,它保存于DNS域的名字空间中

国家域 .cn,.us,.tk以国家为单位的域,和顶级域作用相同

子域(二级域),提供互联网用户注册的域名,可以任意注册,并且不区分大小写 (例如baidu.com.)

每一个域内都有一个专门的DNS服务器,这些服务器负责接收并响应本域内的主机名的解析请求

dns-tree.jpg-55kB

DNS 查询方式

目前DNS查询方式有两种,分别为递归查询(recursion)和迭代查询(iteration)

递归查询:

客户端发起一个DNS解析请求,若本地DNS服务器不能为客户端直接解析域名,则域名服务器会代替客户端(下级服务器)向域名系统中的各分支的上下级访问器进行递归查询,直到有服务器响应回答了该请求后,将请求结果返回给客户端。在此期间,客户端将一直处于等待状态

迭代查询:

客户端(下级服务器)发起DNS解析请求后,若上级DNS服务器并不能直接提供该DNS的解析结果,则该上级DNS服务器会告知客户端(下级服务器)另一个可能查询到该DNS解析结果的DNS服务器IP。客户端(下级服务器)再次请求这个DNS服务器,如此类推,直到查询到对应的结果为止。


安装DNS服务器

本次环境说明

master  192.168.31.113   dns-01
slave   192.168.31.114   dns-02 

系统Centos 7.8 

Bind 9版本 9.11.4

没有特殊说明的地方,我们默认都在master节点操作 (需要关闭iptables)

安装BIND9

#关闭防火墙、selinux 

systemctl stop firewalld
systemctl disable firewalld
iptables -F && iptables -X && iptables -F -t nat && iptables -X -t nat
iptables -P FORWARD ACCEPT
setenforce 0
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config 

#设置yum源
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo  

#安装bind9
yum install -y bind

修改BIND9配置文件

BIND配置文件说明

/etc/named.conf 主配置文件

/etc/named.rfc1912.zones 区域数据文件

区域数据文件主要存放包括主机名和对应IP地址、刷新间隔和过期时间等;关于区域数据文件的参数下面文章会有介绍

bind配置默认路径为/etc/named.conf

/etc/named.conf为主配置文件,主要包含三个段落,分别为全局配置段、日志配置段和区域配置段

# named.conf主配置文件参数详解 

//全局配置段options {
        listen-on port 53 { 192.168.31.113; }; #设置通信的网段,这里建议使用本机IP,并非127.0.0.1
        listen-on-v6 port 53 { ::1; }; #监听bind端口
        directory       "/var/named";  #指定区域文件存放路径
        dump-file       "/var/named/data/cache_dump.db"; #设置当执行rndc dumpdb命令后导出文件存放路径
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt"; #服务器输出的内存使用统计文件名
        recursing-file  "/var/named/data/named.recursing";
        secroots-file   "/var/named/data/named.secroots";
        allow-query     { any; };  #允许查询来源(这里建议修改为IP地址,localhost代表只允许本机查询) any代表所有网段
        allow-transfer { none; } #允许查询的网段
        recursion yes; #是否开启递归查询
        dnssec-enable yes; #是否支持DNSEEC开关
        dnssec-validation yes; #是否开启dnsec确认开关
        bindkeys-file "/etc/named.root.key";
        managed-keys-directory "/var/named/dynamic";
        pid-file "/run/named/named.pid";
        session-keyfile "/run/named/session.key";
};  

//日志配置段
logging {
        channel default_debug {         
                file "data/named.run";
                severity dynamic;
        };
  #本段参数解释,将日志写入工作目录下的named.run文件。注意:如果服务器用-f参数启动,则named.run会被stderr所代替,severity 按照服务器当前Debug级别记录日志
  #bind日志可以写到很多地方,具体写入方式可以参考https://blog.csdn.net/zhu_tianwei/article/details/45103455
}; 

//区域配置段
zone "." IN {             #.代表根域
        type hint;       #代表根服务器,除hint还有master 代表主域名服务器,slave代表辅助域名服务器,forward 代表转发服务器
        file "named.ca";  #域信息源数据库信息文件名
}; 

include "/etc/named.rfc1912.zones";   #区域管理文件(包含资源记录、宏定义和注释)
                                      #通常定义在/var/named目录下且以.zone结尾
include "/etc/named.root.key";

自定义区域配置

自定义主机区域配置文件

这里我们定义了一个abcdocker.com的域 (相当于我们购买了一个域名),可以放在/etc/named.rfc1912.zones文件中,也可以放置在自定义文件中,在/etc/named.conf中include即可

zone "abcdocker.com" IN {
        type master;
        file "abcdocker.com.zone";
        allow-update { 192.168.31.113;192.168.31.114; };
}; 

#allow-update代表动态域

我们在/etc/named.rfc1912.zones添加上面的域名解析,然后使用下面的命令检查配置文件是否正确

我们在/etc/named.rfc1912.zones添加上面的域名解析,然后使用下面的命令检查配置文件是否正确

[root@dns-01 ~]# named-checkconf
[root@dns-01 ~]# 

#没有报错代表正常

上面我们添加的是一个域名,相当于互联网购买了一个域名,但是这个域名目前没有解析。所以我们还需要配置自定义区域数据库文件(包含资源记录、宏定义和注释)

配置文件解释
$ORIGIN .     #宏定义段,代表根,否则在下面name段需要输入abcdocker.com.
$TTL 600;       #根缓存时间(10分钟)
abcdocker.com     IN SOA ns1.abcdocker.com. dnsadmin.abbcdocker.com. {  #SOA代表资源记录配置,格式上面已经说过了
                  20200816;   #
                  10800;
                  900;
                  604800;
                  86400;
                  }
                  NS ns1.abcdocker.com. 

$ORIGIN abcdocker.com     #代表域名,下面的配置都相当于配置解析ns1.abcdocker.com,这里如果不写,下面就需要些ns1.abcdocker.com
$TTL 60;     #域名过期时间,时间为60秒过期
ns1              A     192.168.31.113

常用资源记录类型

常见资源记录类型

  • SOA: Start Of Authority,起始授权
  • NS: 域名服务器的标示记录
  • A: IPV4主机地址
  • AAAA: IPV6主机地址
  • MX: 邮件交换记录
  • CNAME: Canonical Name,正式名称(别名)
  • TXT: 文件字符串,长度限制512Byte,通常做SPF记录(反垃圾邮件)
  • PTR记录: 指针记录,用来实现反向解析

资源记录(Resource Record)格式

name [ttl(缓存时间)] IN 资源记录类型 (RRtype) Value  

宏定义$开头
TTL       #缓存时间
ORIGIN.   #源地址,ORIGIN . 意思代表根域

常用资源记录类型配置详解

上面已经解释了长用资源记录的集中类型,下面介绍一下资源记录的配置用法

SOA记录

SOA: 其实授权记录,只可以有一条。必须定义在资源记录最前面

SOA 资源记录表明此DNS名称服务器是为该DNS域中的数据的信息的最佳来源。SOA 记录与 NS 记录的区别:简单讲,NS记录表示域名服务器记录,用来指定该域名由哪个DNS服务器来进行解析;SOA记录设置一些数据版本和更新以及过期时间的信息.

@ 600 IN SOA  dns.abcdocker.com. 管理员邮箱,这里不使用@,因为@有特殊含义,以.代替(dnsadmin.abcdocker.com.)(
     序列号(serial number) ;注释内容,十进制数据,不能超过10位,通常使用日期时间戳,例如2018121601
     刷新时间(refresh time) ;即每隔多久到主服务器检查一次
     重试时间(retry time) ;应该小于refresh time
     过期时间(expire time);当辅助DNS服务器无法联系上主DNS服务器时,辅助DNS服务器可以在多长时间内认为其缓存是有效的,并供用户查询。
     netgative answer ttl ;非权威应答的ttl,缓存DNS服务器可以缓存记录多长时间
 )

NS记录

用于表示域名对应的DNS服务器

name:区域名称,通常可以简写为@
value:DNS服务器的FQDN(可以使用相对名称)
例子:
@ 600 IN NS ns1 

#NS记录需要指定一个对应的A记录

A记录

需要解析的服务器,www代表我们的域名前缀,例如www.i4t.com,这里的www就是A记录

www  600(单位s) IN A 192.168.31.113
www  600(单位s) IN A 192.168.31.114

MX记录

#优先级:0-99,数字越小,级别越高, 

@ 600 IN MX 10 mail
@ 600 IN MX 20 smtp

CNAME记录

eshop IN CNAME www

正解域 & 反解域

DNS正解: 域名解析->返回IP

DNS反解: IP解析->域名

反解域主要使用PTR记录:IP –>FQDN,只能定义在反向区域文件中,反向区域文件名称为逆向网络地址加.in-addr.arpa.后缀组成

配置正解主机域

正向解析文件(名字到地址的映射),反向解析文件(地址到名字的映射)

我们需要修改两台服务器的FQDN

FQDN 完全限定域名fully qualified domain name(FQDN)是internet上特定计算机或主机的完整域名。FQDN由两部分组成:主机名和域名。

本次环境如下

master  192.168.31.113  dns01-113.host.com
slave   192.168.31.114  dns02-114.host.com

第一步修改主机名,将主机名修改为FQDN格式

hostnamectl set-hostname dns01-113.host.com

目前我们在不设置host的情况下,两台节点是无法通过主机名进行通信

[root@dns01-113 ~]# ping dns-02-114.host.com
ping: dns-02-114.host.com: 未知的名称或服务

1.配置/etc/named.rfc1912.zones(也可以在/var/named.conf)添加host.com 域配置文件

vim  /etc/named.rfc1912.zones

zone "host.com" IN {
        type master;
        file "host.com.zone";
        allow-update { 192.168.31.113;192.168.31.114; };
};

2.创建区域数据库文件

[root@dns01-113 ~]# vim /var/named/host.com.zone 

$TTL 600
@    IN   SOA  dns.host.com.    604419314.qq.com.   ( 20200817 10800 900 604800 86400 )
          NS   dns.host.com. 
$ORIGIN  host.com.
$TTL  60
dns01-113  A   192.168.31.113
dns02-114  A   192.168.31.114 

dns        A   192.168.31.113 

#这里设置了一个dns的A记录,和NS记录,还有我们主机域的A记录

3.检查配置文件

[root@dns01-113 ~]# named-checkzone host.com /var/named/host.com.zone
zone host.com/IN: loaded serial 20200817
OK

4.修改属租属主

[root@dns01-113 ~]# chgrp named /var/named/host.com.zone
[root@dns01-113 ~]# chmod 640 /var/named/host.com.zone

5.修改dns文件

[root@dns01-113 ~]# vim /etc/resolv.conf
# Generated by NetworkManager
search host.com
nameserver 192.168.31.113

6.重启BIND

systectl restart named

7.检查

这时候我们没有添加host,已经给我们解析上

[root@dns01-113 ~]# dig dns02-114.host.com 

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-16.P2.el7_8.6 <<>> dns02-114.host.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 53152
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2 

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;dns02-114.host.com.        IN  A 

;; ANSWER SECTION:dns02-114.host.com. 60  IN  A   192.168.31.114 

;; AUTHORITY SECTION:host.com.       600 IN  NS  dns.host.com. 

;; ADDITIONAL SECTION:dns.host.com.       60  IN  A   192.168.31.113 

;; Query time: 0 msec
;; SERVER: 192.168.31.113#53(192.168.31.113)
;; WHEN: 一 8月 17 06:30:50 EDT 2020
;; MSG SIZE  rcvd: 97

维护正解域

当我们创建了正解域,我们还要对正解域进行增删改查

增加一条A记录

[root@dns01-113 ~]# echo "dns03-114  A   192.168.31.114" >>/var/named/host.com.zone 
#检查配置文件named-checkzone host.com /var/named/host.com.zone

#重启named
[root@dns01-113 ~]# systemctl restart named
[root@dns01-113 ~]# ping dns03-114.host.com
PING dns03-114.host.com (192.168.31.114) 56(84) bytes of data.
64 bytes from 192.168.31.114 (192.168.31.114): icmp_seq=1 ttl=64 time=0.473 ms
64 bytes from 192.168.31.114 (192.168.31.114): icmp_seq=2 ttl=64 time=0.158 ms
 
64 bytes from 192.168.31.114 (192.168.31.114): icmp_seq=3 ttl=64 time=0.123 ms
64 bytes from 192.168.31.114 (192.168.31.114): icmp_seq=4 ttl=64 time=0.107 ms

修改、删除记录

这里不进行演示,和添加步骤相同

配置反解域

需要注意一点的是反解析对应的配置文件应该不带有后面ip地址

例如我解析的IP为192.168.31.113 配置文件应该写为31.168.192.in-addr.arpa 其中113这里不写,是在后面添加解析时使用

并且一个IP只能对应唯一的FQDN反解PTR记录,且应该与正解域对应

首先编辑/etc/named.rfc1912.zones

添加一个域名

zone "31.168.192.in-addr.arpa" IN {
        type master;
        file "31.168.192.in-addr.arpa.zone";
        allow-update { 192.168.31.113; };};
#检查配置文件
[root@dns01-113 ~]# named-checkconf

/var/named/下创建反解域区域数据库文件

[root@dns01-113 ~]# vim /var/named/31.168.192.in-addr.arpa.zone     #名称需要根据上面定义的来创建
$TTL  60
@         IN  SOA    dns.host.com.    604419314.qq.com. (
                     20200818
                     10800
                     900
                     64800
                     86400
                     )
              NS     dns.host.com.

$ORIGIN  31.168.192.in-addr.arpa.
$TTL 60 
113          PTR     dns01-113.host.com.
114          PTR     dns02-114.host.com. 
#####################
提示: 如果我们$ORIGIN 31.168.192.in-addr.arpa.不写全,也是可以的。例如 
$ORIGIN in-addr.arpa.
$TTL 
60113.31.168.192   PTR   dns01-113.host.com.
#上面的写法也是可以的

说明: 反解域也是要有SOA记录的,在反解域中ns记录就不用在写A记录了,因为反解区域文件只可以有PTR,不可以有A记录

检查区域配置文件是否正常

#31.168.192.in-addr.arpa为我们反向解析的域名 
[root@dns01-113 ~]# named-checkzone 31.168.192.in-addr.arpa. /var/named/31.168.192.in-addr.arpa.zone zone 31.168.192.in-addr.arpa/IN: loaded serial 20200818
OK

接下来重启named

[root@dns01-113 ~]# systemctl restart named

我们使用31.168.192.in-addr.arpa反向解析,这里就会显示我们对应的主机名

#第一种方法
[root@dns01-113 ~]# dig -t PTR 113.31.168.192.in-addr.arpa. @192.168.31.113  +shortdns01-113.host.com. 
#第二种方法
[root@dns01-113 ~]# dig -x 192.168.31.114 @192.168.31.113 +shortdns02-114.host.com. 

#dig 后面ip为需要解析的ip,@后面ip为dns服务器ip

常用检查dns工具

nslookup 
host
dig

文章来源:https://www.cnaaa.net,转载请注明出处:https://www.cnaaa.net/archives/7814

(0)
杰斯的头像杰斯
上一篇 2023年3月29日 下午4:33
下一篇 2023年3月31日 下午4:01

相关推荐

  • Traceroute(路由追踪)的原理及实现

    现实世界中的网络是由无数的计算机和路由器组成的一张的大网,应用的数据包在发送到服务器之前都要经过层层的路由转发。而Traceroute是一种常规的网络分析工具,用来定位到目标主机之间的所有路由器 原理 在介绍Traceroute的原理之前,需要了解几个技术名词: 具体到traceroute的实现细节上,有两种不同的方案: 基于UDP实现 在基于UDP的实现中…

    2023年4月12日
    26300
  • 常用华为网络设备display命令合辑,真香!

    下午好,我的网工朋友。 今天给你做了个命令整合,华为设备提供了多条display命令用于查看硬件部件、接口及软件的状态信息。 通常这些状态信息可以为用户故障处理提供定位思路。 01 常用的故障信息搜集命令 信息项 使用命令 使用说明 基本信息 display diagnostic-information 此命令主要用于系统基本信息的收集,集合了多条常用dis…

    2024年1月15日
    14000
  • Prometheus 通过 consul 实现自动服务发现

    1、Consul 安装配置 Consul 安装很方便,官网 提供各个系统版本二进制安装包,解压安装即可,同时也可以通过 Docker 来快速安装。 1.1、源码安装 以 Linux 系统为例,源码安装并以开发模式启动一个单节点,下载最新版二进制安装包,解压启动即可。 启动完毕后,浏览器访问 http://127.0.0.1:8500 地址,即可打开 Cons…

    2023年8月7日
    20100
  • DNS BIND主辅同步配置

    DNS主辅同步配置要点: DNS主辅环境 主DNS我们已经安装过bind了,接下来在辅助DNS安装bind 具体安装详解可以查看下面的文章 接下来修改辅助DNS配置文件 接下来修改主dns配置文件 dns master完整配置文件如下 现在我们将dns01 和dns02执行下面的命令,检查配置文件是否有错误 重启主dns 接下来我们去辅助dns,检查完全区域…

    2023年3月31日
    31800
  • ip address与ifconfig以及网卡配置文件的总结

    为什么在network -scripts 中配置了网卡文件,nmcli connection show里面看都没有生效 可能是因为NetworkManager和network -scripts产生了冲突,导致配置文件未能生效。您可以尝试手动停止NetworkManager服务,并重启网络服务来使配置文件生效: 如果你想要永久停止NetworkManager服…

    2023年3月22日
    46100

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

在线咨询: QQ交谈

邮件:712342017@qq.com

工作时间:周一至周五,8:30-17:30,节假日休息

关注微信