10

我正在尝试将现有网址重定向到我子网上的远程计算机。为此,我将以下内容放入 /etc/hosts

192.168.1.249 holub.com

并刷新 DNS 缓存

sudo dscacheutil -flushcache;sudo killall -HUP mDNSResponder

但是,当我 ping holub.com(我知道的查看地址实际解析方式的最可靠方法)时,我看到的是真实网址 (204.13.10.74),而不是 /etc/hosts 中指定的网址 (192.168. 1.249)。有趣的是,mysqladmin 实用程序不能正确解析地址,但 Chrome 浏览器确实能正确解析地址。我猜 Chrome 有某种内部解决方法。

一般来说,看起来 /etc/hosts 是在实际 DNS 查找之后使用的,而不是之前应该使用的,因此外部地址是不可覆盖的。

我已经尝试使用各种 IPv6 等价物来代替我的本地地址(0:0:0:0:0:ffff:c0a8:01f9 ::ffff:192.168.1.249 ::192.168.1.249),但这并没有帮助。重新启动(而不是刷新缓存)也无济于事。

我发现了一种不令人满意的解决方法。如果我禁用 DNS 应答器

sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist

然后 /etc/hosts 被使用,但后来我无法访问互联网。

如果有人遇到这个问题,我很想知道是否有解决方法。

4

1 回答 1

13

我在寻找类似问题的答案时遇到了这个问题,并想将我的发现发布给处于同一位置的其他人。

作为一个三人小组,我们发现编辑我的 /etc/hosts 文件似乎有效,而编辑其他两个主机文件似乎没有。经过进一步挖掘,我们意识到我使用的是 OS X 10.10,而他们使用的是更新版本。

在尝试了大约一百万件事之后,我们发现在 10.11 及更高版本中添加到 hosts 文件中的 IP 和域之间显然不能有超过一个空格,例如:

不工作:

1.2.3.4     some.site.com

工作:

1.2.3.4 some.site.com

进行此更改后,我们立即开始看到预期的结果,无需任何缓存清除、重新启动或其他方式。

我知道在您的示例中您只显示了一个空格,但如果它现在出现在您的实际文件中,我还是想分享它。

于 2016-11-29T17:21:30.723 回答