如何修复 WSL 域解析

如何修复 WSL 域解析

因此,每当我使用 VPN 时,WSL 的域解析都会出现问题。我会得到以下信息:

ping: google.com: Temporary failure in name resolution

我尝试按照这些答案中的说明进行操作WSL 上的名称解析暂时失败

具体从这部分来说:

  1. 在 WSL2 内部,创建或附加文件:/etc/wsl.conf

  2. 在文件中放入以下几行以确保你的 DNS 更改不会被破坏

    echo "[network]" | sudo tee /etc/wsl.conf
    echo "generateResolvConf = false" | sudo tee -a /etc/wsl.conf
    
  3. 在 cmd 窗口中, 跑步wsl --shutdown

  4. 启动 WSL2

  5. 在 WSL2 中运行以下命令

    sudo rm -rf /etc/resolv.conf
    sudo cat << EOF > /etc/resolv.conf
    search [yourbase.domain.local]
    nameserver 8.8.8.8
    nameserver 1.1.1.1
    EOF
    

但是,我似乎无法编辑文件 /etc/resolv.conf,因为我会得到zsh: permission denied: /etc/resolv.conf

我也不知道 [yourbase.domain.local] 是什么意思,也不知道应该用什么来替换它。我已经搞砸了我的域名解析,现在每次我都会收到第一个错误,即使我的笔记本电脑没有连接到 VPN。我真的需要知道如何修复我修改的配置文件

编辑:使用评论中 muru 的建议,我能够使用命令修复域解析

sudo tee /etc/resolv.conf <<EOF

但是,我想知道在连接到 VPN 时是否有解决此错误的方法。因为上述链接中的任何解决方案对我来说都不起作用。

答案1

嗯,这是我以前见过的一种不同的潜在解决方案,但对某些人有用。我不再使用 Cisco VPN,所以我无法测试它,但是...

解决这个问题分为两个部分:

  • 修复互联网连接
  • 修复 DNS 解析

在评论中,你确认你也无法ping 8.8.8.8,这可能意味着你还没有解决第一部分。不过,我确实看到了这个 Github 评论ping在某些 AnyConnect 设置下根本不起作用,所以这可能不是最好的指标。

尝试:

wget https://$(powershell.exe -c "(Resolve-DnsName -type a askubuntu.com)[0] | Select-Object -ExpandProperty IPAddress" | tr -d '\r')

这将使用 PowerShell 解析 Ask Ubuntu 的 IP 地址,然后尝试wget从中获取。它应该会失败,但您应该会得到返回:

ERROR: cannot verify 151.101.129.69's certificate, issued by ‘CN=R3,O=Let's Encrypt,C=US’:
...

如果没有,那么你可能还没有解决联系问题。在这个问题解决之前,DNS解析肯定不会起作用。

尝试第四条命令:

Get-NetAdapter | Where-Object {$_.InterfaceDescription -Match "Cisco AnyConnect"} | Set-NetIPInterface -InterfaceMetric 6000

然后重试wget上述操作。有什么不同吗?

如果没有,则尝试(按此顺序):

  • 退出 Ubuntu

  • 断开 AnyConnect

  • wsl --shutdown来自 POwerShell

  • 启动 Ubuntu

  • 连接到 AnyConnect

  • 再次运行):

    在 PowerShell 中:

    Get-NetAdapter | Where-Object {$_.InterfaceDescription -Match "Cisco AnyConnect"} | Set-NetIPInterface -InterfaceMetric 6000
    

    在 Ubuntu 中:

    wget https://$(powershell.exe -c "(Resolve-DnsName -type a askubuntu.com)[0] | Select-Object -ExpandProperty IPAddress" | tr -d '\r')
    

如果您确实有互联网连接,请按照其余步骤尝试修复 DNS 解析。

但对于一些用户来说,这仍然是一个问题。

另请参阅这个要点为了什么可能成为更好的指南。总体信息相同,但顺序和实现略有不同。

可能的替代方案-在 WSL1 中运行 Ubuntu

如果您的 WSL 用例支持它,则 WSL1 在连接到 VPN 时通常会正常运行。您可以通过以下方式从 PowerShell 转换实例:

wsl -l -v
# Confirm distribution name, adjust commands as needed
wsl --export Ubuntu \windows\path\to\save\ubuntu.tar
wsl --set-version Ubuntu 1

或者,如果你愿意,你可以wsl --import通过以下方式将备份到新的 WSL1 实例中wsl --import UbuntuWSL1 \location\for\instance \path\to\ubuntu.tar --version 1

答案2

就我而言,我已禁用Internet 协议版本 6 (TCP/IPv6)WLAN 属性网络连接设置。

配置截图:

禁用 Internet 协议版本 6 (TCP/IPv6) 的屏幕截图

Ping GitHub.com 成功截图:

Ping GitHub.com 成功的截图

来源: https://unix.stackexchange.com/a/628767/338681

相关内容