为什么名称解析在服务器本身上不起作用?

为什么名称解析在服务器本身上不起作用?

我有一台 Ubuntu Linux 12.04.1 服务器,它作为一项服务运行 bind9 来对 xxx.local 域进行名称解析,并将所有其他请求转发到我的互联网提供商的名称服务器。

这对于网络中的所有客户端(Windows 和 Linux)都运行良好,它们都可以按预期获得名称解析。

直到昨天,服务器本身也是这样。但我更新了几个软件包并重新启动了它。一切似乎都很好,所以我回家了。今天早上,代理和电子邮件不再起作用。原来是名称解析出了问题。客户端上的 nslookup 仍然正常工作,但在服务器上它总是超时:

nslookup google.com
connection timed out; no servers could be reached

nslookup google.com 127.0.0.1
;; connection timed out; no servers could be reached

nslookup google.com 192.168.115.250
;; connection timed out; no servers could be reached

(其中 192.168.115.250 是服务器本身的 IP 地址)

在另一台 Linux 计算机上它可以运行:

nslookup google.com
Server:         192.168.115.250
Address:        192.168.115.250#53

Non-authoritative answer:
Name:   google.com
Address: ....

在 Windows XP 计算机上它看起来像这样:

nslookup google.com
*** Der Servername für die Adresse 192.168.115.250 konnte nicht gefunden werden:
    Non-existent domain
*** Die Standardserver sind nicht verfügbar.
Server:  UnKnown
Address:  192.168.115.250

Nicht autorisierte Antwort:
Name:    google.com
Address:  ...

(该错误意味着“无法找到该地址的服务器名称...这可能意味着反向查找不起作用。我以前从未见过这种情况。)

如果我在我的服务器上指定我的互联网提供商的名称服务器之一,它就会起作用:

nslookup google.com [IP goes here]
Server:         [IP goes here]
Address:        [IP goes here]#53

Non-authoritative answer:
Name:   google.com
Address: ....

我不知道这里可能出了什么问题。由于直到昨天一切都运行正常,所以这一定与最新的 Ubuntu 更新或重启有关。

如有任何提示我将不胜感激。

更新:防火墙不应该是问题:

sudo iptables -L -v -n
Chain INPUT (policy ACCEPT 16M packets, 6138M bytes)
 pkts bytes target     prot opt in     out     source               destination 

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination 

Chain OUTPUT (policy ACCEPT 13M packets, 50G bytes)
 pkts bytes target     prot opt in     out     source               destination 

更新2:

由于人们不断要求提供 resolv.conf,我想指出,在上面的 nslookup 调用中指定名称服务器的 IP 地址不起作用。但无论如何:

cat /etc/resolv.conf:
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 192.168.115.250

(如果我将该 IP 更改为我的互联网提供商的名称服务器,它可以工作,但这不是解决方案。)

更新3:

netstat -anp | egrep :53
tcp   0   0 192.168.115.250:53    0.0.0.0:*       LISTEN      104414/named
tcp   0   0 127.0.0.1:53          0.0.0.0:*       LISTEN      104414/named
tcp6  0   0 :::53                 :::*            LISTEN      104414/named
udp   0   0 192.168.115.250:53168 5.9.122.148:123 ESTABLISHED 106273/ntpd
udp   0   0 192.168.115.25:53     0.0.0.0:*                   104414/named
udp   0   0 127.0.0.1:53          0.0.0.0:*                   104414/named
udp6  0   0 :::53                 :::*                        104414/named

我觉得不错。

更新4:

ip route show table local
local 127.0.0.0/8 dev lo  proto kernel  scope host  src 127.0.0.1
local 127.0.0.1 dev lo  proto kernel  scope host  src 127.0.0.1
broadcast 192.168.115.0 dev eth0  proto kernel  scope link  src 192.168.115.250
local 192.168.115.250 dev eth0  proto kernel  scope host  src 192.168.115.250
broadcast 192.168.115.255 dev eth0  proto kernel  scope link  src 192.168.115.250

我不确定该如何解释这一点。

更新5:

我刚刚发现了另一个奇怪之处:不仅命名不起作用,而且 smtpd 也不起作用:

fetchmail: reading message [...]
Trying to connect to 127.0.0.1/25...connection failed.
fetchmail: connection to localhost:smtp [127.0.0.1/25] failed: Connection timed out.
fetchmail: Connection errors for this poll:
name 0: connection to localhost:smtp [127.0.0.1/25] failed: Connection timed out.
fetchmail: SMTP connect to localhost failed

答案1

找到了:无论什么原因,环回接口都没有出现:

ifconfig
eth0      Link encap:Ethernet  HWaddr 00:1e:67:6e:cd:3b
          inet addr:192.168.115.250  Bcast:192.168.115.255  Mask:255.255.255.0
          inet6 addr: fe80::21e:67ff:fe6e:cd3b/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:58326791 errors:0 dropped:4 overruns:0 frame:0
          TX packets:109062010 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:21089630035 (21.0 GB)  TX bytes:131207523503 (131.2 GB)
          Interrupt:19 Memory:c1c00000-c1c20000

请注意这里没有“lo”。

从...开始

ifup -v lo

...问题已解决。

感谢所有提供帮助的人,特别是 synneticon-dj。

相关内容