CentOS 域名解析备份与恢复指南
一、先明确备份对象与总体策略
- 备份对象通常包括:
- BIND 配置(如:/etc/named.conf、包含的 zone 定义文件);
- 区域文件(如:/var/named/*.db 或 /var/named/slaves/ 下的从区文件);
- 日志目录(如:/var/log/named/);
- 如使用 chroot,则相应目录为 /var/named/chroot/ 下的对应子目录。
- 总体策略建议:
- 日常用脚本对配置与区域文件做定时离线备份并异地/离线留存;
- 架构层面配置主从(Master/Slave)区域复制,从服务器自动持有最新区域副本,作为热备与快速恢复手段。
二、手动备份步骤(适用于 BIND 权威或缓存 DNS)
- 步骤1 备份配置与区域文件
- 建议先停止 named 以避免正在写入的区域文件处于不一致状态:
sudo systemctl stop named
- 打包配置与区域(示例路径,按实际环境调整):
sudo tar czvf dns_backup_$(date +%F).tar.gz /etc/named /var/named
- 如需单独备份关键文件:
sudo cp -p /etc/named.conf /path/to/backup/named.conf.bak
sudo cp -p /var/named/example.com.db /path/to/backup/example.com.db.bak
- 步骤2 备份日志(可选)
sudo tar czvf dns_logs_$(date +%F).tar.gz /var/log/named
- 步骤3 传输与校验
- 将备份拷贝到安全位置(如备份服务器/对象存储):
rsync -avz dns_backup_*.tar.gz user@backup:/backup/dns/
- 校验归档完整性(示例):
tar tvf dns_backup_*.tar.gz | head
- 步骤4 重启服务
sudo systemctl start named
- 说明:若使用 PowerDNS 或其他 DNS 服务,备份路径会不同(如 /etc/powerdns、/var/lib/powerdns),思路一致:停服务→打包配置与数据→传输→校验→启动。
三、主从复制实现热备(强烈推荐)
- 主服务器配置要点(/etc/named.conf 片段):
zone “example.com” IN {
type master;
file “/var/named/example.com.db”;
allow-transfer { 192.168.1.11; };
also-notify { 192.168.1.11; };
};
- 修改区域后务必递增 SOA 的 Serial,以便从服务器拉取更新。
- 从服务器配置要点:
zone “example.com” IN {
type slave;
file “slaves/example.com.db”;
masters { 192.168.1.10; };
};
- 防火墙放行 TCP/UDP 53:
sudo firewall-cmd --zone=public --add-port=53/tcp --permanent
sudo firewall-cmd --zone=public --add-port=53/udp --permanent
sudo firewall-cmd --reload
- 验证:
dig @192.168.1.10 www.example.com
dig @192.168.1.11 www.example.com
- 故障演练:临时停用主服务器网络或停止 named,确认从服务器仍能解析,即具备热备能力。
四、快速恢复与验证
- 场景A 从备份恢复单机
- 停止服务:sudo systemctl stop named
- 恢复归档:sudo tar xzvf dns_backup_YYYY-MM-DD.tar.gz -C /
- 权限修正(示例):
sudo chown root:named /var/named/example.com.db
sudo chmod 640 /var/named/example.com.db
- 语法检查:
sudo named-checkconf
sudo named-checkzone example.com /var/named/example.com.db
- 启动服务:sudo systemctl start named
- 场景B 主故障用从服务器顶上
- 临时将对外 DNS 指向从服务器 IP,或在从服务器上临时将 zone 类型改为 master 并接管写入(变更前先备份现有从区文件)。
- 验证:
dig @<服务器IP> www.example.com
tail -f /var/log/messages | grep named
确认解析结果与日志无报错。
五、自动化与注意事项
- 自动化备份脚本示例(保留最近 7 天):
#!/bin/bash
BACKUP_DIR=“/backup/dns”
DATE=$(date +%F)
mkdir -p “$BACKUP_DIR”
systemctl stop named
tar czvf “$BACKUP_DIR/dns_${DATE}.tar.gz” /etc/named /var/named
systemctl start named
find “$BACKUP_DIR” -name “dns_*.tar.gz” -mtime +7 -delete
- 注意事项
- 区域变更务必递增 SOA Serial,否则从服务器不会拉取更新;
- 主从之间放通 TCP/UDP 53,并限制 allow-transfer 仅对从服务器开放;
- 使用 chroot 时,备份与恢复需对应 /var/named/chroot 路径;
- 定期做恢复演练与异地/离线留存,避免单点风险。