我正在尝试build立我自己的DNS服务器,既用于学习,也用于隐私。 我安装了Bind9,并试图遵循一些在线教程,以及Linuxpipe理手册,但它似乎仍然没有工作。 我将named.conf设置为在本地主机上侦听,并将其设置为recursion。 然后我设置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
它似乎需要recursion,但我设置绑定,是的,我没有重新启动守护进程。
任何提示将不胜感激,或在这个问题上的任何进一步的教程。 我主要想为我的同事和我一个替代的DNS服务器。谢谢。
如果你的绑定localhost你将无法使用它从另一台机器。 这里是学习DNS / BIND的一个很好的写法:快速HOWTO:Ch18:configurationDNS
你有服务器转发请求?
在你的configuration中的某个地方,你应该有这样的行,它允许你的服务器把不知道的请求传给那些可能知道答案的服务器:
options { // ... various config options ... forwarders { 8.8.8.8; 8.8.4.4; }; recursion yes; // ... various config options ... }
用你的ISP的本地DNS服务器replace8.8.8.8和8.8.4.4(我用谷歌的例子)。
我通常也限制哪些主机可以使用recursion,这可以通过allow-recursion来完成。 如果你只是想允许所有的主机,你可以使用allow-recursion { "any"; }; allow-recursion { "any"; };
您需要为客户端启用recursion:
allow-recursion { address_match_list };
allow-recursion定义了一个匹配列表来定义允许向服务器发送recursion查询的IP地址。 如果查询的答案已经存在于caching中,则不pipe这个语句如何,都将被返回。 如果未指定,则允许所有主机进行recursion查询。 这个语句可以用在视图或全局选项子句中。
如果你想检查一个查询是怎么回事,最好的办法是:
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
希望有所帮助。