报错axfr-get: fatal: unable to parse AXFR results: protocol error

时间:2019-11-20 08:53:55  来源:igfitidea点击:

问题

执行$ tcpclient -v ns1.example.com 53 axfr-get example.com fn fn.tmp时,报错

>axfr-get: fatal: unable to parse AXFR results: protocol error

axfr-get:致命:无法解析AXFR结果:协议错误

解决方法

确保axfrdns已配置并正在运行

axfrdns是djbdns提供的DNS区域传输服务器。
它从其标准输入读取DNS-over-TCP格式的区域传输请求,并以本地配置的信息作为响应。

使用netstat命令或sockstat命令查看当前端口状态:

# netstat -tulpn | grep :53

或者

# sockstat -4 -p 53

确认防火墙开放了TCP端口53

确保防火墙没有阻止tcp端口53。使用iptables命令列出当前的防火墙规则:

# iptables -L -n
# iptables -L -n | less
# iptables -L -n | grep 53

可以使用以下命令列出PF防火墙规则:

# pfctl -sr
# pfctl -sr | grep "port = domain"

如何在Linux Iptables防火墙下打开TCP端口53?

axfrdns服务器地址是10.3.72.22

$IPT -A INPUT -i eth0 -s 0/0 -d 10.3.72.22 -p udp --dport 53 -j ACCEPT
$IPT -A INPUT -i eth0 -s 0/0 -d 10.3.72.22 -p tcp --dport 53 -j ACCEPT

如何在BSD PF防火墙下打开TCP端口53?

pass in on $ext_if inet proto udp from any to 10.3.72.22 port domain
pass in on $ext_if inet proto tcp from any to 10.3.72.22  port domain flags S/SA synproxy state

确保为axfrdns正确设置了TCPRULES

tcp文件定义了AXFR的规则。(tcp文件位于/etc/axfardns或/var/axfardns目录中)

以下内容将仅允许AXFR进入ns2.example.com,但不允许进入其他地方:

ns2.example.com:allow,AXFR="example.com"
:allow,AXFR=""

保存并关闭文件。运行make更新更改:

# make

仅ns2.example.com允许传输区域,其他人只能连接到TCP端口53。

故障排除技巧使用Dig和tcpclient命令

尝试tcpclient命令,如下所示:

$ tcpclient -v ns1.example.com 53 axfr-get example.com fn fn.tmp

尝试将客户端IP传递到ns1.example.com:

$ tcpclient -i ns2.example.com -v ns1.example.com 53 axfr-get oxdba.net fn fn.tmp

尝试使用dig命令,如下所示:

$ dig @ns1.example.com example.com A +tcp
$ dig @ns1.example.com example.com AXFR +tcp