在 Mac 上配置 DNSmasq
DNSmasq是一个小巧且方便地用于配置DNS和DHCP的工具,适用于小型网络,它提供了DNS功能和可选择的DHCP功能。它服务那些只在本地适用的域名,这些域名是不会在全球的DNS服务器中出现的。DHCP服务器和DNS服务器结合,并且允许DHCP分配的地址能在DNS中正常解析,而这些DHCP分配的地址和相关命令可以配置到每台主机中,也可以配置到一台核心设备中(比如路由器),DNSmasq支持静态和动态两种DHCP配置方式。
来自百度百科
首先你的 Mac 应该已经安装了 Hombrew,如果还没有,点击这里:Install Homebrew
以下操作均在终端进行
1、通过 Homebrew 安装 DNSmasq
brew install dnsmasq
经过漫长的等待之后,你可能会看到一个来自Homebrew
的错误信息:
Error: The `brew link` step did not complete successfully
The formula built, but is not symlinked into /usr/local
Could not symlink sbin/dnsmasq
/usr/local/sbin is not writable.
You can try again using:
brew link dnsmasq
因为你的 Mac 上不存在 /usr/local/sbin
或当前用户没有这个路径读写权限。
- 使用
mkdir /usr/local/sbin
新建目录(如果你的路径不存在) - 对目录提权
sudo chown -R `whoami`:admin /usr/local/sbin
(如果你没有权限)
在上面的操作进行完后,重新执行 brew link dnsmasq
你会看到没有任何错误提示:
Linking /usr/local/Cellar/dnsmasq/2.79... 2 symlinks created
2、进行一些简单的配置
对配置文件进行编辑:
vi /usr/local/etc/dnsmasq.conf
插入下面几行:
resolv-file=/usr/local/etc/resolv.dnsmasq.conf
strict-order
listen-address=127.0.0.1
addn-hosts=/usr/local/etc/dnsmasq.hosts
conf-dir=/usr/local/etc/dnsmasq.d
cache-size=10000
解释:
-
resolv-file
上游DNS服务配置 -
strict-order
严格按照上述文件中的配置顺序执行 -
listen-address
监听请求的地址(127.0.0.1:仅本机,0.0.0.0:任何人) -
addn-hosts
一些你需要的解析结果 -
conf-dir
其他配置路径 -
cache-size
缓存大小
配置上游DNS
服务器信息
vi /usr/local/etc/resolv.dnsmasq.conf
在resolv.dnsmasq.conf
中插入一些DNS服务器的地址:
nameserver 8.8.8.8
nameserver 8.8.4.4
nameserver 114.114.114.114
nameserver 1.1.1.1
nameserver 1.0.0.1
由于配置了strict-order
,服务会首先连接 8.8.8.8
尝试解析,如果 8.8.8.8
没有返回任何消息,则会请求 8.8.4.4
,以此类推。
配置一些你需要本地解析的域名,比如这些域名在DNS
服务器中不存在或你处于某种原因想要将一个网址映射到本地:
vi /usr/local/etc/dnsmasq.hosts
插入解析(我没有用到):
address=/foo.com/192.168.1.1
address=/域名/你期望的ip地址
3、添加到开机启动
sudo cp -fv /usr/local/opt/dnsmasq/homebrew.mxcl.dnsmasq.plist /Library/LaunchDaemons/
sudo launchctl load /Library/LaunchDaemons/homebrew.mxcl.dnsmasq.plist
4、启动服务
sudo brew services start dnsmasq
sudo brew services stop dnsmasq
// 停止服务
sudo brew services restart dnsmasq
// 重新启动服务
顺利启动后,配置本机的DNS
为 127.0.0.1
系统偏好设置
->网络
->高级
->DNS
一切就绪后,刷新一下已经存在的DNS
缓存
sudo killall -HUP mDNSResponder
使用 dig
命令测试一下:
dig www.sina.cn
; <<>> DiG 9.10.6 <<>> www.sina.cn
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 62540
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;www.sina.cn. IN A
;; ANSWER SECTION:
www.sina.cn. 59 IN CNAME sina.cn.
sina.cn. 59 IN A 180.149.136.228
;; Query time: 104 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Fri May 04 18:57:35 CST 2018
;; MSG SIZE rcvd: 70
dig www.sina.cn
; <<>> DiG 9.10.6 <<>> www.sina.cn
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 42734
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.sina.cn. IN A
;; ANSWER SECTION:
www.sina.cn. 36 IN CNAME sina.cn.
sina.cn. 36 IN A 180.149.136.228
;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Fri May 04 18:57:58 CST 2018
;; MSG SIZE rcvd: 77
第一次 104 毫秒,第二次 0 毫秒。感觉上网都变快了许多呢。