WSL2:可以通过 FQDN ping,但不能通过主机 ping

WSL2:可以通过 FQDN ping,但不能通过主机 ping

在 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
    

    由于每次重启时都必须完成此操作,因此您需要进行某种单例检查以确保每次重启仅添加一次。

相关内容