我有一台 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。