CentOS BIND DNS 故障排除?

CentOS BIND DNS 故障排除?

我正在尝试为一个小型本地网络设置我的第一个 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 正在转到下一个名称服务器。

改用digif 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记录,情况就会有所不同)

  1. 权威名称服务器nic.app
$ dig NS nic.app +short
ns2.google.com.
ns4.google.com.
ns3.google.com.
ns1.google.com.
  1. 向他们中的任何一个人询问我们的问题:
$ 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单个记录类型。

相关内容