前言
DNS 是互联网的电话本,负责把人类好记的域名,转换成机器识别的 IP 地址。在企业内网环境,我们经常搭建 BIND 服务器,实现内网域名解析。本文从原理到实操,讲解 DNS 基础、权威服务器配置、完整 BIND 实验,同时记录实验中常见报错。
一、DNS 服务介绍
1. 什么是 DNS
DNS(Domain Name System,域名系统),作用域名 <–> IP 地址相互解析。
-
人类:记忆域名 lizihan.cloud
-
计算机:识别 IP 地址 192.168.1.10
如果没有 DNS,访问网站只能输入枯燥的 IP 数字。
2.DNS 查询两种方式
递归查询:客户端向本地 DNS 服务器发请求,服务器全权帮客户端拿到最终结果,直接返回给用户。家庭路由器、内网 DNS 服务器给主机提供的就是递归查询。
迭代查询:DNS 服务器之间互相查询。本地 DNS 向根、顶级域、权威服务器一步步询问,拿到答案。
3.DNS 服务器分类
| 根域名服务器 | 全球 13 组,DNS 最顶层,返回顶级域服务器地址 |
| 顶级域服务器 | 处理.com .cn .cloud这类后缀 |
| 权威名称服务器 | 负责保管某一个域名(如lizihan.cloud)真正解析记录,保存 zone 区域文件,返回该域名的真实解析结果 |
| 缓存 / 本地 DNS 服务器 | 不维护域名记录,只做查询缓存,例如公共 DNS [114.114.114.114](114.114.114.114) |
4.DNS 记录类型
-
A记录:域名 → IPv4 地址
-
AAAA记录:域名 → IPv6 地址
-
CNAME:别名记录
-
MX:邮件交换记录,必须携带优先级数字,本次实验踩坑点
-
NS:域名的域名服务器记录
-
PTR:反向解析记录,IP 反向解析成域名
💡重点:权威名称服务器,就是真正持有这个域名 zone 区域文件的服务器,拥有该域名的解析数据。
二、配置权威名称服务器(BIND)
实验环境:CentOS7,软件包:bind bind‑utils
bind 主程序名:named
2.1 核心配置文件说明
/etc/named.conf 主配置文件
-
设置监听端口、允许查询的网段、定义 zone 区域
-
校验语法命令:named‑checkconf
/var/named/xxx.zone 区域数据库文件(zone 文件)
-
保存域名所有 A、MX、NS 解析记录,权威服务器的核心数据文件
-
校验语法命令:named‑checkzone 域名 区域文件路径
服务管理
#安装bind
yum install -y bind bind-utils
#启动开机自启
systemctl start named
systemctl enable named
#查看状态
systemctl status named
2.2 /etc/named.conf 关键配置片段
options {
listen-on port 53 { any; }; #53端口监听,允许所有网卡
listen-on-v6 port 53 { ::1; };
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
allow-query { any; }; #允许所有客户端来查询DNS
recursion yes;
};
#定义正向zone区域,告诉bind lizihan.cloud这个域名的解析文件在哪里
zone "lizihan.cloud" IN {
type master; #master代表这台是主权威服务器
file "lizihan.cloud.zone"; #区域文件,相对路径基于directory /var/named
};
type master:代表本服务器是这个域的主权威名称服务器,维护原始 zone 数据。
2.3 正向区域文件模板 /var/named/lizihan.cloud.zone
⚠️坑点 1:域名结尾的.,完整 FQDN 域名末尾必须带点,否则 bind 自动拼接本域名
⚠️坑点 2:MX 记录,MX 后面第一个参数必须写优先级数字,直接写域名就会报 not a valid number
⚠️坑点 3:文件权限,属组必须为named,否则服务读取文件失败
$TTL 300
@ IN SOA dns.lizihan.cloud. admin.lizihan.cloud. (
2026080501 ;序列号,修改记录要递增
3600 ;刷新时间
1800 ;重试
86400 ;过期
300 ) ;最小TTL
IN NS dns.lizihan.cloud.
dns IN A 192.168.10.10
www IN A 192.168.10.11
# MX记录:MX 【优先级数字】 邮件服务器域名
@ IN MX 10 mail.lizihan.cloud.
mail IN A 192.168.10.12
修改权限,bind 才能读取文件:
chown root:named /var/named/lizihan.cloud.zone
chmod 640 /var/named/lizihan.cloud.zone
三、BIND 实验完整流程 & 排错
3.1 完整操作步骤
yum install -y bind bind-utils
修改 /etc/named.conf,修改监听与 allow‑query,增加 zone 定义
复制模板,创建正向 zone 文件,写入 A NS MX 记录
cp /var/named/named.localhost /var/named/lizihan.cloud.zone
vim /var/named/lizihan.cloud.zone
修改 zone 文件权限属组
校验配置文件语法(必做!实验最重要两步)
#校验主配置文件named.conf
named-checkconf
#校验区域zone文件,格式 named-checkzone 域名 完整文件路径
named-checkzone lizihan.cloud /var/named/lizihan.cloud.zone
✅输出 OK,代表语法没问题;输出报错就根据行号修改 zone 文件。
systemctl restart named
dig www.lizihan.cloud @192.168.10.10
nslookup www.lizihan.cloud 192.168.10.10
3.2 实验高频报错整理(实操踩坑)
报错 1:named‑checkzone只输入域名,直接打印一大段 usage
原因:命令缺少第二个参数(zone 文件路径)
正确写法:named‑checkzone lizihan.cloud /var/named/lizihan.cloud.zone
报错 2:not a valid number MX 记录行报错
near 'mail.lizihan.cloud.': not a valid number
原因:MX 记录漏写优先级数字。
❌错误:@ IN MX mail.lizihan.cloud.
✅正确:@ IN MX 10 mail.lizihan.cloud.
报错 3:permission denied 权限拒绝
zone 文件属组不是named,bind 进程读不到文件
修复:chown root:named /var/named/lizihan.cloud.zone
报错 4:解析不到记录,但是校验全部 OK
检查防火墙 53 端口放行;检查named.conf的allow‑query {any;};
3.3 实验验证成功效果
执行named‑checkzone返回 OK;dig 命令可以拿到对应的 A 记录 IP 地址,代表权威 DNS 服务器实验完成。
四、小结
DNS 核心就是域名与 IP 地址映射,权威名称服务器保存域名真正的 zone 解析库。
BIND 核心两个校验命令一定要记牢:
-
named‑checkconf:校验主配置/etc/named.conf
-
named‑checkzone 域名 zone文件路径:校验区域解析库,必须两个参数
zone 文件两大致命坑:完整域名末尾.、MX 记录不能省略优先级数字,也是考试、实验最高频出错点。
修改 zone 解析记录,SOA 的序列号要 + 1,否则从服务器不会同步更新。





