在 WSL2 中,我可以通过 FQDN 进行 ping 操作:
$ ping host02.foo.org
PING host02.foo.org (10.10.10.1) 56(84) bytes of data.
64 bytes from host02.foo.org (10.10.10.1): icmp_seq=1 ttl=122 time=33.7 ms
但不是主持人的名字:
$ ping host02
ping: host02: Name or service not known
我可以通过主机中的任一地址 ping 通。
** 编辑 **
我正在使用 Cisco AnyConnect 建立与公司网络的 VPN 连接。
** /编辑 **
WSL 中缺少什么?
答案1
简短回答:
尝试添加:
search foo.org
... 到您手动生成的“/etc/resolv.conf
更多细节:
在不知道您的具体配置(主要是企业网络方面)的情况下,我在这里做出了一些有根据的猜测......
默认情况下,WSL2 仅在其自动生成的名称服务器中设置一个名称服务器/etc/resolv.conf
:
nameserver <Hyper-V virtual switch address>
Hyper-V 虚拟交换机负责将解析从 WSL2 代理到 Windows 解析器。因此,最终,它(默认情况下)是视窗ping host02
在正常情况下处理该问题的解析器。
Windows 系统通过以下任一方式配置搜索后缀:
- DHCP
- 或组策略对象
只要视窗正在解决代表 WSL2,这很好用:
- 你
ping host02
- Linux 从自动生成的
/etc/resolv.conf
- 名称服务器地址是运行代理解析器进程的 Hyper-V 交换机
- 代理解析器要求 Windows 解析
host02
- (这里可能跳过了一些内部步骤,但是...)Windows 附加其已知的搜索后缀以查看它们是否可以解析。
但是如果您覆盖您的/etc/resolv.conf
并将 Windows/Hyper-V 解析器排除在外,则不会发生这种情况。
虽然我目前无法直接测试这一点,但您应该能够:
添加
search foo.org
到您的手动生成的/etc/resolv.conf
,因为您已经有了公司名称服务器或者重新添加 Hyper-V 交换机地址。这里的挑战是,每次 WSL2 重新启动时,交换机地址都会发生变化,因此您必须解析它并通过脚本添加它。例如:
echo nameserver $(ip route show default | awk '{print $3}') | sudo tee -a /etc/resolv.conf
由于每次重启时都必须完成此操作,因此您需要进行某种单例检查以确保每次重启仅添加一次。