关于 DNSmasq
DNSmasq 是一个小巧且方便地用于配置 DNS 和 DHCP 的工具,适用于小型网络,它提供了 DNS 功能和可选择的 DHCP 功能。自己搭建公共 DNS 更加灵活,如果是在本地搭建,还可以大幅提高解析速度。
DNSmasq 原理
- 本机APP访问主机的 /etc/resolv.conf 获取 DNSServer,该文件指向的 DNSServer 为 DNSmasq。
- 本地局域网中的主机可以直接访问Dnsmasq,即在这些主机中 /etc/resolv.conf 指向了 DNSmasq。
- DNSmasq 需要通过上游DNS来进行域名解析,上游DNS可以配置在 /etc/resolv.dnsmasq.conf 中,该文件需要在DNSmasq 的配置文件 /etc/dnsmasq.conf 中指定
安装
Ubuntu/Debian 中安装
sudo apt install dnsmasq
可以通过命令 journalctl -xeu dnsmasq
查看服务日志
如果发生启动错误,即 sudo systemctl start dnsmasq
命令执行不成功,有错误, 可以先放在一边,等待后续的配置全部完成后再尝试启动.
配置 DNSmasq
DNSmasq 配置文件在 /etc/dnsmasq.conf
,我们需要修改几个参数,分别为:
resolv-file=/etc/resolv.dnsmasq.conf
这个参数表示 dnsmasq 会从这个指定的文件中寻找上游 dns 服务器- 取消注释的 strict-order ,表示严格按照 resolv-file 文件中的顺序从上到下进行 DNS 解析, 直到第一个成功解析成功为止
- 注释掉 no-hosts, 默认情况下这是注释掉的, dnsmasq 会首先寻找本地的 hosts 文件再去寻找缓存下来的域名, 最后去上游 dns 服务器寻找.
- 设置
listen-address=127.0.0.1
,127.0.0.1 改成自己服务器IP - 设置 conf-dir, 自动加载conf-dir目录下的配置文件, 我们可以设置为
conf-dir=/etc/dnsmasq.d/,*.conf
当我们查看 /etc/dnsmasq.conf 文件时, 会发现它特别的长, 里面有大量的注释, 我们又是不知道我们设置了哪些选项, 我们可以使用下面的命令来过滤.
grep -v ^\# /etc/dnsmasq.conf | grep -v '^$'
或者
grep -v ^\# /etc/dnsmasq.conf | tr -s '\n'
注解:
grep -v ^\# /etc/dnsmasq.conf | grep -v '^$'
中
- -v, --invert-match 表示 select non-matching lines. 也就是反选的意思
- ^\# 表示以#号开头的文本行, 其中#号需要被转义(\#)
- ^$ 表示空行的意思, $ 表示匹配输入字符串的结尾位置. ^ 表示匹配输入字符串的开始位置
配置上游 dns 服务器,即配置 /etc/resolv.dnsmasq.conf
nameserver 119.29.29.29
nameserver 1.2.4.8
我们可以参考下面的常用 DNS , 来设置我们的上游 DNS
北京电信DNS: 219.141.136.10 219.141.140.10
北京联通DNS: 202.106.196.115 202.106.46.151 202.106.0.20 202.106.195.68
百度公共DNS: 180.76.76.76
阿里DNS: 223.5.5.5 223.6.6.6
腾讯DNS: 119.29.29.29
Cloudflare DNS: 1.1.1.1 1.0.0.1
Google DNS: 8.8.8.8 8.8.4.4
CNNIC SDNS(中国互联网络信息中心公共DNS服务器): 1.2.4.8 210.2.4.8
114 DNS: 114.114.114.114 114.114.115.115
360 DNS 派电信/移动/铁通: 101.226.4.6 218.30.118.6
360 DNS 派联通: 123.125.81.6 140.207.198.6
oneDNS: 112.124.47.27 114.215.126.16
OpenDNS: 208.67.222.222 208.67.220.220
V2EX DNS: 199.91.73.222 178.79.131.110
OpenerDNS: 42.120.21.30
额外的配置:
我们设置了 conf-dir=/etc/dnsmasq.d/,*.conf
, 这样我们就可以将额外的配置放在 /etc/dnsmasq.d/
目录下, 这样可以设置一些经常变更的配置,而不会破坏主配置文件 /etc/dnsmasq.conf
比如我们创建一个配置文件 /etc/dnsmasq.d/kind.k8s.conf
address=/kind.cluster/127.0.0.1
address 配置启用泛域名解析
,即自定义解析a记录,如这里的配置 kind.cluster 这个域名, 访问 kind.cluster 时的所有域名(比如 test.kind.cluster)都会被解析成 127.0.0.1.
当 dnsmasq 重新启动的时候就会加载这个配置.
启用服务
重启服务:
sudo systemctl restart dnsmasq
查看服务状态
sudo systemctl status dnsmasq
如下图示,我们配置的上游 DNS 也已经生效
本地测试
由于我们设置了 listen-address=127.0.0.1, 那么我们本地测试的话需要 修改一下本地的 /etc/resolv.conf 文件.
/etc/resolv.conf
nameserver 127.0.0.1
然后,我们可以使用 dig 命令来测试, 如下所示:
dig test.kind.cluster
评论区