问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

WSL2 中使用 DNSmasq

创作时间:
作者:
@小白创作中心

WSL2 中使用 DNSmasq

引用
1
来源
1.
https://www.gscblog.com/archives/wsls-use-dnsmasq

DNSmasq是一个小巧且功能强大的DNS和DHCP服务器软件,特别适合用于小型网络环境。通过在WSL2中配置DNSmasq,用户可以实现更灵活的DNS解析和管理,提升网络使用体验。本文将详细介绍如何在WSL2中安装、配置和使用DNSmasq。

关于 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

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号