域名解析DNS服务

DNS服务基础知识

DNS:Domain Name System (域名系统)

DNS 是互联网上解决网络中机器命名的一种系统。在网络中,一台主机去访问另外一台主机时,必须要 知道目标主机的IP地址,虽然网络上的节点都可以用IP地址来标识,并且可以通过IP地址被访问。但对 于自然人而言,一组组由数字组成的IP地址,是难以被理解和记忆的。于是设计出了域名系统,用一组 有意义的字符来表示某个特定主机或某个网络,再将网络中主机IP地址和域名之间做成一个映射表。

DNS 就是负责维护主机IP地址和域名映射关系的服务,同时也提供域名解析服务,即人类通过域名访问 某个主机或节点时,由DNS服务将人类可读的域名转换为机器可读的IP地址,再通过IP地址找到对应的 主机。

域名 (Domain Name)

域名,又称网域,顾名思义,是一个域的名称。 是一串用点号分隔的字符,可以用来标识网络中某台主 机或某个节点,由DNS服务维护域名和主机IP地址之间的映射关系,当我们在网络中访问某个域名时, 实际上访问的是该域名对应的IP地址所标识的主机。

FQDN:(Fully Qualified Domain Name)全限定域名

域名是一个域的名称,一个网域或一个节点,可以有多台主机,所以为了精确表示域里面的某台主机, 我们在使用域名时,还需要加上主机名,FQDN指的就是同时带有主机名和域名的名称。

域名的组成

域名由英文字母,数字和英文连字符(-) 组成,且不区分大小写。

域名是分层次的,允许定义子域,子域名与上级域名之间用 . (点号)分隔,最上层节点的域名称为顶级 域名(TLD,Top-Level Domain),第二层节点的域名称为二级域名,依此类推。级别最低的域名写在最 左边,而级别最高的域名写在最右边。每一层级的域名长度不能超过63个字符,多级域名加起来不能超 过255个字符。域名最多可以有127级。

域名的管理

域名由因特网域名与地址管理机构(ICANN,Internet Corporation for Assigned Names and Numbers) 管理,这是为承担域名系统管理、IP地址分配、协议参数配置,以及主服务器系统管理等职能而设立的 非盈利机构。

ICANN为不同的国家或地区设置了相应的顶级域名,这些域名通常都由两个英文字母组成。例如:.uk代 表英国、.fr代表法国、.jp代表日本。中国的顶级域名是.cn,.cn下的域名由CNNIC进行管理。

一级域名:又称顶级域名,可分为三类,一类代表国家和地区(cn,hk,......),一类代表各类组织 (com,edu,......),以及反向域

二级域名:某个具体组织,单位,机构,商业公司或个人使用,需要向域名管理机构申请(付费)才能获得 使用权

二级域名以下的域名,由使用该域名的组织自行分配

DNS服务工作原理

主机中DNS客户端配置

当一台主机接入互联网时,在配置网络时,通常有两种方式,一种是从DHCP服务自动获得IP地址,另外 一种是手动指定静态地址;

从DHCP服务自动获取IP时,通常也会自动获得DNS服务器地址,手动配置静态地址时,也需要手动配置 DNS服务器地址;

当用户使用主机 发送/接收 邮件,或浏览网页时,就是由主机上配置的DNS服务器地址负责将域名转换 成对应的IP地址。

Rocky中手动配置的DNS服务器地址

[root@rocky86 ~]# cat /etc/sysconfig/network-scripts/ifconfig-eth1
DEVICE=eth1
NAME=con-eth1
IPADDR=10.0.0.88
PREFIX=24
GATEWAY=10.0.0.2
DNS1=10.0.0.2
DNS2=114.114.114

#查看DNS
[root@rocky86 ~]# cat /etc/resolv.conf 
# Generated by NetworkManager
search localdomain
nameserver 10.0.0.2
nameserver 114.114.114.114

查看Ubuntu 中的DNS

[root@ubuntu ~]# cat /etc/netplan/00-installer-config.yaml
# This is the network config written by 'subiquity'
network:
 renderer: NetworkManager
 ethernets:
   eth0:
   #dhcp4: true
   addresses: [10.0.0.206/24]
   gateway4: 10.0.0.2
   nameservers:
     search: [magedu.com,baidu.org]
     addresses: [223.5.5.5,8.8.8.8]
version: 2
[root@ubuntu ~]# resolvectl status
Global
         Protocols: -LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
 resolv.conf mode: stub
Current DNS Server: 223.5.5.5
       DNS Servers: 223.5.5.5
