DNS 是互联网的基础服务之一。本文从零开始,在 CentOS 8 上搭建一个完整的 BIND DNS 服务器,实现域名解析。
什么是 DNS?
DNS(Domain Name System)将人类易记的域名(如 bytecho.cn)转换为机器可读的 IP 地址(如 1.2.3.4)。
- 正向解析: 域名 → IP 地址
- 反向解析: IP 地址 → 域名
1. 安装 BIND
# 安装 DNS 服务器
yum install bind bind-utils -y
# 查看安装版本
named -vBIND(Berkeley Internet Name Domain)是最常用的 DNS 服务器软件。bind-utils 包含 dig、nslookup 等 DNS 诊断工具。
2. BIND 核心配置文件
BIND 的主配置文件是 /etc/named.conf,我们来理解它的结构:
options {
listen-on port 53 { any; }; # 监听所有网卡的 53 端口
listen-on-v6 port 53 { any; };
directory "/var/named"; # 区域文件存放目录
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
allow-query { any; }; # 允许所有客户端查询
recursion yes; # 允许递归查询(作为公共DNS时需要)
};
zone "." IN {
type hint;
file "named.ca"; # 根域名服务器列表
};
zone "bytecho.cn" IN {
type master; # 主 DNS 服务器
file "bytecho.cn.zone"; # 区域文件
allow-update { none; };
};关键配置说明:
listen-on port 53 { any; }— DNS 默认端口 53,设为 any 表示监听所有网卡allow-query { any; }— 允许所有人查询(测试环境用,生产环境应限制 IP)recursion yes;— 开启递归查询(作为公共 DNS 必须开)- 每个
zone定义一个域名区域的解析规则
3. 创建区域文件(zone file)
创建 /var/named/bytecho.cn.zone:
$TTL 1D
@ IN SOA ns1.bytecho.cn. admin.bytecho.cn. (
2026070901 ; 序列号(每次修改递增)
3H ; 刷新间隔
1H ; 重试间隔
1W ; 过期时间
1D ) ; 否定缓存TTL
IN NS ns1.bytecho.cn.
IN A 1.2.3.4
ns1 IN A 1.2.3.4
www IN A 1.2.3.4
@ IN MX 10 mail.bytecho.cn.
mail IN A 1.2.3.5记录类型详解:
| 记录类型 | 作用 | 示例 |
|---|---|---|
| SOA | 区域权威记录 | 包含主 DNS、管理员邮箱、序列号 |
| NS | 指定该域名的 DNS 服务器 | ns1.bytecho.cn |
| A | 域名 → IPv4 地址 | www.bytecho.cn → 1.2.3.4 |
| AAAA | 域名 → IPv6 地址 | www.bytecho.cn → ::1 |
| CNAME | 域名别名 | www → bytecho.cn |
| MX | 邮件交换记录 | @ → mail.bytecho.cn |
| TXT | 文本记录 | SPF、DKIM 验证等 |
4. 启动服务并配置防火墙
# 检查配置是否有语法错误
named-checkconf
named-checkzone bytecho.cn /var/named/bytecho.cn.zone
# 启动服务
systemctl start named
systemctl enable named
# 防火墙放行 DNS
firewall-cmd --permanent --add-service=dns
firewall-cmd --reload5. 测试 DNS 解析
# 本地测试
dig @localhost bytecho.cn
dig @192.168.1.100 www.bytecho.cn
# 使用 nslookup 测试
nslookup bytecho.cn localhost
# 反向解析测试
dig -x 1.2.3.4 @localhost常见问题
Q:启动 named 失败,提示权限不足?
检查 /var/named 目录权限,确保 named 用户能读取:
chown named:named /var/named/bytecho.cn.zone
chmod 640 /var/named/bytecho.cn.zoneQ:客户端能解析内网域名吗?
需要将客户端的 DNS 设置为这台服务器的 IP,或者在路由器上配置 DNS 转发。
Q:如何配置 DNS 转发(上游 DNS)?
在 /etc/named.conf 的 options 中添加:
forwarders {
8.8.8.8;
114.114.114.114;
};
forward only;这样本地没有的域名会转发到 8.8.8.8 解析。
掌握了这些,你已经可以在内网搭建自己的 DNS 服务器了。接下来可以试试配置主从 DNS 实现高可用。
评论 (0)