/etc/bind/named.conf.local

/etc/bind/named.conf.local

我正在尝试在本地 LAN 中设置 chrooted DNS 名称服务器,这样 LAN 中连接的每个人都可以访问为开发环境定义的大量虚拟主机,而无需逐个手动编辑其本地 /etc/hosts。大量虚拟主机名为 example.user.dev (VirtualDocumentRoot /home/user/example ) 和 example.test (DocumentRoot /var/www/example)。

我已设置好一切,/var/log/syslog 没有显示任何错误,但是在使用以下命令检查 DNS 时:

主机-v示例.测试

找不到主机。使用 dig 命令也没有收到答复。

dig -x 示例.测试

; <<>> DiG 9.5.1-P3 <<>> -x 示例
;; 全局选项:printcmd
;; 得到答案:
;; ->>HEADER<<- 操作码:QUERY,状态:NXDOMAIN,id:47844
;; 标志:qr rd ra;查询:1,答案:0,权威:1,附加:0

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

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

;; 查询时间:108 毫秒
;; 服务器:80.58.0.33#53(80.58.0.33)
;; 时间:2010 年 4 月 26 日星期一 11:15:53
;; 收到的消息大小:107

我的配置如下:

/etc/bind/named.conf.local

区域“示例.测试”{

   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 示例.测试。
$TTL 86400
@ IN SOA 示例.测试。root.示例.测试。(

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

TXT “example.test,DNS 服务”
@IN NS example.test。localhost
A 127.0.0.1
example.test。A 192.168.1.52
example A 192.168.1.52
www CNAME example.test。

/etc/hosts

127.0.0.1 本地主机示例
192.168.1.52 本地主机示例 example.test

/etc/resolv.conf

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

名称服务器 80.58.0.33
名称服务器 80.58.61.250
名称服务器 80.58.61.254

搜索示例.
测试搜索示例
名称服务器 192.168.1.52


编辑

一些重大变化。现在我有这个配置:

/etc/resolv.conf

搜索示例.
测试搜索示例
名称服务器 192.168.1.52

名称服务器 80.58.0.33
名称服务器 80.58.61.250
名称服务器 80.58.61.254

/etc/hosts

127.0.0.1 本地主机示例 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  

在 NS dns1.example.test 中。
在 NS dns2.example.test 中。
在 A 192.168.1.52 中

例如,在 192.168.1.52
dns1 中,在 192.168.1.52
dns2 中,在 192.168.1.52
www CNAME 中

现在执行:

挖掘示例.测试@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;查询: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
IN NS dns2.example.test。

;; 附加部分:
dns1.example.test.86400 在 192.168.1.52 中
dns2.example.test.86400 在 192.168.1.52 中

;; 查询时间:1 毫秒
;; 服务器:192.168.1.52#53(192.168.1.52)
;; 时间:2010 年 4 月 26 日星期一 12:38:56
;; 收到的消息大小:118

那么,现在,我下一步应该怎么做?


编辑2

我把 DNS 服务器 resolv.conf 保留如下形式:

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

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

这样我就可以从每台计算机访问http://example.test

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


编辑3

最后我把我的区域留成这样。一个区域用于测试虚拟主机,另一个区域用于处理开发问题。一切都按我想要的方式运行,速度快,性能好。不知道对于我构建的系统,是否有比这更好的配置。任何建议都会得到解决。

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 IN CNAME @

master_dev

$ORIGIN dev.
$TTL 86400
@IN SOA dev.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

区域“示例.测试”{

   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 地址,因此我将查询转发到该 IP 地址的 DNS 服务器。最后,我将 ISP DNS IP 添加到转发器中,以避免造成网络流量瓶颈,因为通过实验,我大幅提高了本地 LAN 内部和外部的 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; };  

};

答案1

查看你的解析配置文件我感觉您的 BIND 服务器位于 192.168.1.52 上。据我所知,您无法在 resolv.conf 中指定类似“对于这些域,使用此名称服务器”的内容。基本上,您的 BIND 服务器永远不会被查询。正如您在 dig 查找中看到的那样(这是不正确的,它要求反向 DNS 条目),它尝试 80.58.0.33,我假设这是您的提供商的 DNS 服务器。

您已经使用“转发器”选项将 BIND 设置为缓存名称服务器,因此您需要做的是在客户端电脑中仅将 192.168.1.52 作为名称服务器。

要查看你的 BIND 配置是否正确,请尝试以下操作:

dig example.test @192.168.1.52

答案2

您可以(并且应该)使区域更加清洁。

我的示例假设 service-domain.net 是您控制的域,然后只需根据需要多次引用它named.conf(我使用一个脚本,它只获取这样的域列表并创建配置)

尝试这样的操作:

$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;
};

相关内容