macOS 下用 dnsmasq 搭建 DNS 服务器

2021-12-24  本文已影响0人  舌尖上的大胖

我们在有些场景需要自己的 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 方式有一些优势:

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

说明:

3、Web 管理端

访问 http://<docker-host>:5380, 使用 foo/bar 进行身份验证,会看到:


Web UI

4、测试

$ host <需要解析的域名> <提供DNS服务的主机>

四、参考资料

(完)

上一篇 下一篇

猜你喜欢

热点阅读