我正在实现一个dns客户端,我尝试连接到本地dns服务器,但是dns服务器返回错误代码为5的消息,这意味着它拒绝连接。
有关为何会发生这种情况的任何想法?感谢
答案 0 :(得分:9)
DNS响应错误代码5(“拒绝”)并不意味着拒绝与DNS服务器的连接。 这意味着DNS服务器拒绝提供您要求的任何数据,或者执行您要求它执行的任何操作(例如动态更新)。
既然你提到了“连接”,我假设你正在使用TCP? DNS primarilly使用UDP,一些DNS服务器将拒绝所有通过TCP的请求。 所以解决方案可能就像切换到UDP一样简单。
否则,假设您从头开始构建自己的DNS客户端,我的第一个猜测是您正在格式化请求。尽管DNS协议看起来相当简单,但很容易出错。
最后,DNS服务器当然可以简单地配置为拒绝您要求的任何请求。
答案 1 :(得分:1)
政策执行?
DNS服务器可以配置为仅接受来自某些主机的连接。
答案 2 :(得分:1)
您可以尝试使用WireShark监控对话。它还可以为您解码数据包,这可能有助于您确定客户端的数据包是否正确编码。只需过滤端口53(DNS)即可限制跟踪捕获的数据包。
此外,请确保您使用UDP而不是TCP进行查询; TCP应主要用于区域传输,而不是查询。
答案 3 :(得分:0)
嗯,如果您能够访问StackOverflow,那么您将拥有一个有效的DNS服务器。尝试做
host -v stackoverflow.com
并查找
等消息 Received 50 bytes from 192.168.1.1#53 in 75 ms
然后从该行中选择地址并使用THAT作为您的DNS - 它显然愿意与您交谈。
如果您使用的是Windows,请将NSLOOKUP用于相同目的。您的名称服务器地址将在输出中的某处。
修改强>
当我遇到DNS服务器时,我会使用我最容易记住的地址:4.2.2.2
。看看它是如何运作的。
答案 4 :(得分:0)
显式添加我想要允许的网络 - 递归为我解决了这个问题:
这两行添加到/etc/bind/named.conf.options
递归是的; allow-recursion {10.2.0.0/16; };