如何更改 WSL2 的 DNS 设置?

Bev*_*van 37 dns ubuntu windows-10 windows-subsystem-for-linux

据我所知,更改 WSL2 在 Windows 10 上使用的 DNS 服务器的官方流程如下所述。(WSL2 是适用于 Linux 的 Windows 子系统的新版本,它在 Windows 10 上的轻量级 VM 中运行实际的 Linux 内核。)

但是,这个过程对我不起作用 - 我最终得到的系统只是超时并且无法解析任何地址。

我究竟做错了什么?

这是我到目前为止拼凑的过程:

1.关闭生成 /etc/resolv.conf

使用您的 Linux 提示符(我使用的是 Ubuntu),使用以下内容修改(或创建)/etc/wsl.conf

[network]
generateResolvConf = false
Run Code Online (Sandbox Code Playgroud)

(显然当前版本中存在一个错误,这些行上的任何尾随空格都会使事情出错。)

2.重启WSL2虚拟机

退出所有 Linux 提示并运行以下 Powershell 命令

wsl --shutdown
Run Code Online (Sandbox Code Playgroud)

3.创建自定义 /etc/resolv.conf

打开一个新的 Linux 提示符,然后 cd 到 /etc

如果resolv.conf软链接到另一个文件,请删除链接

rm resolv.conf
Run Code Online (Sandbox Code Playgroud)

resolv.conf使用以下内容创建一个新的

nameserver 1.1.1.1
Run Code Online (Sandbox Code Playgroud)

4.重启WSL2虚拟机

与第 2 步相同

5. 启动新的 Linux 提示符。

利润!

2020 年 3 月 18 日更新

我的/etc/hosts文件包含这个:

# This file was automatically generated by WSL. To stop automatic generation of this file, add the following entry to /etc/wsl.conf:
# [network]
# generateHosts = false
127.0.0.1       localhost
127.0.1.1       [redacted]  bearps-desktop

10.168.244.140  host.docker.internal
10.168.244.140  gateway.docker.internal
127.0.0.1       kubernetes.docker.internal

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
Run Code Online (Sandbox Code Playgroud)

该文件/etc/switch.conf不存在。

该工具resolvectl不在我的路径上;它不存在于/usr/bin/resolvectl

同样systemd-resolve不在我的路上;它不存在于/usr/bin/systemd-resolve

Bev*_*van 16

我上面记录的过程是正确的——这就是你在 WSL2 下更改 DNS 设置的方式。

我的错误是使用众所周知的 CloudFlare (1.1.1.1) 和 Google (8.8.8.8 & 8.8.4.4) 公共 DNS 服务器进行测试。事实证明,我的本地网络阻止我使用公共 DNS。

当我使用正确的内部 DNS 服务器 IP 地址测试上述过程时,一切正常。

  • 一项小修复 - 您无需重新启动即可使对“/etc/resolv.conf”的更改生效。 (2认同)

Eva*_*tti 8

在此处添加其他答案,您还想设置resolv.conf不可变。

sudo chattr +i /etc/resolv.conf
Run Code Online (Sandbox Code Playgroud)

就我而言,即使使用wsl.conf.

出于这个原因,我创建了这个小程序,可以用一个 shell 来自动执行所有操作:

https://github.com/epomatti/wsl2-dns-fix-config