centos7 dns服务器搭建
- 数据库
- 2025-09-09
- 3
entOS7搭建DNS服务器可安装BIND软件包(含bind、bind-utils及bind-chroot),配置正向/反向解析区域文件,实现域名与IP双向映射
环境准备
1 系统要求
- 适用版本:CentOS 7.x系列(本文以Minimal Install模式为例)
- 硬件配置:建议至少双核CPU/2GB内存/50GB磁盘空间
- 网络连通性:确保服务器具有静态IP地址且能正常访问外网(用于后续测试验证)
2 关闭防火墙与SELinux(可选但推荐)
systemctl stop firewalld # 临时关闭防火墙 systemctl disable firewalld # 禁止开机启动 setenforce 0 # 将SELinux设为宽松模式
️ 生产环境建议通过端口白名单精细控制,而非完全禁用安全防护机制
安装BIND软件包
1 使用YUM仓库安装
执行以下命令完成核心组件部署:
yum install bind bind-utils -y
软件包名称 | 功能说明 |
---|---|
bind |
主DNS服务程序 |
bind-utils |
包含dig/nslookup等诊断工具 |
2 验证安装结果
通过命令行查看版本信息确认是否成功:
named -v # 显示BIND版本号(如9.11.36)
若输出类似BIND 9.11.36
则表示安装正常。
配置文件修改
1 主配置文件路径
主要编辑对象为 /etc/named.conf
如下:
options { listen-on port 53 { any; }; // 监听所有接口的53端口 directory "/var/named"; // 工作目录 allow-query { any; }; // 允许任意主机查询 };
关键参数解析:
| 指令 | 作用 | 推荐值 |
|—————|——————————-|———————–|
| listen-on
| 指定绑定的网络接口 | 根据实际需求调整 |
| allow-query
| 控制哪些IP可以发起请求 | 生产环境应限制范围 |
2 区域文件配置示例(正向解析)
新建正向解析区域文件 /etc/named.rfc1912.zones
:
zone "example.com" IN { type master; file "example.com.zone"; allow-update { none; }; // 禁止动态更新 };
对应数据文件 /var/named/example.com.zone
内容模板:
$TTL 86400 ; 默认缓存时间 @ IN SOA ns1.example.com admin.example.com ( 2023101001 ; 序列号(每次修改需递增) 3600 ; 刷新间隔(秒) 1800 ; 重试间隔 1209600 ; 过期时间 86400 ) ; 最小TTL IN NS ns1.example.com. ns1 IN A 192.168.1.100 www IN A 192.168.1.100 mail IN A 192.168.1.100
注意:所有记录最后的点号()不可省略,表示绝对域名格式
3 反向解析配置(可选)
若需支持PTR反查,添加如下配置:
zone "1.168.192.in-addr.arpa" IN { type master; file "1.168.192.in-addr.arpa.zone"; };
对应的反向区域文件示例:
$ORIGIN . $TTL 86400 @ IN SOA ns1.example.com admin.example.com ( 2023101001 ; Serial 3600 ; Refresh 1800 ; Retry 1209600 ; Expire 86400 ) ; Negative Cache TTL IN NS ns1.example.com. 100 IN PTR ns1.example.com.
权限与目录初始化
1 创建必要目录结构
mkdir -p /var/named/chroot/{dev,etc,usr} && chown named:named /var/named/
此步骤用于沙箱化运行环境,增强安全性
2 SELinux上下文修复(重要!)
如果遇到权限错误,执行恢复命令:
restorecon -Rv /var/named/
服务启动与校验
1 语法检查(关键步骤!)
先进行配置验证再启动服务:
named-checkconf # 检查主配置文件语法正确性 named-checkzone example.com # 验证特定区域的合法性
无报错方可继续下一步。
2 启动守护进程
systemctl start named # 立即生效 systemctl enable named # 加入开机自启列表
查看运行状态:
systemctl status named # 应显示active(running)状态 ss -tulnp | grep :53 # 确认UDP/TCP端口监听情况
3 功能测试方法
测试工具 | 命令示例 | 预期结果 |
---|---|---|
dig |
dig @localhost example.com |
返回正确的A记录 |
nslookup |
nslookup www.example.com |
解析出对应的IP地址 |
host |
host -t NS example.com |
显示权威DNS服务器信息 |
高级优化建议
1 日志监控配置
修改 /etc/named.conf
添加日志条目:
logging { channel default_log { file "/var/log/named/named.log"; severity info; print-time yes; }; };
同时创建日志轮转策略(通过cron实现):
echo '每周切割日志并压缩归档' > /etc/cron.daily/named-logrotate chmod +x /etc/cron.daily/named-logrotate
2 性能调优参数参考表
参数名 | 默认值 | 优化方向 | 说明 |
---|---|---|---|
max-cache-size |
未设置 | 根据内存大小合理分配 | 增大缓存减少重复查询开销 |
max-negative-ttl |
60 | 适当延长失败记录缓存时间 | 平衡实时性和负载压力 |
recursion yes/no |
yes | 对外网请求设为no | 防止被利用做放大攻击 |
相关问题与解答栏目
Q1: 如果客户端报告“SERVFAIL”,该如何排查?
A: 这是典型的配置错误信号,按以下顺序排查:
1️⃣ 检查区域文件中是否存在语法错误(特别注意末尾缺失的点号)
2️⃣ 确认named-checkzone
命令能否通过验证
3️⃣ 确保SOA记录中的序列号是唯一递增的数字串
4️⃣ 核对NS记录是否指向有效的DNS服务器IP地址
5️⃣ 查看/var/log/messages
中named服务的详细报错信息
Q2: 如何限制特定网段才能进行DNS查询?
A: 修改/etc/named.conf
中的allow-query
指令:
options { allow-query { 192.168.1.0/24; }; // 仅允许内网网段访问 };
或者采用更复杂的CIDR表示法:
allow-query { 10.0.0.0/8; 172.16.0.0/12; }; // 同时允许多个子网段