Link 2 (eth0)
   Current Scopes: DNS
         Protocols: +DefaultRoute +LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
Current DNS Server: 223.5.5.5
       DNS Servers: 223.5.5.5 8.8.8.8
       DNS Domain: 

DNS服务解析域名流程

域名解析DNS服务_第1张图片

  1. 当客户端主机决定访问 百度一下,你就知道 这个域名时,首先会查询本机缓存;

  2. 如果本机缓存没有解析记录,则会向其配置的DNS服务器发起解析请求;

  3. DNS代理解析服务器会先查询其缓存是否有这条解析记录,如果有,则直接返回,如果没有,则继 续向上解析;

  4. DNS代理解析服务器会向根域名服务器发起解析请求,根域名服务器返回 com 域名的DNS地址;

  5. DNS代理解析服务器继续向 com 域名服务器发起解析请求,com 域名服务器返回 baidu.com 域名服务器DNS地址;

  6. DNS代理解析服务器继续向 baidu.com 域名服务器发起解析请求,baidu.com 域名服务器返 回 www.baidu.com 主机的IP;

  7. DNS代理解析服务器将 www.baidu.com 的IP地址存入本机缓存,再读取缓存,将 IP地址发送给 客户端主机;

  8. 客户端主机通过IP地址顺利访问 百度一下,你就知道;

注意:DNS服务只负责域名解析,也就是说,DNS服务,只负责返回与域名对应的IP地址,但该IP地址在网络 上是否是可达的,并不由DNS决定

DNS查询类型

递归查询

是指DNS服务器在收到用户发起的请求时,必须向用户返回一个准确的查询结果。如果DNS服务器本地 没有存储与之对应的信息,则该服务器需要询问其他服务器,并将返回的查询结果提交给用户。

一般客户机和本地DNS服务器之间属于递归查询,即当客户机向DNS服务器发出请求后,若DNS服务器 本身不能解析,则会向另外的DNS服务器发出查询请求,得到最终的肯定或否定的结果后转交给客户 机。

此查询的源和目标保持不变,为了查询结果只需要发起一次查询。

递归算法:客户端向LocalDNS发起域名查询-->localDNS不知道域名对应的IP-->但它知道谁知道->他代 为帮客户端去查找-->最后再返回最终结果。

迭代查询

是指DNS服务器在收到用户发起的请求时,并不直接回复查询结果,而是告诉另一台DNS服务器的地 址,用户再向这台DNS服务器提交请求,这样依次反复,直到返回查询结果。

一般情况下(有例外)本地的DNS服务器向其它DNS服务器的查询属于迭代查询,如:若对方不能返回权 威的结果,则它会向下一个DNS服务器(参考前一个DNS服务器返回的结果)再次发起进行查询,直到返 回查询的结果为止。此查询的源不变,但查询的目标不断变化,为查询结果一般需要发起多次查询。

迭代算法:客户端向LocalDNS发起域名查询-->localDNS不知道域名对应的IP-->但它知道谁知道并推荐 客户端应该找谁-->客户端自己去找它。

DNS缓存

DNS缓存是将解析数据存储在靠近发起请求的客户端的位置,也可以说DNS数据是可以缓存在任意位 置,最终目的是以此减少递归查询过程,可以更快的让用户获得请求结果。

Windows系统

#显示DNS缓存
C:\Users\44301>ipconfig/displaydns
Windows IP 配置
   ytbackend.godarkmode.com
    ----------------------------------------
   记录名称. . . . . . . : ytbackend.godarkmode.com
   记录类型. . . . . . . : 1
   生存时间. . . . . . . : 92
   数据长度. . . . . . . : 4
   部分. . . . . . . . . : 答案
   A (主机)记录 . . . . : 165.22.214.237
 ......
 
#清除DNS缓存
C:\Users\44301>ipconfig/flushdns

Windows IP 配置

已成功刷新 DNS 解析缓存。

CentOS系统

#查看DNS缓存
[root@rocky86 ~]# nscd -g
nscd configuration:
              0 server debug level
              4s server runtime
              5 current number of threads
             32 maximum number of threads
              0 number of times clients had to wait
             no paranoia mode enabled
           3600  restart internal
              5 reload count
passwd cache:
            yes cache is enabled
            yes cache is persistent
            yes cache is shared
            211 suggested size
 ......
 ......
 
#清空DNS缓存
[root@rocky86 ~]# nscd -i hosts

Ubuntu系统

#查看DNS缓存
[root@ubuntu ~]# resolvectl statistics
DNSSEC supported by current servers: no
Transactions              
Current Transactions: 0
 Total Transactions: 1152
                          
