当前位置:首页 > 云服务器 > 正文

centos7 dns服务器搭建

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反查,添加如下配置:

centos7 dns服务器搭建 第1张

centos7 dns服务器搭建 第2张

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 # 验证特定区域的合法性

无报错方可继续下一步。

centos7 dns服务器搭建 第3张

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; }; // 同时允许多个子网段

DNS
0