使用systemctl启动DNS服务:systemctl start named
,并设置
如何在服务上启动DNS服务详细指南
前期准备与环境要求
系统要求
操作系统版本 |
推荐DNS软件 |
最低硬件要求 |
CentOS 7+/RHEL 7+ |
BIND 9.x+ |
512MB内存,1核CPU |
Ubuntu 18.04+ |
BIND 9.x+ |
512MB内存,1核CPU |
Debian 10+ |
BIND 9.x+ |
512MB内存,1核CPU |
网络环境要求
- 公网/内网固定IP地址
- 开放UDP 53端口(可选TCP 53)
- 建议关闭防火墙测试阶段(后续可配置规则)
安装DNS服务软件
CentOS/RHEL系安装
# 更新软件源
yum update y
# 安装BIND DNS服务器
yum install y bind bindutils
# 安装调试工具(可选)
yum install y vim nettools
Ubuntu/Debian系安装
# 更新软件源
apt update y
# 安装BIND DNS服务器
apt install y bind9 bind9utils bind9doc
# 安装调试工具(可选)
apt install y vim nettools
配置文件结构解析
核心配置文件路径
文件名 |
作用描述 |
/etc/named.conf |
主配置文件 |
/etc/named/ |
区域文件存放目录(CentOS默认) |
/etc/bind/ |
区域文件存放目录(Ubuntu默认) |
/var/named/ |
运行时数据目录(CentOS默认) |
关键配置参数说明
// named.conf示例片段
options {
listenon port 53 { 127.0.0.1; any; }; // 监听地址
directory "/var/named"; // 数据目录
dumpfile "/var/named/data/cache_dump.db";
statisticsfile "/var/named/data/named_stats.txt";
memstatisticsfile "/var/named/data/named_mem_stats.txt";
allowquery { any; }; // 允许查询范围
recursion yes; // 启用递归查询
};
配置正向解析区域
创建区域文件
# CentOS示例
cp /usr/share/doc/bind*/sample/db.local /etc/named/db.example.com
# Ubuntu示例
cp /etc/bind/db.local /etc/bind/db.example.com
编辑区域文件
// db.example.com示例内容
$TTL 86400 ; 默认生存时间(1天)
@ IN SOA ns1.example.com. admin.example.com. (
2023100101 ; 序列号
3600 ; 刷新时间
1800 ; 重试间隔
1209600 ; 过期时间
86400 ) ; 最小TTL
;
@ IN NS ns1.example.com.
@ IN A 192.168.1.100
ns1 IN A 192.168.1.100
www IN A 192.168.1.100
关联区域文件到主配置
// named.conf添加内容
zone "example.com" {
type master;
file "db.example.com";
allowupdate { none; };
};
防火墙与SELinux配置
防火墙端口放行
# CentOS防火墙配置
firewallcmd permanent addservice=dns
firewallcmd reload
# Ubuntu防火墙配置(UFW)
ufw allow 53/udp
ufw allow 53/tcp
SELinux配置(CentOS)
# 查看当前模式
getenforce
# 临时关闭(仅测试)
setenforce 0
# 永久关闭
sed i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
启动与验证服务
启动DNS服务
# CentOS启动命令
systemctl start named
systemctl enable named
# Ubuntu启动命令
systemctl start bind9
systemctl enable bind9
验证服务状态
# 查看服务状态
systemctl status named # CentOS
systemctl status bind9 # Ubuntu
# 检查监听端口
netstat nupl | grep :53
客户端测试验证
使用dig命令测试
# 测试A记录解析
dig www.example.com +short
# 测试NS记录解析
dig @127.0.0.1 t NS example.com
# 测试递归查询
dig @8.8.8.8 www.example.com
使用nslookup测试
# 交互式测试
nslookup www.example.com
# 指定DNS服务器测试
nslookup type=MX example.com 192.168.1.100
常见问题排查
典型错误及解决方案
错误现象 |
可能原因 |
解决方案 |
服务无法启动 |
配置文件语法错误/权限不足 |
检查named.conf语法,chown named:named /var/named/ |
无法解析查询 |
区域文件未加载/防火墙未放行 |
检查zone配置,firewallcmd listall |
出现"connection refused" |
DNS服务未监听对应接口 |
检查listenon配置,netstat anu |
日志文件分析
日志文件路径 |
作用描述 |
/var/log/messages |
系统日志(CentOS) |
/var/log/syslog |
系统日志(Ubuntu) |
/var/named/data/named.log |
BIND专属日志文件 |
相关问题与解答
Q1:如何配置DNS服务支持多个区域?
A1:

- 为每个区域创建独立的区域文件(如
db.example.com
、db.test.com
)
- 在
named.conf
中添加多个zone块配置
- 确保所有区域文件存放在
options
指定的目录下
- 重启服务使配置生效:
systemctl restart named
Q2:为什么配置了DNS服务但客户端无法解析?
A2:
可能原因及排查步骤:

- 防火墙问题:检查53端口是否放行(
firewallcmd listall
)
- SELinux限制:临时关闭SELinux测试(
setenforce 0
)
- 区域文件错误:检查
$TTL
、SOA
记录格式是否正确
- 服务未监听:使用
netstat anu
确认服务监听状态
- 缓存问题:清除客户端DNS缓存(Windows:
ipconfig /flushdns
)