Cache                     
 Current Cache Size: 0
         Cache Hits: 11
       Cache Misses: 1399
                          
DNSSEC Verdicts           
             Secure: 0
           Insecure: 0
               Bogus: 0
       Indeterminate: 0

#清空DNS缓存
[root@ubuntu ~]# resolvectl reset-statistics

DNS解析类型

DNS服务器里面有两个区域,即 正向查找区域 和 反向查找区域

正向解析:将域名解析成IP地址

反向解析:根据IP地址得到该IP地址指向的域名

hosts文件

hosts文件是一个没有扩展名的系统文件,可以直接用文本编辑工具修改,在该文件中直接定义域名与IP 地址的对应关系,当主机访问某个域名时,会先从hosts文件中寻找与该域名对应的IP地址,如果找到, 则直接请求该IP地址,如果找不到,才会将该域名提交DNS服务请求解析该域名对应的IP地址。

操作系统规定,在进行DNS请求以前,先检查系统自己的Hosts文件中是否有这个域名和IP的映射关系。 如果有,则直接访问这个IP地址指定的网络位置,如果没有,再向已知的DNS服务器提出域名解析请 求。也就是说Hosts的IP解析优先级比DNS要高。

hosts文件是引入DNS服务之前的解析方案

早期的 internet 网络规模非常小,一个hosts文件就可以定义所有的域名与IP地址的映射关系,管理机 构提供该文件下载地址,并定期更新文件内容,以此来反映网络上的变化。

但随着时间的推移,接入 internet 的主机和域名越来越多,通过一个中心文件管理所有域名与IP地址映 射关系己经不再可取,于是便引入了DNS服务

#Windows系统中的hosts文件
%windir%\System32\drivers\etc\hosts

# %windir% 是windows 系统中的环境变量写法,表示 Windows 安装目录,上述路径一般是
C:\Windows\System32\drivers\etc

#Linux系统中的hosts文件
/etc/hosts

DNS检测工具

dig命令

dig:(Domain Information Groper) 域名信息查询工具

dig 命令不会查询本地 hosts文件中定义的域名和IP对应关系

#安装
[root@ubuntu ~]# apt install bind9
#查询来源
root@ubuntu ~]# dpkg -S /usr/bin/dig
bind9-dnsutils: /usr/bin/dig
#命令格式            
dig [@global-server] [domain] [q-type] [q-class] {q-opt}
           {global-d-opt} host [@local-server] {local-d-opt}
           [ host [@local-server] {local-d-opt} [...]]      
            
dig [-t type] name [@SERVER] [query options] 

@global-server #指定DNS服务器
domain #要查询的域名
q-type #要查询的记录类型(a,any,mx,ns,soa,hinfo,axfr,txt,...),默认
a
q-class #要查询的解析类型(in|hs|ch),默认 in
q-opt #选项
d-opt #查询选项

