我正在尝试在本地 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;
};