文章目录
DNS服务器
DNS服务介绍
DNS的诞生
当我们在浏览器中输入一个域名访问某个网站时,这个域名最终会被解析为一个 IP 地址,我们的浏览器实际是在和这个 IP 地址进行通信。
负责将域名解析到 IP 地址的协议为 DNS(Domain Name System,域名解析系统)。
网络中每个节点都有自己唯一的 IP 地址,通过 IP 地址可以实现节点之间的相互访问,但是如果和所有的节点进行通信都使用 IP 地址的方式,人们很难记住这么多 IP 地址,为此提出了 DNS,将难以记忆的 IP 地址映射为字符类型的地址。
Internet 的前身 ARPANet 时就已经存在主机名称和 IP 地址的对应关系,只是当时主机数目很少,只需要一个 HOSTS.txt 文件就可以维护对应关系,HOSTS.txt 由 NIC(network information center)维护,改动自己主机名的使用者通过电子邮件将自身改动发送给 NIC,NIC 定期更新 HOSTS.txt,这一切在主机数目很少时都没有什么问题。但当 ARPANet 使用 TCP/IP 协议之后,网络用户数量出现了激增,手动维护 HOSTS.txt 似乎变得困难起来:
- 名称冲突:NIC 虽然可以保证管理的主机名称一致性,但很难保证主机不会随机修改名称和别人正在使用的一致。
- 一致性:随着网络规模扩大,用户的 HOSTS.txt 很难保持一致性,很可能主机的 HOSTS.txt 文件还未更新,其余主机的名称已经变动了数次。
于是接替者 DNS 由此诞生。

域名系统组成
域名:主机的字符标识方式。大部分情况下,我们访问网站时在浏览器内输入的URL就是该网站的域名。
域名解析服务器(DNS Server):负责维护域名与IP地址对应关系的数据库,并对解析者的请求进行响应。
域名系统是一个分布式的结构,每个服务器上的数据库只保存了部分域名与IP的对应关系