#q-opt 项
-h #显示帮助
-v #显示版本号
-4                 #仅查询IPV4的DNS服务器
-6                 #仅查询IPV6的DNS服务器
-b address[#port]   #使用指定客户端IP去查询DNS
-c class           (specify query class)
-f filename         #从文件中获取要查询的域名
-i                 (use IP6.INT for IPv6 reverse lookups)
-k keyfile         (specify tsig key file)
-m                 (enable memory usage debugging)
-p port             #指定DNS服务查询端口
-q name             (specify query name)
-r                 (do not read ~/.digrc)
-t type             #指定要查询的资源记录类型A|NS|AAA|PTR|...
-u                 #以微秒显示打印时间
-x dot-notation     #反向解析
-y [hmac:]name:key (specify named base64 tsig key)

#d-opt 项
+[no]trace #是否追踪查询过程
+[no]cmd #是否在查询结果中显示头信息 
+[no]recurse #是否进行递归解析查询
+[no]all #是否显示所有信息,如果否,要指明具体显示内容
+[no]answer         #是否显示answer部份
+[no]question #是否显示question部份
+[no]authority     #是否显示authority部份
+[no]comment #是否显示comment部份
+[no]stat #是否显示status部份
+[no]short #是否只显示关键信息


#常用组合
dig domain
dig @dns-erver domain | dig domain @dns-server
dig -t q-type domain | dig domain q-type
git -x IP | dig -t ptr reverseIP.in-addr.arpa #reverseIP 表示将要查询的IP倒序输出

查询结果说明

[root@ubuntu ~]# dig

#dig命令版本和参数
; <<>> DiG 9.18.12-0ubuntu0.22.04.1-Ubuntu <<>> #此处查询参数为空
;; global options: +cmd #默认选项,此项表示显示头部软件版本和参数信息


#查询结果
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12947 #QUERY 表示是执行查询操作,NOERROR 表示解析成功
;; flags: qr rd ra; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 1


# opcode: QUERY 执行查询操作
# status: NOERROR 解析成功
# id: 12947 此次查询的ID,在dns协议中,通过ID编号匹配查询请求和返回结果
# flags: qr rd ra 标志位
# qr(query,查询标志,代表查询操作)
# rd(recursion desired, 表示客户端希望进行递归查询)
# ra(recursive available, 表示DNS服务器支持递归查询)
# aa(Authoritative Answer, 权威回复,如果查询结果由管理域名的域名服务器而不是缓存服务器提供的,则称为权威回复)

#QUERY: 1 查询数,表示1个查询,对应下面 QUESTION SECTION中的记录数
#ANSWER: 13 查询结果,表示有13个查询结果,对应下面 ANSWER SECTION 中的记录数
#AUTHORITY: 0 权威域名服务器记录数量,此处表示有0个权威域名服务器
#ADDITIONAL: 1 额外记录数量,此处表示有1个额外记录,此处缺失该部份内容

#选项
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494

#EDNS: Extended DNS 扩展用户数据报文协议
#version:0 协议版本为 0
#flag:; 标记位为空
#udp:65494 数据包大小


#查询域名,此处表示查根域
;; QUESTION SECTION:
;. IN NS

#具体查询结果
#第一列是要要询的域名
#第二列是TTL(time to live),表示该记录的缓存时间,单位是秒
#第三列是要查询的信息类型,IN代表类别为IP协议,即Internet
#第四列是要查询的记录类型,NS表示name server,即域名服务器
#第五列表示查询得到的值
;; ANSWER SECTION:
. 2221 IN NS h.root-servers.net.
. 2221 IN NS a.root-servers.net.
. 2221 IN NS e.root-servers.net.
. 2221 IN NS i.root-servers.net.
. 2221 IN NS b.root-servers.net.
. 2221 IN NS k.root-servers.net.
. 2221 IN NS f.root-servers.net.
. 2221 IN NS d.root-servers.net.
. 2221 IN NS j.root-servers.net.
. 2221 IN NS g.root-servers.net.
. 2221 IN NS c.root-servers.net.
. 2221 IN NS m.root-servers.net.
. 2221 IN NS l.root-servers.net.

#本次查询统计信息
;; Query time: 0 msec #本次查询消耗时长
;; SERVER: 127.0.0.53#53(127.0.0.53) (UDP) #DNS服务器为10.0.0.2 端口是53
;; WHEN: Tue May 30 15:46:07 CST 2023 #查询时间
;; MSG SIZE rcvd: 239 #返回内容长度为239字节

host命令

host 命令可以根据域名查询得到对应的服务器IP地址

host 命令不会查询本地 hosts文件中定义的域名和IP对应关系

host [option] hostname [server]

#常用选项
-a #显示所有信息
-c #指定查询类型 HS|CH|IN
-C #查询SOA
-d #同 -v
-i #IP6.INT reverse lookups  IP6.INT反向查找
-l #lists all hosts in a domain, using AXFR   使用AXFR列出域中的所有主机
-m #set memory debugging flag (trace|record|usage)   设置内存调试标志(跟踪|记录|使用)
-N #changes the number of dots allowed before root lookup is done  更改在完成根查找之前允许的点数
-p #指定端口
-r #不递归查询
-R specifies number of retries for UDP packets
-s a SERVFAIL response should stop query
-t #指定查询类型 CNAME|NS|SOA|TXT|DNSKEY|AXFR|...
-T #使用TCP进行DNS查询
-U #使用UDP进行DNS查询
-v #显示执行过程
-V #显示命令版本
-w #如果没有查询结果,则阻塞,一直等待
-W N #等待N秒后超时
-4 #仅查询IPV4的DNS server
-6 #仅查询IPV4的DNS server

nslookup 命令

nslookup:(name server lookup),一个命令行下的网络工具,主要用来查询DNS记录,查看域名解析 是否正常,也可用来诊断网络问题

nslookup 支持交互式和非交互式两种执行方式,在Windows系统中和Linux系统中都可以使用

nslookup 命令不会查询本地 hosts文件中定义的域名和IP对应关系,也不能查询dns的递归或者迭代

nslookup [-option] [name | -] [server]

#非交互式选项
-type #指定查询类型 A|AAAA|CNAME|...
-query #


set
server IP/DNS Name #指定DNS服务器,可以用IP地址或域名
root
-a
-d
-t type

rndc命令

rndc 是 bind 程序的客户端工具,默认使用 TCP的 953 端口连接 bind 服务器,进行管理

rndc [-b address] [-c config] [-s server] [-p port] [-k key-file ] [-y key] [-r] [-V] command

#常用子命令
status #查看BIND服务状态
reload #重载主配置文件和区域解析库文件
reload zonename #重载区域解析库文件
retransfer zonename #手动启动区域传送,而不管序列号是否增加
notify zonename #重新对区域传送发通知
reconfig #重载主配置文件
querylog #开启或关闭查询日志文件/var/log/message
trace #递增debug一个级别
trace LEVEL #指定使用的级别
notrace #将调试级别设置为 0
flush #清空DNS服务器的所有缓存记录

whois 命令

whois 命令可以查询域名注册信息

#安装
[root@ubuntu ~]# apt install whois -y

#格式
whois [OPTION]... OBJECT...

#常用选项
-H       #不显示相关法律声明             
--help           #显示帮助信息
--version       #显示版本信息

#下列选项需要 whois.ript.net 和 RIPE-like 服务器支持
-x #精确匹配
-b #输出简略内容
-a #搜索所有数据库镜像
-s SOURCE[,SOURCE] #从指定数据库中查询
-q [version|sources|types] #查询服务器信息

自建DNS服务

ubuntu 中的 systemd-resolved 服务

在 ubuntu 系统中,虽然在网卡中配置了 DNS 服务器的IP地址,但在使用相关命令进行 DNS 解析时, 默认的 DNS 服务器使用的是 127.0.0.53,而并不是我们在网卡上配置的DNS 服务器地址。

[root@ubuntu ~]# cat /etc/netplan/00-installer-config.yaml
# This is the network config written by 'subiquity'
network:
 renderer: NetworkManager
 ethernets:
   eth0:
      #dhcp4: true
     addresses: [10.0.0.206/24]
     gateway4: 10.0.0.2
     nameservers:
       search: [magedu.com,magedu.org]
       addresses: [223.6.6.6,8.8.8.8]
 version: 2
 
 [root@ubuntu ~]# nslookup www.baidu.com
Server: 127.0.0.53
Address: 127.0.0.53#53
Non-authoritative answer:
Name: www.baidu.com
Address: 140.143.156.192

systemd-resolved 服务为本地应用程序提供了网络名字解析服务, 系统通过它对外进行 dns 请求。

[root@ubuntu ~]# ll /etc/resolv.conf
lrwxrwxrwx 1 root root 39 Apr 21  2022 /etc/resolv.conf -> ../run/systemd/resolve/stub-resolv.conf


[root@ubuntu ~]# cat /etc/resolv.conf 
......
nameserver 127.0.0.53 #默认DNS 配置在此处
options edns0 trust-ad
search baidu.com baidu.org

#直接修改上述文件,将
[root@ubuntu ~]# vim /etc/resolv.conf
......
#nameserver 127.0.0.53
nameserver 223.6.6.6
#测试
[root@ubuntu ~]# nslookup www.baidu.com
Server: 223.6.6.6
Address: 223.6.6.6#53
Non-authoritative answer:
Name: www.baidu.com
Address: 140.143.156.192

#但是只要再次重启网络相关,该内容会被还原
[root@ubuntu ~]# netplan apply
[root@ubuntu ~]# cat /etc/resolv.conf | grep nameserver
nameserver 127.0.0.53

#修改软链接文件指向,保证永久生效
[root@ubuntu ~]# ll /etc/resolv.conf 
lrwxrwxrwx 1 root root 39 Apr 21  2022 /etc/resolv.conf -> 
../run/systemd/resolve/stub-resolv.conf

[root@ubuntu ~]# rm -f /etc/resolv.conf

[root@ubuntu ~]# ln -sv /run/systemd/resolve/resolv.conf /etc/resolv.conf
'/etc/resolv.conf' -> '/run/systemd/resolve/resolv.conf'

[root@ubuntu ~]# ll /etc/resolv.conf 
lrwxrwxrwx 1 root root 32 Jun  1 11:26 /etc/resolv.conf -> /run/systemd/resolve/resolv.conf

[root@ubuntu ~]# nslookup www.baidu.com
Server: 223.6.6.6
Address: 223.6.6.6#53

Non-authoritative answer:
Name: www.baidu.com
Address: 140.143.156.192

设置全局DNS

[root@ubuntu ~]# vim /etc/systemd/resolved.conf
......
DNS=223.5.5.5 223.6.6.6
#重启服务
[root@ubuntu ~]# systemctl restart systemd-resolved.service
#查看
[root@ubuntu ~]# cat /etc/resolv.conf
......
nameserver 223.5.5.5
nameserver 223.6.6.6

bind安装和配置

bind:(Berkeley Internet Name Domain)

bind 是一款实现DNS服务的开放源码软件,由伯克利大学开发,能够提供双向解析,转发,子域授权, view 等功能,使用广泛,目前Internet上半数以上的DNS服务器都是由Bind来实现的。

安装

[root@ubuntu ~]# apt install -y bind9
[root@ubuntu ~]# apt list bind* --installed
Listing... Done
bind9-dnsutils/jammy-updates,now 1:9.18.12-0ubuntu0.22.04.1 amd64 
[installed,automatic]
bind9-host/jammy-updates,now 1:9.18.12-0ubuntu0.22.04.1 amd64 
[installed,automatic]
bind9-libs/jammy-updates,now 1:9.18.12-0ubuntu0.22.04.1 amd64 
[installed,automatic]
bind9-utils/jammy-updates,now 1:9.18.12-0ubuntu0.22.04.1 amd64 
[installed,automatic] 
bind9/jammy-updates,now 1:9.18.12-0ubuntu0.22.04.1 amd64 [installed] 
#服务端包

启动服务

[root@ubuntu ~]# systemctl enable --now named.service
Synchronizing state of named.service with SysV service script with 
/lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable named

查看端口占用

named默认会占用TCP和UDP的53端口, 953是给管理工具使用的

将其它机器的DNS指向本机

[root@rocky ~]# hostname -I
10.0.0.150 192.168.122.1 
[root@rocky ~]# cat /etc/resolv.conf 
# Generated by NetworkManager
search localdomain
nameserver 10.0.0.206

#解析成功,因为DNS服务器默认己经开启了远程监听53端口
[root@rocky ~]# dig www.baidu.com
; <<>> DiG 9.11.36-RedHat-9.11.36-3.el8 <<>> www.baidu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12323
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: 7b6b6d69fde55cbb0100000064783fe167f3e047ae5b4cd6 (good)
;; QUESTION SECTION:
;www.baidu.com. IN A
;; ANSWER SECTION:
www.baidu.com. 600 IN A 140.143.156.192
;; Query time: 266 msec
;; SERVER: 10.0.0.206#53(10.0.0.206)
;; WHEN: Thu Jun 01 14:51:14 CST 2023
;; MSG SIZE rcvd: 87

相关配置说明

Bind 的配置说明

配置文件解析流程

bind 配置文件

[root@ubuntu bind]# dpkg -L bind9
......
/etc/bind
/etc/bind/bind.keys
/etc/bind/db.0 #db.* 名具体解析规则文件
/etc/bind/db.127
/etc/bind/db.255
/etc/bind/db.empty
/etc/bind/db.local
/etc/bind/named.conf #主配置文件
/etc/bind/named.conf.default-zones #中间配置文件,该文件中定义了域名和具体解析规则文件的对应关系
/etc/bind/named.conf.local #中间配置文件,引用
/etc/bind/zones.rfc1918,被注释
/etc/bind/named.conf.options #bind配置项
/etc/bind/zones.rfc1918 #中间配置文件,该文件中定义了域名和具体解析规则文件的对应关系

域名解析DNS服务_第2张图片

主配置文件 /etc/bind/named.conf

[root@ubuntu bind]# cat /etc/bind/named.conf
......
include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local";
include "/etc/bind/named.conf.default-zones";

选项配置文件 /etc/bind/named.conf.options

[root@ubuntu ~]# cat /etc/bind/named.conf.options
options {
 directory "/var/cache/bind";
 ......
 // forwarders {
 // 0.0.0.0;
 // };
 //========================================================================
 // If BIND logs error messages about the root key being expired,
 // you will need to update your keys. See https://www.isc.org/bind-keys
 //========================================================================
 dnssec-validation auto;
 listen-on-v6 { any; };
};

该文件主要包括以下几部份内容,默认只有全局配置部份

配置 配置字段 备注
全局配置 options{}; 全局配置选项
日志子系统配置 logging{}; 运行日志
网络自定义集合 acl 将某个网段或某个具体IP地址定义在一个集合里面
视图 view 配合acl将不同的请求来源用不同的解析规则返回,实现智能 DNS
#常用全局配置选项
options {
 
 #此配置表示DNS服务只监听了本机127.0.0.1的53端口,如果对外提供DNS服务,可以将此行注释或值改成any
 listen-on port 53 { 127.0.0.1; }; 
 
 #监听IPV6的53端口,配置方法同上
 listen-on-v6 port 53 { ::1; };
 
 #监听本机所有IPV6地址,不想监听IPV6地址,可以将 any 改成 none
 listen-on-v6 { any; };
 
 #此配置表示仅本机可以使用DNS服务的解析查询功能,如果对外提供DNS服务,可以将此行注释或值改成any
 allow-query     { localhost; }; 
 #是否启用加密验证,在使用转发的时候,将此项改为 no
 dnssec-validation auto;
 #转发服务器
 forwarders { 10.0.0.207; }; 
    
    #转发策略,具体见后续章节
 forward first; 

};

中间配置文件 /etc/bind/named.conf.default-zones

该文件中定义了要解析的域名与具体解析规则之间的对应关系

zone "ZONE_NAME" IN { #IN 可以省略不写
 type {master|slave|hint|forward}; #类型 master,slave 用于DNS主从,forward表示转发
 file "file_path"; #具体解析规则文件路径
};

allow 访问控制指令

在named配置中有四个allow开头的字段,主要用来实现访问控制

字段 说明
allow-query{}; 允许查询本DNS的主机,白名单,注释就代表所有主机都可使用本机当DNS
allow-transfer{}; 允许区域传送的主机,白名单,注释代表所有,一般用在主从DNS配置时指 定从节点
allow-recursion{}; 允许递归的主机,建议全局使用
allow-update{}; 允许可以远程更新解析规则的主机

acl 地址集合

ACL:将一个或多个网段(或具体IP地址)定义在一个集合里面,并通过统一的名称进行调用。

ACL 只能先定义后调用,因此一般放在配置文件的最上面,在 options 之前定义。

ACL 有四个内置值

ACL 说明
none 排除所有主机
any 所有主机
localhost 本机
localnet 本机IP同子网掩码运算后得到的网段

view 视图

view:视图,将ACL和具体的解析规则对应起来,实现根据条件解析,实现智能DNS

  • 每个view用来匹配一个ACL;

  • 一个bind服务可以可以定义多个view,每个view 中可定义的一个或多个zone;

  • 不同的view中可以对同一个域名进行解析,返回不同的解析结果;

  • 如果定义了view,则所有的zone规则都要写在view中了,不能再直接写在 /etc/named.conf 中 了;

  • 客户端请求到达时,是自上而下检查每个view所对应的ACL的,也就是说,如果请求被命中了,就 进入解析,不再向后匹配;

具体解析规则 /etc/bind/db.*

该文件定义域名的具体解析规则,该文件有多条资源记录组成,每一行都是一条资源记录,在RFC文档 中,DNS解析记录被称为Resource Recode(资源记录),缩写为 RR

Resource Recode 定义

NAME   TTL   CLASS   TYPE   VALUE

#字段说明
NAME #资源记录名称,根据TYPE不一样,写法会有不同
TTL #缓存有效期,默认单位是秒,也可以加单位{ M(分), H(时), D(天), 
W(周) }
CLASS #资源记录类别
TYPE #记录类型,具体值见下表
VALUE #此记录对应的具体值,根据TYPE不一样,写法会有不同

