编辑:该问题已被关闭,因为它是该问题的重复:WSL2:可以通过 FQDN ping,但不能通过主机 ping。但是,这个问题并没有回答我的问题,这就是为什么名称解析对 3 个主机中的 2 个有效。这不是一个普遍的问题,因为所有名称解析都需要搜索后缀。
我正在运行 Windows 11 Pro,并且安装了 WSL 2 并配置了默认的 Ubuntu 安装。
我的网络配置为 DHCP 提供默认搜索域/DNS 后缀。我们将其称为“mydomain.dev”。
在 Windows 世界中,使用其他客户端,我可以通过裸主机名访问网络上的其他三台主机,而无需明确指定 DNS 后缀。例如:
C:\Users\Isaac>ping host1
Pinging host1.mydomain.dev [192.168.1.254] with 32 bytes of data:
Reply from 192.168.1.254: bytes=32 time=1ms TTL=64
C:\Users\Isaac>ping host2
Pinging host2.mydomain.dev [192.168.1.251] with 32 bytes of data:
Reply from 192.168.1.251: bytes=32 time<1ms TTL=64
这对网络上的所有三个主机都有效。
但是,在 WSL 环境中,我只能通过这种方式访问 3 台主机中的 2 台。对于第三台主机,我必须明确指定域名,否则名称解析会失败:
isaac@ubuntu:~$ ping host1
ping: host1: Name or service not known
isaac@ubuntu:~$ ping host1.mydomain.dev
PING host1.mydomain.dev (192.168.1.254) 56(84) bytes of data.
64 bytes from 192.168.1.254 (192.168.1.254): icmp_seq=1 ttl=63 time=1.08 ms
isaac@ubuntu:~$ ping host2
PING host2 (192.168.1.251) 56(84) bytes of data.
64 bytes from 192.168.1.251 (192.168.1.251): icmp_seq=1 ttl=63 time=2.27 ms
我没有对 WSL 虚拟机中的网络配置进行任何更改。该resolv.conf
文件指定了 Hyper-V 接口,我相信它最终会将 DNS 查询传递到主机 Windows 解析器:
isaac@ubuntu:~$ cat /etc/resolv.conf
# This file was automatically generated by WSL. To stop automatic generation of this file, add the following entry to /etc/wsl.conf:
# [network]
# generateResolvConf = false
nameserver 172.22.96.1
为什么从 WSL 机器内部无法通过不带后缀的主机名访问这台单一主机,即使可以访问其他类似的主机?
另一个有趣的注意事项:我的网络上的 DNS 由 PiHole 处理,我已在其中为网络上的所有计算机添加了手动 DNS 条目(host1.mydomain.dev、host2.mydomain.dev 等)。我尝试为 host1 添加另一个不带 DNS 后缀的 DNS 条目,结果为该主机生成了两个 DNS 条目:
host1 192.168.1.254
host1.mydomain.dev 192.168.1.254
完成此操作后,我能够通过裸主机名从 WSL 计算机解析 host1,而无需后缀。但是,如果我删除该重复/额外的 DNS 条目,它会再次停止解析。DNS 服务器有其他正在运行的主机的单个条目。这些条目包括搜索后缀。
答案1
创建 .wslconfig 文件并设置 dnsTunneling=true 似乎可以解决问题。WSL VM 中的 /etc/resolv.conf 文件具有不同的 DNS 地址(现在是名称服务器 127.0.0.42,而不是名称服务器 172.22.96.1,并且它包含搜索 mydomain.dev 标志。所有 3 个主机的名称解析似乎按预期工作。仍然很想能够解释为什么在没有 dnsTunneling 设置的情况下只有一个主机出现故障!