使用Bind9为大量虚拟主机设置DNS名称服务器

我试图在本地局域网中设置一个chroot的DNS名称服务器,就像这个连接在局域网中的每个人都可以访问为开发环境定义的大规模虚拟主机,而不必一个接一个地手动编辑它们的本地/ etc / hosts。 大容量虚拟主机名为example.user.dev(VirtualDocumentRoot / home / user / example)和example.test(DocumentRoot / var / www / example)。

我设置了一切,/ var / log / syslog不显示任何错误,但是在检查DNS时:

主机-v example.test

找不到主机。 同样使用dig命令我没有收到答案。

dig -x example.test

; << >> DiG 9.5.1-P3 << >> -x示例
;; 全局选项:printcmd
;; 有答案:
;; – >> HEADER << – 操作码:QUERY,状态:NXDOMAIN,ID:47844
;; 标志:qr rd ra; QUERY:1,答案:0,AUTHORITY:1,ADDITIONAL:0

;; 问题部分:
; example.in-addr.arpa。 在PTR

;; 授权部分:
in-addr.arpa。 600在SOA a.root-servers.net。 dns-ops.arin.net。 2010042604 1800 900 691200 10800

;; 查询时间:108毫秒
;; SERVER:80.58.0.33#53(80.58.0.33)
;; 时间:2010年4月26日星期一11:15:53
;; 味精大小rcvd:107

我的configuration如下:

/etc/bind/named.conf.local

区域“example.test”{

type master; allow-query { any; }; file "/etc/bind/zones/master_example.test"; notify yes; 

};

区域“1.168.192.in-addr.arpa”{

  type master; allow-query { any; }; file "/etc/bind/zones/master_1.168.192.in-addr.arpa"; notify yes; 

};

/etc/bind/named.conf.options

  • 注意:我们有一个静态的IP地址,所以我把查询转发到DNS服务器到所说的IP地址。

选项{

  directory "/var/cache/bind"; forwarders { 80.34.100.160; }; auth-nxdomain no; listen-on-v6 { any; }; 

};

/etc/bind/zones/master_example.test

$ ORIGIN example.test。
$ TTL 86400
@ IN SOA example.test。 root.example.test。 (

  201004227 ; serial 28800 ; refresh 14400 ; retry 3600000 ; expire 86400 ) ; min 

;

TXT“example.test,DNS服务”
@ IN NS example.test。
本地主机一个127.0.0.1
example.test。 一个192.168.1.52
例如A 192.168.1.52
www CNAME example.test。

/ etc / hosts文件

127.0.0.1 localhost的例子
192.168.1.52 localhost example example.test

在/etc/resolv.conf

  • 注意:对于绑定,我只是添加了最后3行。

域名服务器80.58.0.33
域名服务器80.58.61.250
域名服务器80.58.61.254

searchexample.test
search范例
域名服务器192.168.1.52


编辑

一些重大变化。 现在我有这样的configuration:

在/etc/resolv.conf

searchexample.test
search范例
域名服务器192.168.1.52

域名服务器80.58.0.33
域名服务器80.58.61.250
域名服务器80.58.61.254

/ etc / hosts文件

127.0.0.1 localhost示例example.test 192.168.1.52 dns1.example.test

/etc/bind/named.conf.local

我刚刚评论了反向地址区域。

/etc/bind/zones/master_example.test

$ ORIGIN example.test。
$ TTL 86400
@ IN SOA dns1.example.test。 hostmaster.example.test。 (

  2010042214 ; serial 21600 ; refresh 3600 ; retry 604800 ; expire 86400 ) ; min 

IN NS dns1.example.test。
IN NS dns2.example.test。
IN A 192.168.1.52

例如IN A 192.168.1.52
dns1 IN A 192.168.1.52
dns2 IN A 192.168.1.52
www CNAME示例

现在执行:

挖example.test @ 192.168.1.52

; << >> DiG 9.5.1-P3 << >> example.test @ 192.168.1.52
;; 全局选项:printcmd
;; 有答案:
;; – >> HEADER << – 操作码:QUERY,状态:NOERROR,ID:53489
;; 旗帜:qr aa rd ra; QUERY:1,答案:1,权限:2,附加:2

;; 问题部分:
; example.test。 在一个

;; 答案部分:
example.test。 86400 IN A 192.168.1.52

;; 授权部分:
example.test。 86400 IN NS dns1.example.test。
example.test。 86400在NS dns2.example.test。

