chr*_*890 4 windows dns ubuntu windows-subsystem-for-linux
我有适用于 Windows 的 Ubuntu 应用程序(从 Microsoft 商店下载),但我不断遇到名称解析错误的临时故障。
ping: google.com: Temporary failure in name resolution
Run Code Online (Sandbox Code Playgroud)
当我连接到 VPN 和未连接到 VPN 时都会发生这种情况。但是,如果我运行命令:
echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf
Run Code Online (Sandbox Code Playgroud)
然后就解决了未连接VPN的问题。但是,即使运行该命令后,如果我连接到 VPN,它仍然无法工作。
我需要通过 ssh 连接到远程服务器,这需要我使用 VPN 才能访问。因此,我需要确定为什么在连接到 VPN 时没有发生名称解析。即使未连接到 VPN,也最好能永久解决问题,这样我就不必每次都运行上述命令。
该/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
Run Code Online (Sandbox Code Playgroud)
我很感激任何想法!
我需要通过 ssh 连接到远程服务器,这需要我使用 VPN 才能访问。
至少对于该特定用例,解决方案应该(希望)相当简单——创建 WSL1 实例而不是 WSL2。
WSL2 的网络在Windows 计算机后面(内部)进行虚拟化和 NAT 。通常,当 WSL2 启动时,该/init进程会创建一个resolv.conf指向Windows计算机上的 IP 地址的 IP 地址,并且 Windows 计算机上的进程充当代理解析器。
虽然我不确定为什么您的设备在未连接到 VPN 时会失败,但我确实知道 WSL2 在通过多种类型的 VPN 连接时会出现严重问题。某些 VPN(尤其是企业 VPN)会在连接时阻止所有本地流量。例如,如果您的本地网络上有另一台计算机或打印机,则在连接到 VPN 时可能也无法访问它。由于 WSL2 在 Windows 看来是“另一台计算机”(某种意义上),因此它也会阻止对其的访问。因此,当连接到许多 VPN 时,解析器将无法工作。
另一方面,WSL1 不存在这个问题。它与 Windows共享(某种“桥梁”)网络接口。
由于ssh在 WSL1 下运行得很好,这可能是您的最佳选择。
您可以将现有 WSL2 发行版转换或复制到 WSL1。无论哪种方式,都从备份开始。来自 PowerShell:
wsl -l -v
# Confirm the distribution name and
# adjust the following commands as needed
wsl --export <distro> ubuntu_backup.tar
Run Code Online (Sandbox Code Playgroud)
转换:
wsl --set-version <distro> 1
Run Code Online (Sandbox Code Playgroud)
复制:
mkdir <location>
wsl --import Ubuntu_WSL1 <location> <path_to>/ubuntu.tar --version 1
Run Code Online (Sandbox Code Playgroud)
我本人尚未对此进行测试,但如果您使用的是 Windows 11 专业版(或教育版)或更高版本,则 Microsoft Store 中提供了 WSL 预览版。该版本目前有一项新功能,允许您创建桥接的 Hyper-V 网络交换机并在 WSL2 中使用它。
这可能允许您在连接到 VPN 时使用 WSL2。
有关详细信息,请参阅此 Reddit 帖子。
但实际上,在这种情况下我会选择 WSL1。正是出于这个原因,我保留了 WSL2 和 WSL1 实例(以及 WSL1 仍然比 WSL2 具有优势的其他一些实例)。
| 归档时间: |
|
| 查看次数: |
7268 次 |
| 最近记录: |