我们在有些场景需要自己的 DNS 服务,比如:移动端设备开发过程中,如果需要解析自定义域名,由于无法修改 hosts 文件,所以可以采用自建简单的 DNS 服务来实现域名解析,比较方便。
一、安装
使用 Homebrew 进行安装:
$ brew install dnsmasq
安装成功后会提示使用信息。也可以用如下命令重新查看提示:
$ brew info dnsmasq
可以根据提示中的信息来查看启动服务的方式和配置文件的位置。
参考:《Dnsmasq 介绍》
本文以 dnsmasq: stable 2.86
为例进行说明。
重启服务:
$ sudo brew services restart dnsmasq
如果不需要后台服务,可以这样运行:
$ sudo /usr/local/opt/dnsmasq/sbin/dnsmasq \
-k \
-C /usr/local/etc/dnsmasq.conf \
-7 /usr/local/etc/dnsmasq.d,*.conf
参数说明:
-C, --conf-file=<path> ........... 指定配置文件(默认为 /usr/local/etc/dnsmasq.conf)。
-k, --keep-in-foreground ......... 不进入后台,不在调试模式下运行。
-7, --conf-dir=<path> ............ 从此目录中的所有文件中读取配置。
二、配置文件
为了测试方便,使用 /tmp/test.conf
作为临时配置文件进行测试。
# 严格按照 /etc/resolv.conf 文件中定义的DNS服务器的顺序从上到下进行 DNS 解析,直到第一个解析成功为止。
# /etc/resolv.conf 是 macOS 默认的 DNS 配置文件,会自动生成。
# 但这一句不是必需的,可以不用
# strict-order
# 如果你不想使用 /etc/hosts,则取消下面的注释
# no-hosts
# 如果需要读取其他类似 /etc/hosts 文件,则进行配置
addn-hosts=/etc/banner_add_hosts
# 表示 DNS 服务会绑定到哪个地址上。
# 如果只是本机使用,那么只需要指定127.0.0.1就可。
# 如果还需要让局域网中的其他主机也能使用这个 DNS 服务器,还需要加上本机在局域网中的地址。
# 多个地址之间用逗号隔开,不要有空格
listen-address=192.168.1.10,127.0.0.1
# 使用 0.0.0.0 监听所有 IP 地址
listen-address=0.0.0.0
# 指定域名解析
# 将 hello.mytest.com 解析为 192.168.1.10
address=/hello.mytest.com/192.168.1.10
编辑完毕。配置如下:
listen-address=0.0.0.0
address=/hello.mytest.com/192.168.1.10
启动服务:
$ sudo /usr/local/opt/dnsmasq/sbin/dnsmasq \
-k \
-C /tmp/test.conf
三、Docker 方式安装
有人制作了 dnsmasq 的 Docker 镜像,可以在 jpillora/dnsmasq 查看。
1、优势
相比起来 Docker 方式有一些优势:
- 更简洁干净,即用即抛
- 对于简单使用的场景,无需考虑各种命令行参数,启停服务都更方便
- dnsmasq 不支持 Windows,通过 Docker 方式可以实现对 Windows 的支持
- 这个镜像还提供了 Web 配置界面
2、使用
启动服务:
$ docker run \
--name dnsmasq \
-d \
-p 53:53/udp \
-p 5380:8080 \
-v /your/config/file:/etc/dnsmasq.conf \
--log-opt "max-size=100m" \
-e "HTTP_USER=foo" \
-e "HTTP_PASS=bar" \
--restart always \
jpillora/dnsmasq
说明:
- 使用
/your/config/file
作为配置文件 - 在 UDP 的 53 端口提供 DNS 服务
- 在 5380 端口提供 Web 管理端界面
- 用户名
foo
,密码bar
3、Web 管理端
访问 http://<docker-host>:5380, 使用 foo/bar 进行身份验证,会看到:
Web UI
4、测试
$ host <需要解析的域名> <提供DNS服务的主机>
四、参考资料
(完)
网友评论