logo

鱼肚的博客

Don't Repeat Yourself

macOS中搭建本地自定义DNS

简介

在Web开发过程中,我们经常会遇到需要使用特定域名的场景。如本地测试一个依赖Cookie的网站时,大多数情况下不能使用localhost来访问,而要使用类似 local.example.com 这种方式。

简单情况下修改/etc/hosts配置文件即可,但是当需求更进一步时,如通配符,/etc/hosts就不支持了。此时可以考虑使用本地DNS。

本文简要介绍下macOS中本地DNS的搭建方式,以及相关的配置。

安装本地DNS

macOS中有一套成熟的解决方案,是一个名为Dnsmasq的开源软件,参见其官方网站 http://thekelleys.org.uk/dnsmasq/doc.html 或Github Mirror:https://github.com/imp/dnsmasq。

安装有多种方式,我这里只介绍下基于HomeBrew的使用方法:

如果还没有安装HomeBrew,可以在https://brew.sh/index_zh-cn 这里获取HomeBrew。

1$ brew install dnsmasq
2$ echo 'address=/.loc/127.0.0.1' > /usr/local/etc/dnsmasq.conf
3$ sudo cp -v /usr/local/Cellar/dnsmasq/2.80/homebrew.mxcl.dnsmasq.plist /Library/LaunchDaemons
4$ sudo launchctl load -w /Library/LaunchDaemons/homebrew.mxcl.dnsmasq.plist

其中brew install 是安装指令,/usr/local/etc/dnsmasq.conf是dnsmasq的配置文件。

homebrew.mxcl.dnsmasq.plist是macOS中的应用自启动描述文件,复制到/Library/LaunchDaemons后即可实现dnsmasq随机启动。这个文件的位置有可能会发生变动,如果cp的时候提示找不到此文件的话,可以使用brew ls -v dnsmasq查看dnsmasq具体安装了哪些文件,找到这个文件对应的路径。

最后的launchctl load则是使其立即启动的指令。

如此操作之后,dnsmasq就会在电脑启动时自动运行了。

如果想要手动终止或启动它,可使用如下的两条命令:

1$ sudo launchctl stop homebrew.mxcl.dnsmasq # 终止
2$ sudo launchctl start homebrew.mxcl.dnsmasq # 启动

配置网络DNS选项

在安装好dnsmasq并运行之后,还需要修改下网络配置选项,将127.0.0.1加入到DNS列表中。并放在可用DNS的第一项,使其优先级最高。

按下图方式配置即可:

macos config

macos dns config

配置dnsmasq

在上面的示例中,我们在配置文件/usr/local/etc/dnsmasq.conf中写入了

1address=/.loc/127.0.0.1

这一行。

它的含义是,对所有以 .loc结尾的域名,解析到 127.0.0.1 这个地址(即本机)。

类似地,我们可以加入自定义的配置项

1address=/.loc/127.0.0.1
2address=/.local.banyudu.com/127.0.0.1

同时,还可以为指定的域名设置对应的DNS解析服务,可以解决一部分DNS污染问题:

1server=/google.com/8.8.8.8

引用资料

http://www.fullybaked.co.uk/articles/setting-up-a-local-dns-server-on-osx

https://cloud.tencent.com/developer/article/1174717