10

设置类似于这篇文章的本地开发环境,一切正常,但最近我离线时无法访问本地开发域。当我连接到互联网时,它工作正常。我想知道 Yosemite 中解析器的使用方式是否发生了变化。如果我离线,似乎解析器规则会被忽略。

dnsmasq.conf:

address=/.dev/127.0.0.1
listen-address=127.0.0.1

/etc/resolver/dev

 nameserver 127.0.0.1

在线时:

ping -c 1 mydomain.dev
PING mydomain.dev (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.038 ms

--- mydomain.dev ping statistics ---
1 packets transmitted, 1 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 0.038/0.038/0.038/0.000 ms

scutil --dns
resolver #1
search domain[0] : nomadix.com
nameserver[0] : 203.124.230.12
nameserver[1] : 202.54.157.36
if_index : 4 (en0)
flags    : Request A records
reach    : Reachable

resolver #2
domain   : dev
nameserver[0] : 127.0.0.1
flags    : Request A records, Request AAAA records
reach    : Reachable,Local Address

离线时:

ping -c 1 mydomain.dev
ping: cannot resolve mydomain.dev: Unknown host

scutil --dns
No DNS configuration available
4

3 回答 3

2

OSX Yosemite + 解析器 + dnsmasq 离线 === 已解决!!

当您离线时,计算机上的每个接口(但 127.0.0.1 除外)都会关闭。

所以如果你想要一个 dns 解析,你的 dns 服务器必须监听 127.0.0.1。在我的情况下,我选择了 dnsmasq,因为您不必成为系统管理员即可使其工作,而且确实如此

按照这些简单的步骤,我得到了它的工作:

1) 酿造安装 dnsmasq

2) cp /usr/local/opt/dnsmasq/dnsmasq.conf.example /usr/local/etc/dnsmasq.conf

如果像我一样它没有正确安装在 /usr/local/opt 您应该能够在 brew 安装调试行中读取如下内容:

make install PREFIX=/usr/local/Cellar/dnsmasq/2.72

在这种情况下,运行以下命令:

ln -s /usr/local/Cellar/dnsmasq/2.72 /usr/local/opt/dnsmasq

然后返回第2步

3) vi /usr/local/etc/dnsmasq.conf

并像这样添加您的域,例如:

address=/foo.dev/192.168.56.101

在这种情况下,每个以 foo.dev 结尾的网址(http://www.foo.devhttp://foo.devhttp://what.ever.you.want.foo.dev等... ) 将被解析为 192.168.56.101 (这是您使用 Virtualbox 所拥有的 IP,192.168.56.*)

4) sudo launchctl load /Library/LaunchDaemons/homebrew.mxcl.dnsmasq.plist

5)在将其放入解析器之前尝试一下

nslookup foo.dev 127.0.0.1

并期待这个:

Server:  127.0.0.1
Address:     127.0.0.1#53
Name:    foo.dev
Address: 192.168.56.101

6) mkdir -p /etc/resolver

vi /etc/resolver/dev

添加这两行:

nameserver 127.0.0.1
search_order 1

7) ping foo.dev或在浏览器地址栏中提示http://foo.devhttp://so.cool.foo.dev即可!

8)快乐!您可以再次离线工作!!!!

于 2015-11-07T12:32:38.297 回答
0

几个月来我一直在检查这个问题,希望得到答案。我相信这会在 10.10.4 下降时有所帮助:http: //arstechnica.com/apple/2015/05/new-os-x-beta-dumps-discoveryd-restores-mdnsresponder-to-fix-dns-bugs/

苹果正在用 mDNSresponder 替换发现(就像以前一样)

于 2015-05-27T05:54:54.207 回答
-4

问题是当您离线时,您应该为根域“.”指定一个解析器:当我们搜索 www.google.com 时,有一个“.”。(根域)在末尾自动添加,例如:www.google.com。

所以你所要做的就是:

将所有网络接口 dns 服务器设置为 127.0.0.1:

networksetup -setdnsservers Ethernet 127.0.0.1

networksetup -setdnsservers Wi-Fi 127.0.0.1

...

创建一个文件 /etc/resolver/whatever:

nameserver 127.0.0.1
domain .

有关更多详细信息,请参阅此问题

于 2015-02-23T10:55:19.900 回答