在 macOS 中搭建自己的 DNS 服务器
最近实验了一下配置 nginx 多站点,顺便也给自己跑在本机上的几个服务上了个域名 (当然是直接用 Hosts 强行解析到 127.0.0.1 的……)。但是吧,用 Hosts 强行解析,总觉得有点别扭,所以试着在本机搭一个 DNS 服务器。
前提条件
- 一台安装有 macOS 的电脑 (不过,本文使用的 dnsmasq 在任何一个 UNIX-like 操作系统上也可以使用,所以要说成” 一台安装有 UNIX-like 操作系统的电脑” 也可以。至于 Windows?抱歉我懒得去试。)
- Homebrew 或类似的包管理工具 (或者您要是愿意,编译安装也不是不可以,只要您能解决一路上遇到的问题)
- 一个终端模拟器
安装
安装过程很简单,使用包管理工具安装即可
1 | brew install dnsmasq |
配置
安装成功之后,编辑 /usr/local/etc/dnsmasq.conf
文件,修改如下内容:
1 | # Never forward plain names (without a dot or domain part) |
然后我这里希望仍然使用路由器作为主要的 DNS 服务器,dnsmasq 仅用来解析.local 域名,所以还需要配置系统的 /etc/resolver。
注意:这一步操作仅在 macOS 中测试通过,不保证其他操作系统下的可用性
1 | # 首先创建/etc/resolver目录 |
测试
在这之前,我已经在本机配置了 nginx 服务器,并将 Aria2 前端配置了域名 aria.boris1993.local
,所以我使用浏览器直接访问这个域名,打开成功,Q.E.D.
注意:nslookup 貌似不会读取 /etc/resolver 的配置,至少在我的电脑上,nslookup aria.boris1993.local 的结果是 NXDOMAIN
后续
果然,没文化真可怕。现在得知,macOS
支持 mDNS
,系统会取电脑的主机名,将其转为全小写,并使用横线替换空格,最后在其后面附加.local
,来作为本机的域名。
比如我的主机名是 Boris-MacBook Pro
,那么系统生成的本机域名就是 boris-macbook-pro.local
,使用这个域名就可以访问本机的服务了。
上面这一顿操作猛如虎,白干了,23333