CLASS 字段说明

说明
IN the Internet/互联网,最常用的
CS CSNET,己被废弃
CH CHAOS ,一种早期协议
HS Hesiod

TYPE字段说明

常用的TYPE字段值有A,AAAA,CNAME,MX,NS,PTR,SOA 等

说明
A internet Address,将FQDN解析成IPV4地址,这是最常用的一种解析类型
AAAA IPV6 internet Address,将FQDN解析成IPV6地址
CNAME the canonical name for an alias,记录别名,将域名解析到另一个域名
HINFO host information,主机信息
KEY 安全密钥记录
MD 被废弃,使用 MX
MF 被废弃,使用 MX
MINFO mailbox or mail list information,邮箱或邮件列表信息
MX Mail eXchanger,用于邮件交换,指定邮件服务器
NS Name Server,将解析指向另外一个DNS,表示由被指定的DNS解析当前记录
PTR a domain name pointer,域名指针,用IP地址反向解析域名
SOA a marks the start of a zone of authority,标记权威区域的开始
SRV service and protocol,服务和协议
TXT text strings,文本字符串,此类型值长度限定不超过512个字符
WKS a well known service description/众所周知的服务描述

A 记录 和 AAAA记录

A 记录也称主机记录,是将主机域名解析到指定的物理机IPV4地址上

