网上很多教程,还有很多关于怎么配置 dnsmasq,本人摸索出来的基本是最少的配置,写的越少,越容易排查问题。
没记错的话,这里本人安装的版本是 dnsmasq-2.81
。
1. 搭建 dnsmasq 实现共享 hosts 文件中的配置
安装 brew install dnsmasq
配置文件是 /usr/local/etc/dnsmasq.conf
设置开机自启:
$ sudo cp -fv /usr/local/opt/dnsmasq/*.plist /Library/LaunchDaemons
$ sudo chown root /Library/LaunchDaemons/homebrew.mxcl.dnsmasq.plist
手动启动或关闭:
$ sudo launchctl unload /Library/LaunchDaemons/homebrew.mxcl.dnsmasq.plist
$ sudo launchctl load /Library/LaunchDaemons/homebrew.mxcl.dnsmasq.plist
什么配置项都不用加,Dnsmasq 提供域名解析服务时,默认首先就会查看本机的 /etc/hosts
,如果没找到目标域名对应的 IP 地址,会把请求转发到 /etc/resolv.conf
文件中配置的域名服务器,该文件的内容一般是自动生成的。
总之就是你先啥都不用干,只要安装,然后启动,先别着急跟着网上配置,也不用去更改系统网络设置中的 DNS 配置。
/etc/resolver 目录下加个文件,名字随意,比如 /etc/resolver/dev
,其中填写一条域名服务器的配置,即本机运行的 dnsmasq 服务:
nameserver 127.0.0.1
一切就绪后,刷新一下已经存在的DNS缓存:
sudo killall -HUP mDNSResponder
完成!!!
现在,局域网中的其他设备若想使用本机搭建的 dns 服务,只需把 dns 地址改为本机的局域网 IP 即可。
我们实现了共享本机的 /etc/hosts
记录,而不必每个设备都重新配置一遍 hosts 文件,尤其是 iOS 要越狱、Android 要 root 后才能更改设备的 hosts。
如何验证成功了呢?
其他设备把 dns 配置为本机,访问只有本机的 /etc/hosts
才有的域名记录,若能正确解析,说明 ok 了。
2. 本机也能访问本机的 dnsmasq
接下来,还可以在 dnsmasq 中直接添加一条解析记录(等价于/etc/hosts/
):
address=/.localhost/127.0.0.1 # 注意有个 . 代表泛解析
然后使用如下命令直接测试刚刚搭建的 dnsmasq 所提供的解析服务:
dig anything.localhost @192.168.20.20 # @符号指定了所使用的 dns 服务器
再进一步!如果本机也想使用本机提供的 dns 服务呢?
有些遗憾,本人通过配置 dnsmasq 的方式,没能操作出来,但有个最简单的办法,就是在系统偏好设置-网络-高级-dns-添加一条 127.0.0.1 即可。
然后再次 dig 时不必再指定 @dns服务器地址:
dig anything.localhost
成了的话,同样有正确的应答:
;; ANSWER SECTION:
anything.localhost. 0 IN A 127.0.0.1
3. 参考
https://oracle-base.com/articles/misc/dnsmasq-for-simple-dns-configurations-mac-osx