当前位置:首页 > 数据库 > 正文

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如下:

centos7 dns服务器搭建  第1张

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

DNS
0