centos7 搭建dns 服务器
- 云服务器
- 2025-09-08
- 6
环境准备与基础配置
1 系统要求
| 组件 | 版本/规格 | 备注 |
|---|---|---|
| OS | CentOS 7.x | 推荐最小安装模式 |
| CPU/内存 | ≥1核+512MB | 生产环境建议2核4GB以上 |
| 网络 | 固定IP地址(非DHCP动态分配) | 确保防火墙放行DNS端口 |
2 关闭冲突服务
执行以下命令停止可能存在的竞争性进程:
systemctl stop named # 停止旧版BIND服务(如有) systemctl disable named yum remove bind bind-utils -y # 彻底卸载旧包
安装BIND软件包
1 通过EPEL源安装最新版
yum install epel-release -y # 启用扩展仓库 yum install bind bind-utils -y # 安装DNS主程序及工具集
验证安装结果:named -v应显示BIND版本号(如9.11.x系列)
2 配置文件路径说明
| 文件名 | 作用 | 默认位置 |
|---|---|---|
| named.conf | 全局配置文件 | /etc/named.conf |
| named.rfc1912.zones | 区域模板规范 | /etc/named.rfc1912.zones |
| localdomain.zone | 本地域名解析示例 | /var/named/ |
核心配置步骤详解
1 修改主配置文件(/etc/named.conf)
关键参数调整示例:

️ 注意:生产环境务必限制allow-query范围,推荐使用内网IP段(如168.0.0/24)
2 创建正向解析区域(以example.com为例)
新建文件/var/named/example.com.zone并写入:
技巧:serial字段需随每次修改递增,确保变更生效
3 反向解析配置(IP反查域名)
创建/var/named/192.168.1.arpa如下:
$TTL 86400 @ IN SOA ns.example.com. admin.example.com. ( 2024052001 ; serial number同步正向区域 3600 ; refresh interval 1800 ; retry interval 604800 ; expiry time 86400 ) ; minimum TTL IN NS ns.example.com. IN PTR 100.168.192.in-addr.arpa. ns.example.com. IN PTR 101.168.192.in-addr.arpa. webserver.example.com.
权限与SELinux管理
1 文件属主修正
chown root:named /var/named/.zone # 设置正确的所有者和用户组 chmod 640 /var/named/.zone # 限制访问权限
2 SELinux策略更新(重要!)
若遇到服务启动失败,执行:

setsebool -P named_write_master_zones on ausearch -m access -ts recent | grep named # 排查拒绝日志
提示:临时测试可执行setenforce 0禁用SELinux验证功能
服务启动与测试验证
1 启动守护进程
systemctl start named systemctl enable named # 设置为开机自启 systemctl status named # 查看运行状态
成功标志:绿色active状态且无报错信息
2 客户端测试方法对比表
| 测试工具 | 命令示例 | 预期结果 |
|---|---|---|
| dig | dig @localhost example.com | 返回A记录192.168.1.101 |
| nslookup | nslookup webserver | 解析出对应的IP地址 |
| host | host -t NS example.com | 显示权威DNS服务器为ns.example.com |
| systemctl journalctl | journalctl -u named | 查看详细的启动日志 |
3 常见错误排查指南
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| named无法启动 | 语法错误/权限不足 | named-checkconf校验配置 |
| 外部无法解析 | firewalld未放行UDP53 | firewall-cmd --add-port=53/udp |
| SELinux阻止写入 | boolean开关未开启 | setsebool -P named_write_master_zones on |
高级优化建议
- 缓存加速:在options段添加directory "/var/cache/named"并创建专用缓存目录
- 日志分割:配置logging { channel default_debug { file "/var/log/named/debug.log"; print-time yes; }; }实现分级存储
- 视图控制:使用view "internal" { match { subnet 192.168.1.0/24; } ... }实现内外网隔离解析
- 性能监控:定期检查rndc stats统计命令获取请求量、命中率等指标
相关问题与解答
Q1: 如果修改了区域文件后不需要重启服务吗?
A: 根据serial机制自动刷新,但实际部署中建议执行rndc reload命令重新加载配置,避免服务中断,命令格式为:rndc reload [视图名称](默认为主视图)
Q2: 如何防止恶意递归放大攻破?
A: 在options配置段添加以下参数限制递归行为:
recursion no; # 完全禁止递归查询 allow-recursion { none; };# 或仅允许特定IP段进行递归 query-source address port 53; # 强制使用固定源端口增强
