侧边栏壁纸
博主头像
里奥的博客博主等级

行动起来,活在当下

  • 累计撰写 35 篇文章
  • 累计创建 8 个标签
  • 累计收到 2 条评论

目 录CONTENT

文章目录

WSL2 中使用 DNSmasq

里奥
2024-08-04 / 0 评论 / 0 点赞 / 43 阅读 / 4450 字

关于 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 中指定

structure.png

安装

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'

dnsgrep.png

注解: 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 也已经生效 dnsstatus.png

本地测试

由于我们设置了 listen-address=127.0.0.1, 那么我们本地测试的话需要 修改一下本地的 /etc/resolv.conf 文件.

/etc/resolv.conf

nameserver 127.0.0.1

然后,我们可以使用 dig 命令来测试, 如下所示:

dig test.kind.cluster

dnsdig.png

参考链接

0

评论区