WSL2 中使用 DNSmasq
WSL2 中使用 DNSmasq
DNSmasq是一个小巧且功能强大的DNS和DHCP服务器软件,特别适合在小型网络中使用。本文将详细介绍如何在WSL2(Windows Subsystem for Linux 2)中配置DNSmasq,包括其工作原理、安装步骤、详细配置方法以及最终的测试验证。通过本文的指导,你将能够搭建一个灵活且高效的本地DNS服务器。
关于 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系统中,可以通过以下命令安装DNSmasq:
sudo apt install dnsmasq
可以通过以下命令查看服务日志:
journalctl -xeu 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
为了过滤掉配置文件中的注释,可以使用以下命令:
grep -v ^\# /etc/dnsmasq.conf | grep -v '^$'
或者
grep -v ^\# /etc/dnsmasq.conf | tr -s '\n'
配置上游 dns 服务器
编辑 /etc/resolv.dnsmasq.conf
文件,添加上游DNS服务器:
nameserver 119.29.29.29
nameserver 1.2.4.8
以下是一些常用的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.d/kind.k8s.conf
:
address=/kind.cluster/127.0.0.1
这样当 dnsmasq 重新启动的时候就会加载这个配置,这里定义了一个本地域名 kind.cluster
,它的IP 地址为 127.0.0.1
。
启用服务
重启服务:
sudo systemctl restart dnsmasq
查看服务状态:
sudo systemctl status dnsmasq
如下图所示,配置的上游 DNS 已经生效:
本地测试
由于设置了 listen-address=127.0.0.1
,需要修改本地的 /etc/resolv.conf
文件:
nameserver 127.0.0.1
然后使用 dig
命令进行测试:
dig test.kind.cluster