1. DNSmasq 简介

DNSmasq 是一个小巧且方便地用于配置DNS和DHCP的工具。我们在做开发时,经常会把一些域名映射到本地,但我们知道 /etc/hosts 不支持各种稍微高级一些的配置,比如泛域名解析,你想把 *.hello.me 映射到本地,必须在 hosts 文件里一个一个地写,这个就很坑了。

所以就有了 DNSmasq

2. 安装

Mac 下直接使用 brew 安装即可:

brew install dnsmasq

安装成功后提示:

cp /usr/local/opt/dnsmasq/dnsmasq.conf.example /usr/local/etc/dnsmasq.conf 
sudo brew services start dnsmasq

3. 配置

3.1 配置文件 /usr/local/etc/dnsmasq.conf

根据上述成功安装提示照做,生成 /usr/local/etc/dnsmasq.conf 文件,编辑内容如下:

# 配置上行DNS,对应no-resolv
resolv-file=/etc/resolv.conf

# resolv.conf内的DNS寻址严格按照从上到下顺序执行,直到成功为止
strict-order

# DNS解析hosts时对应的hosts文件,对应no-hosts
addn-hosts=/etc/hosts
cache-size=1024 

# 多个IP用逗号分隔,192.168.x.x表示本机的ip地址,只有127.0.0.1的时候表示只有本机可以访问。
# 通过这个设置就可以实现同一局域网内的设备,通过把网络DNS设置为本机IP从而实现局域网范围内的DNS泛解析(注:无效IP有可能导至服务无法启动)
listen-address=192.168.x.x,127.0.0.1  

# 重要!!这一行就是你想要泛解析的域名配置.
address=/hello.me/127.0.0.1 

以上几乎是最简配置.

reolve-file=/etc/resolv.conf 配置上行DNS,假设 /etc/resolv.conf 内容如下:

nameserver 183.44.22.19

那就是说如果你访问域名abc.com没有被dnsmasq解析,它会尝试访问 183.44.22.19 去解析。

3.2 客户端指定域名服务器/etc/resolv.conf

你的 Mac 可能同时就是你的 DNS 使用者,所有,需要:系统偏好配置->网络->(你的连接)->DNS增加了一个条目:

# 局域网其它机器则换成实际dnsmasq的IP地址。
127.0.0.1 

一般这一行放到最上面,会优先DNS解析

此时,你 ping 一下 hello.medev.hello.me,就会发现全指向了本地。

4. 启动

注意需要使用 sudo 来启动,因为权限要求较高。

# 启动
sudo brew services start dnsmasq

# 重启
sudo brew services restart dnsmasq

# 停止
sudo brew services stop dnsmasq

如果改动了泛解析规则,重启 dnsmasq 不会立即看到效果,因为有缓存,可以稍等便可或清除一下缓存再试

sudo killall -HUP mDNSResponder

标签: none

添加新评论