我正在尝试为一个小型本地网络设置我的第一个 BIND9 DNS 服务器,但似乎无法让它工作。我想创建一个 max.app 的“本地”域
据我所知,named 正在运行,但它似乎没有提供我的域名记录?
service named start
返回 OK,并且恶魔在启动时运行。
如果我尝试 ping mac1,我会得到:未知主机 mac1
如果我尝试 ping mac1.max.app,我会得到:未知主机 mac1
当我尝试 nslookup 时,我得到:
nslookup max.app
Server: 8.8.8.8
Address: 8.8.8.8#53
Non-authoritative answer:
Name: max.app
Address: 67.192.47.244
如您所见,我没有提供来自本地绑定服务(192.168.100.10)的记录
我的 /etc/resolv.conf 文件如下所示:
# Generated by NetworkManager
search max.app
nameserver 192.168.100.10
nameserver 8.8.8.8
nameserver 8.8.4.4
我的 /etc/named.conf 文件如下所示:
acl local-network { 192.168.100.0/24; };
options {
listen-on port 53 { 127.0.0.1; 192.168.100.10; };
listen-on-v6 port 53 { ::1; };
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
allow-query { local-network; };
recursion yes;
query-source address * port 53;
dnssec-enable yes;
dnssec-validation yes;
dnssec-lookaside auto;
/* Path to ISC DLV key */
bindkeys-file "/etc/named.iscdlv.key";
};
logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
zone "max.app" IN {
type master;
file "max.app.zone";
allow-update { none; };
};
zone "100.168.192.in-addr.arpa" IN {
type master;
file "max.app.rr.zone";
allow-update { none; };
};
我的 /var/named/max.app.zone 文件如下所示:
$ORIGIN max.app.
$TTL 86400
@ IN SOA dns1.max.app. email.gmail.com. (
2001062501 ; serial
21600 ; refresh after 6 hours
3600 ; retry after 1 hour
604800 ; expire after 1 week
86400 ) ; minimum TTL of 1 day
IN NS dns1.max.app.
dns1 IN A 192.168.100.10
CentOS1 IN A 192.168.100.15
CentOS2 IN A 192.168.100.25
mac1 IN A 192.168.100.50
mac2 IN A 192.168.100.55
mac3 IN A 192.168.100.60
www IN CNAME CentOS1
我的 /var/named/max.app.rr.zone 文件如下所示:
$ORIGIN 100.168.192.in-addr.arpa.
$TTL 86400
@ IN SOA dns1.max.app. email.gmail.com. (
2001062501 ; serial
21600 ; refresh after 6 hours
3600 ; retry after 1 hour
604800 ; expire after 1 week
86400 ) ; minimum TTL of 1 day
IN NS dns1.max.app.
10 IN PTR dns1.max.app.
15 IN PTR CentOS1.max.app.
20 IN PTR CentOS2.max.app.
50 IN PTR mac1.max.app.
55 IN PTR mac1.max.app.
60 IN PTR mac1.max.app.
服务名为 status 返回:
version: 9.7.0-P2-RedHat-9.7.0-5.P2.el6_0.1
CPUs found: 2
worker threads: 2
number of zones: 15
debug level: 0
xfers running: 0
xfers deferred: 0
soa queries in progress: 0
query logging is OFF
recursive clients: 0/0/1000
tcp clients: 0/100
server is up and running
named (pid 1121) is running.
这个“区域数量:15”似乎有点奇怪?当我在 named.conf 中只定义了 1 个区域时
更新时间:7/14 下午 5:45 CST
好的,我已遵循以下建议,但事情似乎仍然没有进展。
添加到 /etc/sysconfig/iptables
-A RH-Firewall-1-INPUT -p udp -m udp --dport 53 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 53 -j ACCEPT
dig @192.168.100.10 mac1.max.app a返回:
; <<>> DiG 9.6.0-APPLE-P2 <<>> @192.168.100.10 mac1.max.app a
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 48036
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
;; QUESTION SECTION:
;mac1.max.app. IN A
;; ANSWER SECTION:
mac1.max.app. 86400 IN A 192.168.100.15
;; AUTHORITY SECTION:
max.app. 86400 IN NS dns1.max.app.
;; ADDITIONAL SECTION:
dns1.max.app. 86400 IN A 192.168.100.10
;; Query time: 8 msec
;; SERVER: 192.168.100.10#53(192.168.100.10)
;; WHEN: Thu Jul 14 17:30:53 2011
;; MSG SIZE rcvd: 85
dig @192.168.100.10 mac1.max.app ns 返回
; <<>> DiG 9.6.0-APPLE-P2 <<>> @192.168.100.10 mac1.max.app ns ; (找到 1 个服务器) ;; 全局选项:+cmd ;; 得到答案: ;; ->>HEADER<<- 操作码:QUERY,状态:NOERROR,id:28099 ;; 标志:qr aa rd ra;查询:1,答案:0,授权:1,附加:0
;; 问题部分:;mac1.max.app. IN NS
;; 权限部分:max.app. 86400 IN SOA dns1.max.app. email.gmail.com. 2001062501 21600 3600 604800 86400
;; 查询时间:8 毫秒 ;; 服务器:192.168.100.10#53(192.168.100.10) ;; 时间:2011 年 7 月 14 日星期四 17:18:23 ;; 收到的消息大小:94
nslookup 显示 named 在端口 53 上列出
tcp 0 0 dns1:53 *:* LISTEN 2880/named
tcp 0 0 localhost.localdomain:53 *:* LISTEN 2880/named
答案1
一些建议:
从您的 中删除两个 google 名称服务器resolv.conf
。您的名称服务器出现故障,但您没有获得太多有用的信息,因为 nslookup 正在转到下一个名称服务器。
改用dig
if nslookup
。 dig 的状态响应有助于排除故障。
dig @192.168.100.10 mac1.max.app. a
dig @192.168.100.10 max.app. ns
请务必检查您的日志以查看您的区域是否正在加载。
检查 netstat 以确保 named 正在监听相应接口的端口 53。
答案2
您的named配置为监听127.0.0.1
,::1
但您的主机resolve.conf说要询问,192.168.100.10
请尝试将您的listen-on指令更改为
listen-on {
127.0.0.1;
192.168.100.10;
};
/etc/sysconfig/iptables
还要检查你的防火墙是否允许端口 53 上的连接。我的命令如下:
-A RH-Firewall-1-INPUT -p udp -m udp --dport 53 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 53 -j ACCEPT
答案3
即使战斗结束后很久,我对此类问题的解决方法仍然非常简单:
- 用于
named-checkzone
仔细检查区域文件的有效性 - 用于
named-checkconf
仔细检查绑定配置文件的有效性 - 增加其中的日志记录
dig
使用+标志进行查询@
以将流量精确地引导到服务器,并评估答复以及日志文件中发生的情况。
但简而言之,主要的事情不要做(因此在尝试解决问题之前就停止这样做):
- 劫持任何现有或随机的名称/TLD,并假装它永远不会产生冲突;这是看待问题的错误方式
- 使用相同的绑定作为权威和递归
就这个特定情况而言,dig
最后给出的结果完全正常,并且完全符合预期。
该请求是“mac1.max.app ns”(请注意,要求的记录类型是“ns”),针对的是应该在区域上具有权威性的名称服务器max.app
。
由于该名称mac1.max.app
没有NS
记录,只有一条A
记录,因此名称服务器必须回答:
NOERROR
由于名称存在,返回代码为- 部分中没有内容
ANSWER
,因为确实没有NS
记录mac1.max.app
- 但由于它对 具有权威性
max.app
,因此它在AUTHORITATIVE
部分中给出了SOA
该记录所在区域的记录,而该记录确实是max.app
。
使用任何给定的名称来重现同样的事情是很容易的,让我们尝试一下www.nic.app
(显示使用任何任意名称的危险,如上评论所述,因为该名称.app
被授予了 Google,因此现在是一个完全有效和公开的 TLD),它当然应该有A
记录,而其他的则没有NS
记录(如果名称有CNAME
记录,情况就会有所不同)
- 权威名称服务器
nic.app
:
$ dig NS nic.app +short
ns2.google.com.
ns4.google.com.
ns3.google.com.
ns1.google.com.
- 向他们中的任何一个人询问我们的问题:
$ dig NS www.nic.app @ns3.google.com.
; <<>> DiG 9.18.4 <<>> NS www.nic.app @ns3.google.com.
;; global options: +cmd
;; Sending:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 355
;; flags: rd ad; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: 198fd01a7c794358
;; QUESTION SECTION:
;www.nic.app. IN NS
;; QUERY SIZE: 52
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 355
;; flags: qr aa rd; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1
;; WARNING: recursion requested but not available
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;www.nic.app. IN NS
;; AUTHORITY SECTION:
nic.app. 1m IN SOA ns1.google.com. dns-admin.google.com. (
463794447 ; serial
900 ; refresh (15 minutes)
900 ; retry (15 minutes)
1800 ; expire (30 minutes)
60 ; minimum (1 minute)
)
;; Query time: 54 msec
;; SERVER: 216.239.36.10#53(ns3.google.com.) (UDP)
;; WHEN: Fri Jul 29 17:32:06 EST 2022
;; MSG SIZE rcvd: 100
正如预期的那样,根据 DNS 协议的设计:
NOERROR
返回代码,因为名称存在,但不存在该类型- 因此该部分中没有内容
ANSWER
,因为没有NS
该名称的记录 - 但
SOA
记录AUTHORITY
部分显示我们查询的记录所在的区域的“开始”(最高级别/最接近根)
因此,这个问题实际上没有什么需要解决的,即使没有达到预期,事情也按设计进行,但要回答这个问题,需要更多关于预期的细节。或者只是尝试查询记录类型,A
而不是NS
单个记录类型。