axfr-get:致命的:无法解析AXFR结果:协议错误和解决方案
时间:2020-01-09 10:37:17 来源:igfitidea点击:
我试图使用tcpclient从主tinydns服务器到辅助DNS服务器获取数据(AXFR查询),如下所示:tcpclient -v a.ns.example.com 53 axfr-get example.com example.com example.com.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?
如下更新脚本(假设202.54.1.1是tinydns/axfrdns服务器地址):
$IPT -A INPUT -i eth0 -s 0/0 -d 202.54.1.1 -p udp --dport 53 -j ACCEPT $IPT -A INPUT -i eth0 -s 0/0 -d 202.54.1.1 -p tcp --dport 53 -j ACCEPT
如何在* BSD PF防火墙下打开TCP端口53?
如下更新您的/etc/pf.conf(假定202.54.1.1是tinydns/axfrdns服务器地址):
pass in on $ext_if inet proto udp from any to 202.54.1.1 port domain pass in on $ext_if inet proto tcp from any to 202.54.1.1 port domain flags S/SA synproxy state
确保为axfrdns正确设置了TCP规则
tcp文件定义AXFR的规则。
以下内容将仅允许AXFR进入ns2.example.com,但不允许进入其他地方(tcp文件位于/etc/axfardns或/var/axfardns目录中):
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(如果您有多个IP地址,则需要这样做):
$ 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