DNS辅助服务器(Slave Server)无法从主服务器(Master Server)复制区域数据(区域传输失败),这是一个常见的DNS运维问题,请按照以下步骤系统地排查和解决。
flowchart TD
A[辅助服务器复制失败] --> B{检查网络与基础服务}
B --> C[网络连通性<br>(ping, dig +tcp)]
B --> D[主服务器53端口可达性<br>(telnet/nc)]
B --> E[主辅服务状态<br>(systemctl status)]
C & D & E --> F{检查主服务器配置}
F --> G[允许传输的IP列表<br>(allow-transfer)]
F --> H[序列号是否已增加<br>(SOA Serial)]
F --> I[通知列表配置<br>(also-notify)]
F --> J{检查辅助服务器配置}
J --> K[masters指令或zone配置]
J --> L[密钥认证<br>(TSIG)]
G & H & I & K & L --> M{检查防火墙与安全组}
M --> N[防火墙规则<br>(TCP/UDP 53)]
M --> O[安全组/ACL规则<br>(云环境)]
N & O --> P{查看日志定位错误}
P --> Q[主辅服务器日志<br>(named.log)]
Q --> R[根据错误日志修正]
R --> S[问题解决]这是最容易忽略也最应首先检查的部分。
1、网络连通性:
* 确保辅助服务器能ping 通主服务器的IP地址。
* 使用dig @主服务器IP 域名 SOA +short 检查是否能从辅助服务器查询到主服务器的SOA记录,如果失败,说明基本查询都不通。
2、端口可达性:
* 区域传输使用TCP 53 端口(查询通常用UDP 53),确保防火墙没有阻止。
在辅助服务器上测试telnet 主服务器IP 53 或nc -zv 主服务器IP 53,如果连接失败,是防火墙/安全组问题。
3、服务状态:
* 确保主、辅服务器上的BIND服务都在运行。
systemctl status named (或named-chroot,bind9)
rndc status
第二步:检查主服务器(Master)配置
问题很可能出在主服务器的配置上。
1、检查allow-transfer 指令:
这是最关键的一项,主服务器必须允许辅助服务器的IP地址进行区域传输。
* 打开主服务器的区域配置文件(通常在/etc/named.conf 或/etc/named/ 下的某个文件)。
* 找到对应区域的zone 声明,检查内部的allow-transfer 指令。
正确配置示例
zone "example.com" {
type master;
file "example.com.zone";
allow-transfer { 192.168.1.20; }; // 辅助服务器的IP
// 也可以使用ACL名称
// allow-transfer { slaves; };
};注意allow-transfer 也可以放在options 全局块中,但区域块内的设置优先级更高,确保你的辅助服务器IP在允许列表中。
2、检查区域序列号(SOA Serial):
* 每次修改主区域文件后,必须增加SOA记录中的序列号,格式通常为YYYYMMDDNN(如2023101501),如果序列号没有增加,辅助服务器会认为数据未更新,不会触发传输。
* 在主服务器使用dig @localhost 域名 SOA +short 查看当前序列号。
对比辅助服务器上缓存的序列号dig @localhost 域名 SOA +short。
* 如果主服务器的序列号不大于 辅助服务器的,辅助服务器不会复制。
3、检查also-notify 指令(可选但推荐):
配置了此选项,主服务器会在区域更新时主动通知辅助服务器,加快同步速度。
在主服务器的区域配置中,添加
also-notify { 192.168.1.20; }; // 辅助服务器的IP第三步:检查辅助服务器(Slave)配置
1、检查masters 指令或zone 配置:
* 在辅助服务器的配置中,必须正确定义主服务器。
传统写法(BIND 9)
zone "example.com" {
type slave;
file "slaves/example.com.zone"; // 通常放在slaves目录下,named用户有写权限
masters { 192.168.1.10; }; // 主服务器的IP
};注意masters 后面的{ } 和; 缺一不可,IP地址必须正确。
2、检查文件权限:
* 辅助服务器上,BIND进程(通常是named 用户)必须能写入file 指令指定的目录(如/var/named/slaves/)。
ls -ld /var/named/slaves/
chown named:named /var/named/slaves/ -R
chmod 770 /var/named/slaves/这是导致TCP 53连接失败的常见原因。
1、服务器本地防火墙:
主服务器 必须放行来自辅助服务器IP的TCP 53 端口。
以firewalld 为例
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="辅助服务器IP" port protocol="tcp" port="53" accept'
firewall-cmd --reload 以iptables 为例
iptables -A INPUT -s 辅助服务器IP -p tcp --dport 53 -j ACCEPT * 重启防火墙后,再次测试telnet 主服务器IP 53。
2、云服务商安全组/网络ACL:
* 如果你使用的是阿里云、腾讯云、AWS等,务必在云控制台检查安全组 和网络ACL 规则,确保双向的TCP 53端口对辅助服务器IP开放。
第五步:查看日志,获取关键错误信息
日志是最终的问题定位器,请同时查看主服务器和辅助服务器的日志。
1、日志位置:
RHEL/CentOS/Fedora:/var/named/data/named.run 或/var/log/messages
Debian/Ubuntu:/var/log/syslog 或/var/log/daemon.log
也可以在named.conf 的options 中自定义logging { channel default_debug { file "data/named.run"; severity dynamic; }; };
2、查看实时日志:
tail -f /var/named/data/named.run
# 或
journalctl -u named -f3、常见错误日志及含义:
denied due to allow-query辅助服务器IP不在主服务器的允许查询或传输列表中。
transfer of ‘example.com/IN’ from x.x.x.x#53: failed while receiving responses: REFUSED主服务器明确拒绝,肯定是allow-transfer 或防火墙问题。
end of transfer传输成功结束,但可能是空数据或序列号问题。
FORMERR区域文件格式错误,主服务器无法加载,检查主服务器的区域文件语法:named-checkzone example.com /path/to/zone.file
connection refused根本连不上TCP 53端口,防火墙问题。
1、TSIG密钥认证:
如果主辅服务器配置了TSIG密钥进行安全传输,请确保
* 双方的密钥名称和密钥内容完全一致。
* 主服务器的allow-transfer 和also-notify 中指定了key slave-key;。
* 辅助服务器的masters 中指定了key slave-key;。
2、视图(View)配置:
* 如果使用了BIND的视图功能,请确保辅助服务器的IP地址匹配了正确的视图,并且该视图内包含了目标区域且允许传输。
3、手动触发传输与重试:
在辅助服务器上,可以尝试手动触发区域传输
# 方法1:使用 rndc
rndc retransfer example.com
# 方法2:重启 named 服务(谨慎)
systemctl restart named* 传输后,检查辅助服务器上的区域文件时间戳和内容是否更新。
1、 ✅网络通吗? (ping,dig 基础查询)
2、 ✅TCP 53端口能连吗? (telnet/nc)
3、 ✅主服务器allow-transfer 列表有辅助服务器IP吗?
4、 ✅主服务器SOA序列号增加了吗?
5、 ✅辅助服务器masters 的IP写对了吗?
6、 ✅防火墙/安全组放行TCP 53了吗?
7、 ✅BIND日志说什么? (最关键的错误信息源)
按照以上步骤,99%的DNS辅助服务器复制问题都能被定位和解决,先从最简单的网络和权限开始,再深入到配置和日志。
文章摘自:https://idc.huochengrm.cn/dns/23212.html
评论
蔚静槐
回复《DNS辅助服务器复制不了?检查网络连接、权限配置和DNS区域设置,确保主从服务器信息一致,问题通常能解决。
繁清昶
回复DNS辅助服务器复制失败可能是配置错误或网络问题,检查配置和网络连接后重试。
祭如南
回复DNS辅助服务器复制不了怎么办?解决方法:检查网络连接、DNS配置、权限设置,确保主从服务器同步。