Rocky Linux 9.5 BIND 9.16 部署:3步配置主从DNS与防火墙放行53端口 📅 2026/7/7 21:08:31 Rocky Linux 9.5 企业级BIND 9.16主从DNS架构部署指南1. 企业级DNS架构设计考量在现代化IT基础设施中DNS服务作为网络基础架构的核心组件其高可用性和安全性直接影响整个业务的连续性。Rocky Linux 9.5作为RHEL兼容的企业级操作系统配合BIND 9.16这一久经考验的DNS服务软件能够构建出满足企业严苛要求的域名解析系统。典型企业DNS架构应具备以下特征主从同步机制确保数据冗余完善的防火墙策略控制访问详细的日志记录和监控规范的域名管理流程定期备份和灾难恢复方案主从架构相比单节点部署具有明显优势故障自动转移当主节点不可用时从节点可继续提供服务负载分担查询请求可在主从服务器间分配数据安全多副本存储防止单点数据丢失2. 基础环境准备2.1 系统要求部署前需确保两台Rocky Linux 9.5服务器满足以下条件项目主DNS服务器从DNS服务器主机名ns1.example.comns2.example.comIP地址192.168.100.10192.168.100.20最小内存2GB2GB存储空间10GB10GB网络连接稳定局域网稳定局域网2.2 软件包安装在两台服务器上执行以下命令安装BIND及相关工具# 更新系统并安装必要软件 sudo dnf update -y sudo dnf install bind bind-utils -y验证安装版本named -v # 应显示类似BIND 9.16.23-RedHat-9.16.23-11.el93. 主DNS服务器配置3.1 基础配置文件调整编辑主配置文件/etc/named.confsudo vim /etc/named.conf关键配置修改点options { listen-on port 53 { any; }; // 监听所有接口 listen-on-v6 port 53 { ::1; }; // IPv6本地环回 directory /var/named; // 区域文件目录 dump-file /var/named/data/cache_dump.db; statistics-file /var/named/data/named_stats.txt; memstatistics-file /var/named/data/named_mem_stats.txt; recursing-file /var/named/data/named.recursing; allow-query { any; }; // 允许所有查询 allow-transfer { 192.168.100.20; }; // 仅允许从服务器传输 recursion no; // 禁用递归查询(公共DNS应开启) // DNSSEC配置 dnssec-enable yes; dnssec-validation yes; dnssec-lookaside auto; // 日志配置 logging { channel default_debug { file data/named.run; severity dynamic; }; }; };3.2 区域文件定义在/etc/named.rfc1912.zones末尾添加正向和反向解析区域sudo vim /etc/named.rfc1912.zones添加内容示例// 正向解析区域 zone example.com IN { type master; file example.com.zone; allow-update { none; }; allow-transfer { 192.168.100.20; }; notify yes; // 启用区域变更通知 }; // 反向解析区域 zone 100.168.192.in-addr.arpa IN { type master; file 192.168.100.zone; allow-update { none; }; allow-transfer { 192.168.100.20; }; };3.3 创建区域数据文件正向解析文件sudo cp -p /var/named/named.localhost /var/named/example.com.zone sudo vim /var/named/example.com.zone示例内容$TTL 1D IN SOA ns1.example.com. admin.example.com. ( 2024060101 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum IN NS ns1.example.com. IN NS ns2.example.com. IN MX 10 mail.example.com. ns1 IN A 192.168.100.10 ns2 IN A 192.168.100.20 www IN A 192.168.100.100 mail IN A 192.168.100.101反向解析文件sudo cp -p /var/named/named.loopback /var/named/192.168.100.zone sudo vim /var/named/192.168.100.zone示例内容$TTL 1D IN SOA ns1.example.com. admin.example.com. ( 2024060101 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum IN NS ns1.example.com. IN NS ns2.example.com. 10 IN PTR ns1.example.com. 20 IN PTR ns2.example.com. 100 IN PTR www.example.com. 101 IN PTR mail.example.com.3.4 权限与SELinux配置# 修改文件属组 sudo chgrp named /var/named/example.com.zone sudo chgrp named /var/named/192.168.100.zone # 设置SELinux上下文 sudo restorecon -Rv /var/named4. 从DNS服务器配置4.1 基础配置文件调整编辑/etc/named.conf内容与主服务器类似但需修改以下参数options { allow-transfer { none; }; // 从服务器不允许区域传输 }; // 区域定义改为slave类型 zone example.com IN { type slave; file slaves/example.com.zone; masters { 192.168.100.10; }; }; zone 100.168.192.in-addr.arpa IN { type slave; file slaves/192.168.100.zone; masters { 192.168.100.10; }; };4.2 创建slaves目录sudo mkdir /var/named/slaves sudo chown named:named /var/named/slaves sudo restorecon -Rv /var/named/slaves5. 防火墙与SELinux配置5.1 firewalld规则配置在两台服务器上执行# 放行DNS服务 sudo firewall-cmd --permanent --add-servicedns sudo firewall-cmd --reload # 验证规则 sudo firewall-cmd --list-services | grep dns5.2 SELinux策略调整# 允许named写入slaves目录 sudo setsebool -P named_write_master_zones 16. 服务启动与验证6.1 启动BIND服务在主从服务器上分别执行sudo systemctl enable --now named sudo systemctl status named6.2 主从同步验证在主服务器上修改serial号后观察从服务器日志# 主服务器上修改serial后重启服务 sudo systemctl restart named # 从服务器上查看日志 sudo journalctl -u named -f # 应看到类似transfer of example.com/IN from 192.168.100.10#53: Transfer completed6.3 解析测试使用dig和nslookup工具测试# 正向解析测试 dig 192.168.100.10 www.example.com dig 192.168.100.20 www.example.com # 反向解析测试 dig 192.168.100.10 -x 192.168.100.100 dig 192.168.100.20 -x 192.168.100.100 # 主从切换测试(模拟主节点故障) sudo systemctl stop named # 在主服务器上执行 dig 192.168.100.20 www.example.com # 应仍能解析7. 高级配置与优化7.1 日志增强配置在/etc/named.conf中添加详细日志logging { channel query_log { file /var/named/log/query.log versions 5 size 10m; severity info; print-time yes; }; category queries { query_log; }; };创建日志目录并设置权限sudo mkdir /var/named/log sudo chown named:named /var/named/log sudo restorecon -Rv /var/named/log7.2 性能调优参数在options部分添加options { // ...其他配置... max-cache-size 256M; // 缓存大小 max-cache-ttl 3600; // 最大缓存时间 min-cache-ttl 300; // 最小缓存时间 max-ncache-ttl 3600; // 否定缓存TTL cleaning-interval 60; // 缓存清理间隔(分钟) lame-ttl 600; // 无效服务器缓存时间 max-clients-per-query 10; // 每查询最大客户端数 recursive-clients 1000; // 递归客户端数限制 };7.3 自动化监控方案配置systemd服务监控sudo vim /etc/systemd/system/named-monitor.service添加内容[Unit] DescriptionBIND DNS Server Monitor Afternamed.service [Service] Typesimple ExecStart/usr/bin/bash -c while true; do if ! systemctl is-active --quiet named; then systemctl restart named; logger -t named-monitor Restarted BIND service; fi; sleep 60; done Restartalways [Install] WantedBymulti-user.target启用监控服务sudo systemctl enable --now named-monitor8. 日常维护与故障排查8.1 关键维护命令命令用途rndc status查看服务状态rndc reload重载配置不重启rndc flush清空缓存named-checkconf检查主配置named-checkzone检查区域文件8.2 常见问题解决问题1主从同步失败检查主服务器allow-transfer设置验证防火墙是否放行TCP 53端口查看/var/log/messages中的错误信息问题2解析超时# 检查网络连通性 ping 192.168.100.10 telnet 192.168.100.10 53 # 验证服务监听状态 sudo ss -tulnp | grep named问题3SELinux阻止操作# 查看SELinux日志 sudo ausearch -m avc -c named # 临时设置为permissive模式 sudo setenforce 08.3 备份策略示例创建每日自动备份脚本sudo vim /usr/local/bin/named-backup.sh脚本内容#!/bin/bash BACKUP_DIR/backup/dns/$(date %Y%m%d) mkdir -p $BACKUP_DIR # 备份配置文件 cp -a /etc/named.* $BACKUP_DIR/ # 备份区域文件 cp -a /var/named/* $BACKUP_DIR/ # 打包并删除7天前备份 tar czf /backup/dns-$(date %Y%m%d).tar.gz $BACKUP_DIR find /backup -name dns-*.tar.gz -mtime 7 -delete设置定时任务sudo crontab -e # 添加以下内容 0 2 * * * /usr/local/bin/named-backup.sh