域名的标识方式
DNS 就像全世界一本超大分布式电话本,域名是分层管理的,一层一层往下找。
层级结构图通俗理解
根域:DNS 世界的总入口,全世界一共 13 组根服务器。
顶级域 :.com/.cn/.edu 这一层。
二级域 :我们自己注册买的域名,比如 huawei.com 里的 huawei。
主机名 :二级域名前面的名字,代表服务器,如www、ftp。
1.域名从右往左看层级,越靠右,层级越高。最右边是顶级域,最左边是主机。
2.根域 . 是所有域名的源头,写域名的时候一般省略。
3.DNS 服务器不会存全部域名,查不到就去找别的服务器,分递归、迭代两种查询模式。
DNS查询方式
DNS是一个分布式系统,绝大多数的DNS服务器端的数据库不会拥有所有的域名记录,当客户端向一个 DNS服务器端查询域名但该DNS服务器端上却没有该域名的记录时,此时会有两种继续查询的方式:
- 递归查询:由DNS服务器向其他DNS服务器进行查询,将最终查询结果返回给DNS客户端
- 迭代查询:DNS服务器告知DNS客户端其他DNS服务器地址,客户端自行向其他DNS服务器进行查询。
DNS资源记录
DNS资源记录(Resource Record,RR)是DNS服务器中存储域名与对应信息的核心数据结构,每一条 记录都对应一个域名的特定属性。
| 列名 | 内容 |
|---|---|
| owner‑name | 域名 / 拥有者名称 |
| TTL | 生存时间 Time To Live,本地 DNS 缓存这条记录多久,单位:秒 |
| class | 网络类别,IN=Internet,全网 99.9% 域名解析都是 IN |
| type | 资源记录类型,A 记录:IPV4 正向解析 |
| data | 记录数据 / 内容,这条 A 记录的值 |
| 记录类型 | 作用 | 一句话通俗解释 |
|---|---|---|
| A | IPv4 正向解析 | 域名 → IPv4 地址(最常用,网站用) |
| AAAA | IPv6 正向解析 | 域名 → IPv6 地址 |
| CNAME | 别名记录 | 域名指向另一个域名,相当于外号 |
| PTR | 反向解析 | IP → 域名,把 IP 反查域名 |
| NS | 域名服务器记录 | 告诉别人:这个域名由哪台 DNS 服务器管 |
| SOA | 起始授权记录 | 域的基础配置,定义域名管理员、刷新、过期时间 |
| MX | 邮件交换记录 | 指定接收邮件的服务器,发邮件要用 |
| TXT | 文本记录 | 存一段文本,做验证、防垃圾邮件用 |
| SRV | 服务定位记录 | 告诉客户端某个服务在哪台主机哪个端口 |
DNS常用客户端命令
windows查询dns缓存
bash
C:\Users\Lenovo>ping www.huawei.com
正在 Ping hcdnw.cbgipv6.gslb.c.cdnhwc2.com [221.229.162.64] 具有 32 字节的数据:
来自 221.229.162.64 的回复: 字节=32 时间=12ms TTL=55
来自 221.229.162.64 的回复: 字节=32 时间=12ms TTL=55
来自 221.229.162.64 的回复: 字节=32 时间=12ms TTL=55
来自 221.229.162.64 的回复: 字节=32 时间=12ms TTL=55
221.229.162.64 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 12ms,最长 = 12ms,平均 = 12ms
C:\Users\Lenovo>ipconfig /displaydns | findstr huawei
www.huawei.com
记录名称. . . . . . . : www.huawei.com
CNAME 记录 . . . . . : www.huawei.com.akadns.net
记录名称. . . . . . . : www.huawei.com.akadns.net
CNAME 记录 . . . . . : www.huawei.com.c.cdnhwc1.com
记录名称. . . . . . . : www.huawei.com.c.cdnhwc1.com
support.huawei.com
记录名称. . . . . . . : support.huawei.com
CNAME 记录 . . . . . : support.huawei.com.akadns.net
记录名称. . . . . . . : support.huawei.com.akadns.net
CNAME 记录 . . . . . : support.huawei.com.lxdns.com
记录名称. . . . . . . : support.huawei.com.lxdns.com
download.huawei.com
记录名称. . . . . . . : download.huawei.com
CNAME 记录 . . . . . : download.huawei.com.akadns.net
记录名称. . . . . . . : download.huawei.com.akadns.net
CNAME 记录 . . . . . : download.huawei.com.lxdns.com
记录名称. . . . . . . : download.huawei.com.lxdns.com
C:\Users\Lenovo>ipconfig /flushdns
Windows IP 配置
已成功刷新 DNS 解析缓存。
#nslooup交互式
C:\Users\Lenovo>nslookup
默认服务器: public1.alidns.com
Address: 223.5.5.5
> www.qq.com
> 服务器: public1.alidns.com
> Address: 223.5.5.5
非权威应答:
名称: ins-r23tsuuf.ias.tencent-cloud.net
Addresses: 240e:e1:a800:120::36
240e:e1:a800:120::76
101.91.22.57
101.91.42.232
Aliases: www.qq.com
#nslookup非交互式
C:\Users\Lenovo>nslookup www.360.cn
服务器: public1.alidns.com
Address: 223.5.5.5
非权威应答:
名称: www.360.cn
Addresses: 106.63.103.5
36.99.171.154
wohis查询域名信息
bash
[root@dns-client ~]# yum install -y whois
[root@dns-client ~]# whois qq.com
host命令
bash
#host: Linux 下用来查询 DNS 解析的小工具
#-t NS: 指定查询类型为 NS 记录(Name Server, 域名服务器)
#huawei.com: 要查的域名
[root@dns-client ~]# host -t NS huawei.com #查询 huawei.com 这个域名, 由哪些 DNS
服务器负责解析
huawei.com name server nsallsec.huawei.com.
huawei.com name server nsall4th.huawei.cn.
huawei.com name server nsall.huawei.com.
huawei.com name server nsall3rd.huawei.cn.
#查IP(A记录)
[root@dns-client ~]# host www.qq.com
www.qq.com is an alias for ins-r23tsuuf.ias.tencent-cloud.net.
ins-r23tsuuf.ias.tencent-cloud.net has address 101.91.22.57
ins-r23tsuuf.ias.tencent-cloud.net has address 101.91.42.232
ins-r23tsuuf.ias.tencent-cloud.net has IPv6 address 240e:e1:a800:120::76
ins-r23tsuuf.ias.tencent-cloud.net has IPv6 address 240e:e1:a800:120::36
#查邮箱服务器(MX记录)
[root@dns-client ~]# host -t MX qq.com
qq.com mail is handled by 30 mx1.qq.com.
qq.com mail is handled by 20 mx2.qq.com.
qq.com mail is handled by 10 mx3.qq.com.
dig命令
bash
[root@dns-client ~]# dig -t A www.qq.com
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7 <<>> -t A www.qq.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 3240
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; MBZ: 0x0005, udp: 512
;; QUESTION SECTION:
;www.qq.com. IN A
;; ANSWER SECTION:
www.qq.com. 5 IN CNAME ins-r23tsuuf.ias.tencent-cloud.net.
ins-r23tsuuf.ias.tencent-cloud.net. 5 IN A 101.91.22.57
ins-r23tsuuf.ias.tencent-cloud.net. 5 IN A 101.91.42.232
;; Query time: 519 msec
;; SERVER: 10.1.8.2#53(10.1.8.2)
;; WHEN: Wed Aug 05 14:39:17 CST 2026
;; MSG SIZE rcvd: 119
# 只看精简结果(最实用)
[root@dns-client ~]# dig +short www.qq.com
ins-r23tsuuf.ias.tencent-cloud.net.
101.91.42.232
101.91.22.57
# 只看回答部分
[root@dns-client ~]# dig +nocmd +noall +answer www.qq.com
www.qq.com. 5 IN CNAME ins-r23tsuuf.ias.tencent-cloud.net.
ins-r23tsuuf.ias.tencent-cloud.net. 5 IN A 101.91.22.57
ins-r23tsuuf.ias.tencent-cloud.net. 5 IN A 101.91.42.232
nslookup命令
bash
# 查www.qq.com对应IP是多少
[root@dns-client ~]# nslookup www.qq.com
Server: 10.1.8.2
Address: 10.1.8.2#53
交互模式:
Non-authoritative answer:
www.qq.com canonical name = ins-r23tsuuf.ias.tencent-cloud.net.
Name: ins-r23tsuuf.ias.tencent-cloud.net
Address: 101.91.22.57
Name: ins-r23tsuuf.ias.tencent-cloud.net
Address: 101.91.42.232
Name: ins-r23tsuuf.ias.tencent-cloud.net
Address: 240e:e1:a800:120::36
Name: ins-r23tsuuf.ias.tencent-cloud.net
Address: 240e:e1:a800:120::76
# 让114.114.114.114帮我解析www.qq.com
[root@dns-client ~]# nslookup www.qq.com 114.114.114.114
Server: 114.114.114.114
Address: 114.114.114.114#53
Non-authoritative answer:
www.qq.com canonical name = ins-r23tsuuf.ias.tencent-cloud.net.
Name: ins-r23tsuuf.ias.tencent-cloud.net
Address: 101.91.42.232
Name: ins-r23tsuuf.ias.tencent-cloud.net
Address: 101.91.22.57
Name: ins-r23tsuuf.ias.tencent-cloud.net
Address: 240e:e1:a800:120::36
Name: ins-r23tsuuf.ias.tencent-cloud.net
Address: 240e:e1:a800:120::76
[root@dns-client ~]# nslookup
> www.qq.com
Server: 10.1.8.2
Address: 10.1.8.2#53
Non-authoritative answer:
www.qq.com canonical name = ins-r23tsuuf.ias.tencent-cloud.net.
Name: ins-r23tsuuf.ias.tencent-cloud.net
Address: 101.91.22.57
Name: ins-r23tsuuf.ias.tencent-cloud.net
Address: 101.91.42.232
Name: ins-r23tsuuf.ias.tencent-cloud.net
Address: 240e:e1:a800:120::36
Name: ins-r23tsuuf.ias.tencent-cloud.net
Address: 240e:e1:a800:120::76
>
> set q=a
> www.qq.com
Server: 10.1.8.2
Address: 10.1.8.2#53
Non-authoritative answer:
www.qq.com canonical name = ins-r23tsuuf.ias.tencent-cloud.net.
Name: ins-r23tsuuf.ias.tencent-cloud.net
Address: 101.91.22.57
Name: ins-r23tsuuf.ias.tencent-cloud.net
配置权威名称服务器
权威名称服务器架构
权威 DNS 服务器:手里存着某一片域名真实 DNS 记录,能给出 "权威标准答案" 的服务器。
类比:学校教务处,掌握本班学生真实档案,可以给出官方准确答复。
Linux 上用 BIND 软件 来搭建权威 DNS 服务器。
主服务器 & 辅助服务器(master/slave,新版本叫 primary/secondary)
-
主服务器 primary (master)
唯一一份原始区域数据 ,我们在这里写 A 记录、CNAME、MX 等所有域名解析记录。一个域名区域,只能有 1 台主服务器。
-
辅助服务器 secondary (slave)
不手动写记录!定期从主服务器把整套域名数据复制过来(这个动作叫区域传输)。
可以部署很多台辅助服务器,做备份、高可用。
多久同步、判断数据是否过期,全部由
SOA记录控制。
重点句子(黄色高亮):一台 DNS 服务器,可以 A 域名当主服务器,同时给 B 域名当辅助服务器。
例子:这台机器,对
myz.cloud是主服务器;对另一个域名test.com是备份辅助服务器。
版本小提示:旧 BIND 叫 master/slave;新版本 BIND9.16 开始统一叫 primary/secondary。
注册域名时的要求
买域名的时候,你必须提交你权威 DNS 服务器的名字和 IP。
域名注册商会把你的 NS 记录写到上一级父域,外网才能找到你的 DNS 服务器。
✅生产环境规范:至少 2 台权威 DNS 服务器,放在不同机房。一台崩了另一台顶上,防止整个域名解析全部瘫痪。
私有主服务器架构(安全玩法)
primary主服务器:放在内网,私有,外网访问不到,只用来写域名配置。secondary辅助服务器:放到公网对外提供解析服务。
好处:外部用户只能访问辅助服务器,主服务器不暴露在公网,不容易被黑客攻击。
区分两个概念(别搞混)
| 类型 | 特点 |
|---|---|
| 权威服务器 | 保存域名原始记录,返回权威标准答案 |
| 递归 / 本地 DNS 服务器 | 帮用户到处查域名,自己不存域名原始记录(比如 8.8.8.8,114.114.114.114) |
BIND实验
节点规划
bash
dns-server:[root@localhost ~]# hostnamectl set-hostname dns-server
[root@localhost ~]# nmcli connection modify ens33 ipv4.method manual
ipv4.addresses 10.1.8.10/24 ipv4.gateway 10.1.8.2 ipv4.dns 10.1.8.2 autoconnect
yes
dns-client:
[root@localhost ~]# hostnamectl set-hostname dns-client
[root@localhost ~]# nmcli connection modify ens33 ipv4.method manual
ipv4.addresses 10.1.8.11/24 ipv4.gateway 10.1.8.2 ipv4.dns 10.1.8.2 autoconnect
yes
安装BIND
bash
[root@dns-server ~]# yum install -y bind bind-utils
配置named侦听的IP地址
示例1:将BIND配置为侦听10.1.8.10 IPv4地址和默认的IPv4回送地址。
bash
# vim /etc/named.conf
options {
listen-on port 53 { 127.0.0.1; 10.1.8.10; };
......
};
示例2:结合acl指令配置。
bash
# vim /etc/named.conf
acl interfaces { 127.0.0.1; 10.1.8.10; };
acl interfacesv6 { ::1; 2001:db8:2020::5300; };
options {
listen-on port 53 { interfaces; };
listen-on-v6 port 53 { interfacesv6; };
...output omitted...
};
实验步骤
bash
[root@dns-server ~]# vim /etc/named.conf
......
options {
# 修改listen-on
listen-on port 53 { 127.0.0.1; 10.1.8.10; };
......
# 修改allow-query
allow-query { any; };
};
......
配置zone
bash
[root@dns-server ~]# vim /etc/named.conf
......
# 最后添加如下内容
zone "myz.cloud" IN {
type master;
file "myz.cloud.zone";
};
zone "8.1.10.in-addr.arpa" IN {
type master;
file "10.1.8.zone";
};
创建区域文件
bash
[root@dns-server ~]# cp /var/named/named.localhost /var/named/myz.cloud.zone
[root@dns-server ~]# cp /var/named/named.loopback /var/named/10.1.8.zone
[root@dns-server ~]# chmod 640 /var/named/*.zone
[root@dns-server ~]# chown root:named /var/named/*.zone
# 如果系统开启了selinux功能,执行下面命令设置文件标签
[root@dns-server ~]# chcon -t named_zone_t /var/named/*.zone
添加记录
myz.cloud 域
bash
# 参考/var/named/named.localhost
[root@dns-server ~]# vim /var/named/myz.cloud.zone
$TTL 1D
@ IN SOA dns.myz.cloud. root.myz.cloud. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
IN NS dns.myz.cloud.
dns IN A 10.1.8.10
server IN A 10.1.8.10
student IN CNAME client.myz.cloud.
client IN A 10.1.8.11
www 30 IN A 10.1.8.200
@ IN MX 10 mail.myz.cloud.
mail IN A 10.1.8.253
8.1.10.inaddr.arpa区域
bash
# 参考/var/named/named.loopback
[root@dns-server ~]# vim /var/named/10.1.8.zone
$TTL 1D
@ IN SOA dns.myz.cloud. root.myz.cloud. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
IN NS dns.myz.cloud.
10 IN PTR server.myz.cloud.
10 IN PTR dns.myz.cloud.
11 IN PTR client.myz.cloud.
11 IN PTR student.myz.cloud.
200 IN PTR www.myz.cloud.
253 IN PTR mail.myz.cloud.
验证配置
bash
[root@dns-server ~]# named-checkconf
# 如果配置文件不在默认位置,使用一下命令命令验证
[root@dns-server ~]# named-checkconf /media/backups/named.conf
[root@dns-server ~]# named-checkzone myz.cloud
/var/named/myz.cloud.zone
zone myz.cloud/IN: loaded serial 0
OK
[root@dns-server ~]# named-checkzone 1.8.10 /var/named/10.1.8.zone
zone 1.8.10/IN: loaded serial 0
OK
运行BIND
bash
# 启用并启动服务
[root@dns-server ~]# systemctl enable named --now
[root@dns-server ~]# systemctl status named
# 设置防火墙
[root@dns-server ~]# firewall-cmd --add-service=dns
[root@dns-server ~]# firewall-cmd --add-service=dns --permanent
客户端测试
bash
# 配置客户端 dns
[root@dns-client ~]# nmcli connection modify ens33 ipv4.dns 10.1.8.10
[root@dns-client ~]# nmcli connection up ens33
# ping 工具测试
[root@dns-client ~]# ping dns.myz.cloud
PING dns.myz.cloud (10.1.8.10) 56(84) bytes of data.
64 bytes from dns.myz.cloud (10.1.8.10): icmp_seq=1 ttl=64 time=1.26 ms
[root@dns-client ~]# ping student.myz.cloud
PING client.myz.cloud (10.1.8.11) 56(84) bytes of data.
64 bytes from client.myz.cloud (10.1.8.11): icmp_seq=1 ttl=64 time=0.092 ms
# 其他工具
[root@dns-client ~]# host student.myz.cloud
student.myz.cloud is an alias for client.myz.cloud.
client.myz.cloud has address 10.1.8.11
[root@dns-client ~]# host 10.1.8.10
10.8.1.10.in-addr.arpa domain name pointer server.myz.cloud.
10.8.1.10.in-addr.arpa domain name pointer dns.myz.cloud.
[root@dns-client ~]# getent hosts student.myz.cloud
10.1.8.11 client.myz.cloud student.myz.cloud
ent.myz.cloud
PING client.myz.cloud (10.1.8.11) 56(84) bytes of data.
64 bytes from client.myz.cloud (10.1.8.11): icmp_seq=1 ttl=64 time=0.092 ms
其他工具
root@dns-client \~# host student.myz.cloud
student.myz.cloud is an alias for client.myz.cloud.
client.myz.cloud has address 10.1.8.11
root@dns-client \~# host 10.1.8.10
10.8.1.10.in-addr.arpa domain name pointer server.myz.cloud.
10.8.1.10.in-addr.arpa domain name pointer dns.myz.cloud.
root@dns-client \~# getent hosts student.myz.cloud
10.1.8.11 client.myz.cloud student.myz.cloud