我正在尝试设置自己的 DNS 服务器,既是为了学习,也是为了隐私。我安装了 Bind9,并尝试遵循一些在线教程以及 Linux 管理手册,但似乎仍然不起作用。我将 named.conf 设置为在本地主机上监听,并将其设置为递归。然后,我将 resolv.conf 设置为只有一个名称服务器,即 127.0.0.1。
然后我尝试从我的桌面使用它,并尝试挖掘 nyc.gov,作为一个我从未去过的网站,我得到了以下回应
> dig nyc.gov
; <<>> DiG 9.7.0-P1 <<>> nyc.gov
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: REFUSED, id: 54429
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0
;; WARNING: recursion requested but not available
;; QUESTION SECTION:
;nyc.gov. IN A
;; Query time: 14 msec
;; SERVER: 97.107.138.191#53(97.107.138.191)
;; WHEN: Sun Aug 1 02:07:09 2010
;; MSG SIZE rcvd: 25
尽管我将 Bind 设置为递归,但它似乎需要递归,并且我确实重新启动了守护进程。
任何提示或有关此事的进一步教程都将不胜感激。我主要想为我的同事和我自己提供一个备用 DNS 服务器。谢谢。
答案1
如果您的 bind 只监听,localhost
您将无法从另一台机器使用它。以下是一篇关于学习 DNS/BIND 的优秀文章:快速操作指南:第 18 章:配置 DNS
答案2
您有可以转发请求的服务器吗?
在您的配置中的某个地方,您应该有类似这样的几行,它们允许您的服务器将它不知道的请求传递给可能知道答案的服务器:
options {
// ... various config options ...
forwarders {
8.8.8.8;
8.8.4.4;
};
recursion yes;
// ... various config options ...
}
将 8.8.8.8 和 8.8.4.4 替换为您的 ISP 的本地 DNS 服务器(我以 Google 的服务器为例)。
我通常还会限制哪些主机可以使用递归,您可以使用 来实现allow-recursion
。如果您只想允许所有主机,您可以使用allow-recursion { "any"; };
答案3
您需要为客户端启用递归:
allow-recursion { address_match_list };
allow-recursion 定义一个匹配列表,定义允许向服务器发出递归查询的 IP 地址。如果查询的答案已存在于缓存中,则无论此语句如何,都会返回该答案。如果未指定,则允许所有主机进行递归查询。此语句可用于视图或全局选项子句中。
如果您想检查一个查询发生的情况,最好的方法是:
dig +trace google.com
...
google.com. 172800 IN NS ns1.google.com.
google.com. 172800 IN NS ns2.google.com.
google.com. 172800 IN NS ns3.google.com.
google.com. 172800 IN NS ns4.google.com.
;; Received 164 bytes from 192.42.93.30#53(g.gtld-servers.net) in 181 ms
google.com. 300 IN A 74.125.87.147
google.com. 300 IN A 74.125.87.105
google.com. 300 IN A 74.125.87.106
google.com. 300 IN A 74.125.87.103
google.com. 300 IN A 74.125.87.104
google.com. 300 IN A 74.125.87.99
;; Received 124 bytes from 216.239.38.10#53(ns4.google.com) in 106 ms
希望有所帮助。