如果我通过 SSH 进入我的服务器,并尝试 ping 另一台服务器,我永远看不到响应。这似乎只发生在 URL 上。我已经能够 ping 几个 IP 地址。
当我的 PHP cURL 请求失败时,我第一次注意到了这个问题;我看到这个错误:“名称查找超时”。
另外,我不确定这是否不寻常,但我无法在我的服务器上找到 nslookup 或 dig。(执行 which nslookup 和 which dig 没有提供任何结果)
该问题似乎与切片迁移同时发生(Slicehost 正在迁移我的切片)。
有趣的是,我能够从任何其他计算机成功 ping 我的服务器,并导航到它托管的网页。
我的服务器是:Debian 5.0 (lenny),如果有什么不同的话,我正在运行 Apache。我是 SysAdmin 的菜鸟,所以如果有任何有用的信息,请告诉我。任何帮助都将不胜感激。谢谢!
答案1
纽唐,
听起来您遇到了 DNS 解析问题。要确认网络连接,您可以 ping Google 的 DNS 服务器 8.8.8.8 或 8.8.4.4。如果此方法有效,但 ping google.com 时返回名称查找超时,则可能是 DNS 问题。
/etc/resolv.conf 应该包含您的盒子发送 DNS 查询的解析器列表。该列表应包括您的托管服务提供商推荐的内容。我不使用 Slicehost,所以我不确定,但这个 wiki 可能会有所帮助:http://wiki.slicehost.com/doku.php?id=using_slicehost_nameservers_for_dns_lookups
为了测试目的,您可以将 Google 的名称服务器添加到 /etc/resolv.conf(在开头),看看是否可以解决您的问题。
例如
名称服务器 8.8.8.8
编辑:
如果您的 /etc/resolv.conf 看起来不错,那么请确保您的防火墙没有阻止 DNS 数据包。如果您使用 iptables,您可以通过运行“iptables -L”来查看您的规则。DNS 使用端口 53,因此您需要确保有一条规则允许查询发出,另一条规则允许答案返回。
例子:
iptables -A OUTPUT -p udp -m udp --dport 53 -j ACCEPT
iptables -A OUTPUT -p tcp -m tcp --dport 53 -j ACCEPT
iptables -A INPUT -p udp -m udp --sport 53 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --sport 53 -j ACCEPT
答案2
如果发现不是本地防火墙问题,请咨询您的托管服务提供商 - 我听说过一些托管服务提供商会阻止出站 DNS 查询,而是强迫其用户使用本地缓存名称服务器。通常,这是一种不太常见的坏习惯,但确实存在。快速检查您的托管服务提供商应该足以验证或消除这种情况。