AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 513237
Accepted
JimB
JimB
Asked: 2013-06-05 13:20:30 +0800 CST2013-06-05 13:20:30 +0800 CST 2013-06-05 13:20:30 +0800 CST

nslookup 失败但 ping 成功用于不存在的域

  • 772

我有两个不同的 FreeBSD 服务器(不同的托管公司),都表现出相同的行为:他们为每个不存在的域选择一个特定的 IP 地址 (216.239.120.238)。

nslookup 应该会失败....

$ nslookup thisdomainsurelydoesntexist.com
Server:         xx.xx.229.3
Address:        xx.xx.229.3#53

** server can't find thisdomainsurelydoesntexist.com: NXDOMAIN

挖给我:

$ dig thisdomainsurelydoesntexist.com

; <<>> DiG 9.6.-ESV-R5-P1 <<>> thisdomainsurelydoesntexist.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 51717
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;thisdomainsurelydoesntexist.com. IN    A

;; AUTHORITY SECTION:
com.                    900     IN      SOA     a.gtld-servers.net. nstld.verisign-grs.com. 1370378827 1800 900 604800 86400

;; Query time: 23 msec
;; SERVER: xx.xx.229.3#53(xx.xx.229.3)
;; WHEN: Tue Jun  4 16:05:02 2013
;; MSG SIZE  rcvd: 122

ping 给我:

$ ping thisdomainsurelydoesntexist.com
PING phx2-ss-5-bug616849-lb.cnet.com (216.239.120.238): 56 data bytes
64 bytes from 216.239.120.238: icmp_seq=0 ttl=244 time=25.733 ms
64 bytes from 216.239.120.238: icmp_seq=1 ttl=244 time=20.460 ms
^C
--- phx2-ss-5-bug616849-lb.cnet.com ping statistics ---
2 packets transmitted, 2 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 20.460/23.096/25.733/2.637 ms

请注意,dig 的最终主机名 nstld.verisign-grs.com 解析为该 IP。

解决办法是什么?

更新: /etc/resolv.conf 有两个名称服务器行,每个行都有一个我从 ISP 获得的 IP(v4)。

但是,如果我在 resolv.conf 中添加一个“搜索”行,行为就会改变:如果“搜索 mydomain.com”(即我的真实域名),所有内容都会解析到它并且我会获得自己的 IP。例如,thisdomainsurelydoesntexist.com.mydomain.com。不好。但是,如果我将它设置为其他内容,例如“search myispdomain.com”,那么一切正常:现有域解析,而不存在的域不解析。

但这只是意外吗?

感谢您的建议!这里是 host -a,xx.xx.80.18 IP 是 /etc/resolv.conf 中的第一个名称服务器

$ host -a thisdomainsurelydoesntexist.com
Trying "thisdomainsurelydoesntexist.com"
Received 122 bytes from xx.xx.80.18#53 in 13 ms
Trying "thisdomainsurelydoesntexist.com"
Host thisdomainsurelydoesntexist.com not found: 3(NXDOMAIN)
Received 122 bytes from xx.xx.80.18#53 in 0 ms

我的 ISP 刚刚告诉我这可能是因为我的主机名的格式是“mydomain.com”而不是“myhost.mydomain.com”(这是他们推荐的做法)。我可以看到如何解决它。这是要做的事吗?没有缺点吗?

另外,非常重要的是,我应该提到这个 python 代码的工作方式与 ping 相同:

import _socket
_socket.getaddrinfo('thisdomainsurelydoesntexist.com', 80)

许多其他 python 模块都建立在这个核心之上。

networking
  • 3 3 个回答
  • 16005 Views

3 个回答

  • Voted
  1. Best Answer
    AutumnGarnet
    2013-06-14T12:44:06+08:002013-06-14T12:44:06+08:00

    当服务器的主机名是域名时,系统(特别是处理名称解析的 glibc)行为不稳定。从 resolv.conf 的手册页:

    搜索列表通常由本地域名确定;默认情况下,它仅包含本地域名。

    简单来说,这意味着当域查找失败时(在 /etc/hosts 中没有任何结果并且解析器无法返回有用的结果之后)系统将继续愉快地删除主机名的第一部分 - 例如 ' abcxyz.com' - 并将其余部分附加为搜索后缀。

    由于“.com”是通过从主机名中删除“abcxyz”而生成的搜索后缀,系统将附加“.com”作为失败查找的搜索后缀,这会产生如下结果:

    foob​​ar-abcxyz.cz -> foobar-abcxyz.cz.com -> www.czjewelry.com

    foob​​ar-abcxyz.com -> foobar-abcxyz.com.com -> www.cnet.com

    要纠正此问题,您可能希望将服务器的主机名设置为主机名,例如“hostname.abcxyz.com”而不是“abcxyz.com”——这将导致“abcxyz.com”被附加为默认的搜索后缀。

    作为临时措施,您可以创建随机 MD5 校验和并将其添加到 /etc/resolv.conf 作为搜索后缀的覆盖:

    uuidgen | md5sum
    e930f5f4ba6ba7868b0cc6718bcef568 -

    echo "搜索 e930f5f4ba6ba7868b0cc6718bcef568" >>/etc/resolv.conf

    这会将“e930f5f4ba6ba7868b0cc6718bcef568”附加到失败的 DNS 查找而不是“.com” - 这反过来会导致对不存在的域进行失败查找的默认行为。如果您将主机名更改为实际主机名,则可以删除此行。

    • 6
  2. fdmillion
    2013-06-05T14:41:29+08:002013-06-05T14:41:29+08:00

    一些名称服务器故意为不存在的域返回 IP。ISP 因这样做而臭名昭著——他们实际上可以通过在不存在的域的登录页面上提供的广告获利。

    您始终可以更改您的 resolv.conf 文件以使用已知肯定不会表现出此行为的公共 DNS 服务器。Google 的 DNS(8.8.8.8 和 8.8.4.4)和 Level3 的 DNS(4.2.2.1 到 4.2.2.6)都提供公共 DNS 访问并且不重定向未知域。(来源:https ://www.grc.com/dns/alternatives.htm )

    • 4
  3. Jonathan Hickman
    2013-06-05T14:42:12+08:002013-06-05T14:42:12+08:00

    在我看来,您正在使用使用通配符 DNS 的网络。这意味着如果地址失败,它会自动将您重新路由到该 IP 地址。您可以通过在网络浏览器中进行搜索来对此进行测试。当它失败时,它会将您重定向到某个由您的 ISP 处理的赞助搜索页面。

    • 1

相关问题

  • 谁能指出我的 802.11n 范围扩展器?

  • 我怎样才能得到一个网站的IP地址?

  • 在一个 LAN 中使用两台 DHCP 服务器

  • 如何在 Linux 下监控每个进程的网络 I/O 使用情况?

  • 为本地网络中的名称解析添加自定义 dns 条目

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve