centos7 dns服务器搭建
- 数据库
- 2025-09-09
- 26
 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; }; // 同时允许多个子网段 
 
  
			 
			 
			