毕设有个需求,是解析某个域名的所有子域名到本地。这个需求按理来说不难,实质上是需要一个增强版的 hosts 文件,进一步分析,可以找一个 dns 代理工具来解决,通过搜索找到了 Dnsmasq。但这篇文章的出现是因为大多数教程操作都没有提到一点,使得原本简单的工具使用却占用了我挺多时间!

具体实现和注意点

1. 下载安装工具

下载安装步骤因为有了 Homebrew 神器,变得轻而易举:

brew install dnsmasq

最后安装完后,会得到类似工具提示:

Installed successful.

To configure dnsmasq, copy the example configuration to /usr/local/etc/dnsmasq.conf
and edit to taste.

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

To have launchd start dnsmasq now and restart at startup:
  sudo brew services start dnsmasq

2. 配置使用

该软件配置以及使用根据安装完后的提示,即能简单完成:

先拷贝事例文件:

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

然后在 dnsmasq.conf 根据提示添加解析后就能完事了,但是这里有个需要注意的地方:

打开 /usr/local/etc/dnsmasq.conf,参照事例,添加类似解析行:

echo 'address=/dev/127.0.0.1' >> /usr/local/etc/dnsmasq.conf

这里解释一下,该行命令的作用是后缀域名解析到 127.0.0.1 ip,即类似 a.dev, demo.domain.dev 都会被解析到了 127.0.0.1 这个 ip 下,这里即可以实现所有子域名解析本地这个需求。

但是需要注意的地方是本地的网络环境中 dns 设置一般不会有本地服务器,而是一般的 114.114.114.114 或着其他运营商的 dns 服务器,因此我们需要在正常的 dns 服务器前加上一会儿我们即将启动的本地 dns 服务器(这里用 127.0.0.1 即可, 这个可以理解为你 dnsmasq 工具跑的地址)

这步具体操作为:

打开系统设置->网络设置->高级设置->DNS设置,在第一项设置或补充一个本地服务器 127.0.0.1

最后根据安装软件时给出的提示启动工具即可:

sudo brew services start dnsmasq

# 该命令还会设置开机启动该工具,
如果你只是临时用一下,可以更换执行一下命令
# sudo brew services run dnsmasq

3. 检测使用

最后如果启动成功且配置没有问题,即可通过 dig 'a.dev' 看到 dns 服务器被该工具修改成 127.0.0.1 了。

如果出现问题,首先可以使用命令 sudo brew services list 看看工具是否正常启动(绿色正常), 如果不正常,最大的可能是软件配置文件有问题,可以打开手动编辑对后再试。