使用dnsmasq搭建dns服务器解决内网域名测试问题

问题背景

有时候需要在内网环境里进行域名相关的测试。

如果是简单域名,可以通过修改/etc/hosts文件来实现,比如

127.0.0.1 test.xmanyou.com

但是如果是通配符域名呢?hosts文件是不支持下边这边配置来解析通配符的:

127.0.0.1 *.apps.xmanyou.com

解决方法

解决方法,就是搭建一个自己的dns服务器。dnsmasq就是这样一个dns服务器。

下边详细介绍一下在MacOS环境下,利用dnsmasq搭建内网域名测试环境的方法。

关于 dnsmasq

https://thekelleys.org.uk/dnsmasq/doc.html

Dnsmasq provides network infrastructure for small networks: DNS, DHCP, router advertisement and network boot.
Dnsmasq是一个开源的轻量级DNS转发和DHCP、TFTP服务器,使用C语言编写。Dnsmasq针对家庭局域网等小型局域网设计,资源占用低,易于配置。

安装 dnsmasq

brew install dnsmasq

使用 dnsmasq

一些命令

  • 启动/重启
    注意1 需要用sudo启动
sudo brew services restart dnsmasq
  • 停止
sudo brew services stop dnsmasq

配置 dnsmasq

dnsmasq的配置文件

/usr/local/etc/dnsmasq.conf

注意2 修改配置后,需要重启服务来生效

参数

  • strict-order
  • listen-address ,

示例

# 严格按照/etc/resolv.conf文件指定的dsn解析器的顺序进行解析
strict-order
# 服务监听地址,设置为127.0.0.1仅限本机使用
listen-address=127.0.0.1

添加dns解析记录

# 不使用通配符
address=/test.xmanyou.com/127.0.0.1
# 使用通配符
address=/.apps.xmanyou.com/127.0.0.1

指定dns服务器

测试

dig test.xmanyou.com

dig  123.apps.xmanyou.com

/usr/local/etc/dnsmasq.conf 配置文件完整示例

# 严格按照/etc/resolv.conf文件指定的dsn解析器的顺序进行解析
strict-order
# 服务监听地址,设置为127.0.0.1仅限本机使用
listen-address=127.0.0.1
# 不使用通配符
address=/test.xmanyou.com/127.0.0.1
# 使用通配符解析 *.apps.xmanyou.com
address=/.apps.xmanyou.com/127.0.0.1

好了,现在可以在内网进行域名测试了,测试完毕后再部署到生产环境就很省心了。

参考