AAAA 记录是IPV6地址的主机记录,是将主机域名解析到指定物理机的IPV6地址上

A 记录是DNS解析服务中最常见的资源记录

www.linux-baidu.com.   86400 IN A  10.0.0.210

blog.linux-baidu.com.  86400 IN A  10.0.0.206 
blog.linux-baidu.com.  86400 IN A  10.0.0.210 #如果有多条A记录,且有A记录的IP与DNS机器IP相同,则优先返回

*.linux-baidu.com.     86400 IN A  10.0.0.210 #泛解析,匹配所有以 linux-baidu.com结束的域名或主机名

linux-baidu.com. 86400 IN A  10.0.0.167 
@     86400 IN A  10.0.0.167 #@代表域名,此条记录含义同上

CNAME 别名记录

记录别名,将域名解析到另一个域名

abc.linux-baidu.com.  86400 IN CNAME def.baidu.com. #将 abc.linux-baidu.com 解析到 def.baidu.com

MX 记录

邮件交换 (MX) 记录将一个域的电子邮件定向到托管该域用户帐号的服务器(SMTP服务器)。

一个域可以定义多条MX记录,但每条MX记录的优先级不同,如果邮件通过最高优先级记录无法递送, 则采用第二优先级,以此类推。

每个MX记录的value之前有一个数字(0-99),表示此服务器的优先级,数字越小优先级越高;