;; 附加部分:
dns1.example.test。 86400 IN A 192.168.1.52
dns2.example.test。 86400 IN A 192.168.1.52

;; 查询时间:1毫秒
;; SERVER:192.168.1.52#53(192.168.1.52)
;; 时间:2010年4月26日星期一12:38:56
;; 味精大小rcvd:118

那么现在呢,应该是我下一步呢?


编辑2

我离开DNS服务器resolv.conf像这样:

域名服务器192.168.1.52
域名服务器80.58.0.33
域名服务器80.58.61.250
域名服务器80.58.61.254

并在其resolv.conf中将DNS服务器地址192.168.1.52添加到任何客户端计算机

像这样,我可以从每台计算机到http://example.test 。

为了能够到达开发环境的每个虚拟主机,我应该创build一个新的区域,还是在我创build的example.test区域中使用通配符?


编辑3

最后我离开了我的区域。 一个区域用于testing虚拟主机,另一个用于大量虚拟主机的开发问题。 一切都按照我想要的方式工作,并且牢固,性能良好。 不知道在我build立的系统中是否有比这更好的configuration。 任何build议将被照顾。

master_example.test

$ ORIGIN example.test。
$ TTL 86400
@ IN SOA dns1.example.test。 hostmaster.example.test。 (

  2010042215 ; serial 21600 ; refresh 3600 ; retry 604800 ; expire 86400 ) ; min 

@ IN NS dns1.example.test。
@ IN NS dns2.example.test。
@ IN A 192.168.1.52
www CNAME @

master_dev

$ ORIGIN dev。
$ TTL 86400
@在SOA开发。 hostmaster.dev。 (

  2010042215 ; serial 21600 ; refresh 3600 ; retry 604800 ; expire 86400 ) ; min 

@ IN NS dev。
@ IN A 192.168.1.52
* .dev。 IN A 192.168.1.52

/etc/bind/named.conf.local

区域“example.test”{

  type master; allow-query { any; }; file "/etc/bind/zones/master_example.test"; notify yes; 

};

区域“dev”{

  type master; allow-query { any; }; file "/etc/bind/zones/master_dev"; notify yes; 

};

区域“1.168.192.in-addr.arpa”{

  type master; allow-query { any; }; file "/etc/bind/zones/master_1.168.192.in-addr.arpa"; notify yes; 

};

/etc/bind/named.conf.options

  • 注意:我们有一个静态的IP地址,所以我把查询转发到DNS服务器到所说的IP地址。 最后,我在转发器中添加了ISP的DNS IP,以便在networkingstream量中不做瓶颈,因为在实验上,本地局域网内外的HTTP连接的速度有了很大提高。

选项{

  directory "/var/cache/bind"; allow-query { 192.168.1.0/24; localhost;}; allow-recursion { 192.168.1.0/24; localhost;}; forwarders { 80.58.0.33; 80.34.100.160; }; auth-nxdomain no; listen-on-v6 { any; }; 

};

看看你的resolv.conf中的IP地址,我感觉你的BIND服务器在192.168.1.52上。 据我所知,你不能在resolv.conf中指定类似“为这些域名使用这个名字服务器”。 基本上,你的BIND服务器将永远不会被查询。 正如你在挖掘查询(这是不正确的,它要求一个反向DNS条目)中看到的,它会尝试80.58.0.33,我认为这是您的提供商的DNS服务器。

您已经使用'forwarders'选项将BIND设置为caching域名服务器,因此您需要做的是在客户端PC中只有192.168.1.52作为域名服务器。

要看你的BINDconfiguration是否正确,试试这个:

 dig example.test @192.168.1.52 

你可以(也应该)做得更干净。

我的例子假设service-domain.net是一个你控制的域,然后在named.conf根据需要多次引用它(我使用一个脚本,只需要一个这样的域名列表,并创buildconfiguration)

尝试这样的事情:

 $TTL 86400 @ IN SOA ns.service-domain.net. hostmaster.service-domain.net. ( 201004227 ; serial 28800 ; refresh 14400 ; retry 3600000 ; expire 86400 ) ; min @ IN NS ns1.service-domain.net. @ IN NS ns2.service-domain.net. @ IN A 192.168.1.52 www IN CNAME @ @ IN MX 0 mail.service-domain.net. 

然后参考它:

 zone "example.test" { type master; allow-query { any; }; file "/etc/bind/zones/master_generic_zone"; notify yes; }; zone "sample.com" { type master; allow-query { any; }; file "/etc/bind/zones/master_generic_zone"; notify yes; };