BIND通配符子域上的DNS查找问题

时间:2013-12-04 08:48:15

标签: dns bind

那里有很多教程,但是我很难让BIND提供本地网络DNS查找。

目的:

  • 可以从本地网络上的任何位置进行请求。 (我没有包含任何listen on语句,因此应该涵盖 - 我认为!)
  • *.demo请求应转至192.168.0.64
  • 其他任何内容都应转发给Google的8.8.8.88.8.4.4

这是我的配置:

# /etc/named.conf
options {
  directory "/var/named";
  # Hide version string for security
  version "not currently available";

  # Forward all unknown DNS queries to the Google Public DNS. (Does it?)
  forwarders { 8.8.8.8; 8.8.4.4; };

  dnssec-validation auto;

  auth-nxdomain no;    # conform to RFC1035
  listen-on-v6 { any; };
};

zone "demo." IN {
  type master;
  file "zone.demo";
};

区域文件:

; /var/named/zone.demo
$ORIGIN demo.
$TTL 1D
@ IN SOA demo. hostmaster (
                          201312041 ; serial
                          8H        ; refresh
                          4H        ; retry
                          4W        ; expire
                          1D )      ; minimum

*. IN  A  192.168.0.64

然后我运行named-checkconf(无输出)和named -f(阻止 - 一切看起来都很好!)

要检查服务器是否正在按照我的预期运行,我运行dig:

$ dig @127.0.0.1 A test.demo

; <<>> DiG 9.8.3-P1 <<>> @127.0.0.1 test.demo
; (1 server found)
;; global options: +cmd
;; connection timed out; no servers could be reached

关于我在这里做错了什么想法?

1 个答案:

答案 0 :(得分:7)

您需要的第一件事是NS记录:

@ IN NS ns.demo.

这需要一个关联的A记录,因为它本质上是一个CNAME,在这种情况下,它将在您的区域中。所以你需要:

ns.demo. IN A <Your DNS server IP here>

然后,因为你的通配符最后有一个点,你指定一个'级别'的DNS记录(例如com,net或demo),不包括你的区域的来源。你需要抛弃点:

* IN A 192.168.0.64

或做:

*.demo. IN A 192.168.0.64

这是因为绑定区域文件中的最后一个点表示字段的结尾。如果你没有将点放在字段的末尾,那么bind将添加原点。这不适用于IP地址。

至于转发,这应该有效,但你可能希望在你的客户端上设置多个域名服务器,以防这个因任何原因而关闭等等。在这种情况下你不需要转发

如果要保护服务器仅响应本地网络上的客户端,可以使用allow-query语句将其限制为某些IP范围。但如果你的服务器无法在互联网上访问,你应该没事。需要检查的一件事是服务器没有监听环回接口,这意味着您只能从名称正在运行的计算机而不是网络上的其他计算机上访问它。

希望这会有所帮助。如果有什么不清楚,请告诉我。