对MX记录而言,任何一个MX记录后面的服务器名字,都应该在后续有一个A记录

linux-baidu.com.      86400   IN MX  10 mx1.linux-baidu.com.
linux-baidu.com.      86400   IN MX  20 mx2.linux-baidu.com.
mx1.linux-baidu.com.  86400   IN A   10.0.0.206
mx2.linux-baidu.com.  86400   IN A   10.0.0.208

NS 记录

域名服务器 (NS) 记录用于确定哪些服务器为一个网域提供DNS解析服务。

一般来说,为了服务的安全可靠,一个域名,至少应该有两条NS记录,保证服务的冗余,防止出现单点 失败。

linux-baidu.com.       86400 IN NS dns1.linux-baidu.com.
linux-baidu.com.       86400 IN NS dns2.linux-baidu.com.
dns1.linux-baidu.com.  86400 IN A  10.0.0.206
dns2.linux-baidu.com.  86400 IN A  10.0.0.208

PTR 记录

PTR记录是A记录的逆向记录,又称做IP反查记录或指针记录,负责将IP反向解析为域名

#A记录
blog.linux-baidu.com.  86400 IN A  10.0.0.167

#与其对应的PTR记录
#IP地址反着写,后面跟 .in-addr.arpa.
167.0.0.10.in-addr.arpa.  86400 IN PTR blog.linux-baidu.com.

SOA 记录

SOA记录是起始授权记录,用于设置当前DNS服务器的某些规则,SOA记录要放在整个文件的最开始。

SOA 记录表示此DNS是该域名的权威解析服务器,当在查询的过程中,各级缓存都没有要查询的内容 时,最后会通过递归查询的方式到达此DNS服务器,并请求此域名的SOA记录。

SOA记录同样符合 NAME TTL CLASS TYPE VALUE 这五个字段的格式定义,但VALUE字段值较多

VALUE 字段中从左到右具体内容如下:

字段 说明
DNS服务器名称 描述性字段,表示当前DNS服务器名称
服务器管理员邮箱 邮箱中的@要写成
当前数据库的版本号 主从服务器要同步数据,此字段就是数据更新的标识
从服务器拉取数据的时间间隔 从服务器拉取数据的时间间隔
从服务器同步失败后重试时间间隔 上次同步失败后,间隔多久重试
从服务器同步失败超过多长时间从服 务器失败 同步失败时长超过此值,则认为从服务器数据无效
不存在的记录缓存时长 当查询一个不存在的解析记录时,该记录在指定时间内直 接返回不存在
linux-baidu.com.   86400 IN SOA linux-dns. admin.linux-dns.com. (123 3H 15M 1D 1W)
#服务器名 linux-dns
#管理员邮箱   [email protected]
#版本号 123
#从服务器更新间隔 3H
#失败重试间隔 15M
#从服务器数据失效时长 1D
#无效记录缓存时长     1W

TXT 记录

TXT记录是对域进行标识和说明的一种方式,一般用于验证记录,该记录的值可以是人工可读文本,也 可以是机器可读文本,也可为空。

你可能感兴趣的:(服务器,网络,运维,linux,学习)