【问题标题】:unable to access network from WSL2无法从 WSL2 访问网络
【发布时间】:2019-08-23 21:53:07
【问题描述】:

我无法从 WSL2 子系统访问我的家庭网络。我已经安装了 Ubuntu。

anirban@Desktop:/mnt/g/BASH_WORKSPACE$ lsb_release -a                                                             No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 18.04.2 LTS
Release:        18.04
Codename:       bionic
anirban@Desktop:/mnt/g/BASH_WORKSPACE$ uname -r                                                                   4.19.57-microsoft-standard

WSL2 中的 eth0 有如下配置:

anirban@Desktop:/mnt/g/BASH_WORKSPACE$ ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.20.213.230  netmask 255.255.240.0  broadcast 172.20.223.255
        inet6 fe80::215:5dff:fecf:39a5  prefixlen 64  scopeid 0x20<link>
        ether 00:15:5d:cf:39:a5  txqueuelen 1000  (Ethernet)
        RX packets 100  bytes 10544 (10.5 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 12  bytes 936 (936.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

anirban@Desktop:/mnt/g/BASH_WORKSPACE$ ip addr show                                                               1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: bond0: <BROADCAST,MULTICAST,MASTER> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 92:ce:02:d5:ab:9b brd ff:ff:ff:ff:ff:ff
3: dummy0: <BROADCAST,NOARP> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether ce:ec:a2:b5:b2:b0 brd ff:ff:ff:ff:ff:ff
4: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:15:5d:cf:39:a5 brd ff:ff:ff:ff:ff:ff
    inet 172.20.213.230/20 brd 172.20.223.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::215:5dff:fecf:39a5/64 scope link
       valid_lft forever preferred_lft forever
5: sit0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1000
    link/sit 0.0.0.0 brd 0.0.0.0

来自 WSL2 的路由没有默认路由。因此,我通过 eth0 添加了默认路由。

anirban@Desktop:/mnt/g/BASH_WORKSPACE$ ip route
172.20.208.0/20 dev eth0 proto kernel scope link src 172.20.213.230
anirban@Desktop:/mnt/g/BASH_WORKSPACE$ sudo ip route  add default dev eth0                                        anirban@Desktop:/mnt/g/BASH_WORKSPACE$ ip route                                                                   default dev eth0 scope link
172.20.208.0/20 dev eth0 proto kernel scope link src 172.20.213.230

Windows 中的 vEthernet 具有默认配置,并且令人惊讶地不属于 WSL 的子网。

PS C:\Users\tukai> ipconfig

Windows IP Configuration


Ethernet adapter Ethernet:

   Media State . . . . . . . . . . . : Media disconnected
   Connection-specific DNS Suffix  . :

Ethernet adapter VirtualBox Host-Only Network #3:

   Connection-specific DNS Suffix  . :
   Link-local IPv6 Address . . . . . : fe80::61be:a6f4:e22d:e985%54
   IPv4 Address. . . . . . . . . . . : 192.168.99.1
   Subnet Mask . . . . . . . . . . . : 255.255.255.0
   Default Gateway . . . . . . . . . :

Wireless LAN adapter Local Area Connection* 1:

   Media State . . . . . . . . . . . : Media disconnected
   Connection-specific DNS Suffix  . :

Wireless LAN adapter Local Area Connection* 2:

   Media State . . . . . . . . . . . : Media disconnected
   Connection-specific DNS Suffix  . :

Wireless LAN adapter Wi-Fi:

   Connection-specific DNS Suffix  . :
   IPv6 Address. . . . . . . . . . . : 2a02:8108:45c0:263c::67fd
   IPv6 Address. . . . . . . . . . . : 2a02:8108:45c0:263c:a847:a373:36ab:c040
   Temporary IPv6 Address. . . . . . : 2a02:8108:45c0:263c:18a:4a6a:fb9a:3018
   Link-local IPv6 Address . . . . . : fe80::a847:a373:36ab:c040%11
   IPv4 Address. . . . . . . . . . . : 192.168.0.96
   Subnet Mask . . . . . . . . . . . : 255.255.255.0
   Default Gateway . . . . . . . . . : fe80::f2af:85ff:fea5:c6e6%11
                                       192.168.0.1

Ethernet adapter Bluetooth Network Connection:

   Media State . . . . . . . . . . . : Media disconnected
   Connection-specific DNS Suffix  . :

Ethernet adapter vEthernet (WSL):

   Connection-specific DNS Suffix  . :
   Link-local IPv6 Address . . . . . : fe80::41b:9492:2bea:cf6c%49
   IPv4 Address. . . . . . . . . . . : 172.20.208.1
   Subnet Mask . . . . . . . . . . . : 255.255.240.0
   Default Gateway . . . . . . . . . :

任何人都知道问题可能是什么? 注意:我的 wifi 显然可以访问互联网,我正在尝试从 WSL2 子系统 ping 8.8.8.8 以检查互联网连接。我正在使用 Windows Preview 版本 10.0.18956

谢谢,

【问题讨论】:

  • 您找到解决方案了吗?自从安装 wsl2 以来,我在我的一台 PC 上遇到了同样的问题,但是在我的另一台 PC 上,网络运行良好,并且都具有相同的配置,除非我遗漏了一些小细节。

标签: networking windows-10 windows-subsystem-for-linux


【解决方案1】:

我遇到了同样的问题,并且能够通过运行以下命令使其再次工作(我从其他地方得到这个,抱歉我不记得在哪里):

在wsl中

修复网络问题,删除自动生成的文件

[root@PC-NAME user]# rm /etc/resolv.conf || true
[root@PC-NAME user]# rm /etc/wsl.conf || true

启用更改 /etc/resolv.conf,启用 Windows 驱动器上的扩展属性

[root@PC-NAME user]# cat <<EOF > /etc/wsl.conf
[network]
generateResolvConf = false
[automount]
enabled = true
options = "metadata"
mountFsTab = false
EOF

使用谷歌域名服务器进行 DNS 解析

[root@PC-NAME user]# cat <<EOF > /etc/resolv.conf
nameserver 8.8.8.8
nameserver 8.8.4.4
EOF

退出 Linux WSL

在 Windows 中,以管理员身份使用 cmd:

wsl --shutdown
netsh winsock reset
netsh int ip reset all
netsh winhttp reset proxy
ipconfig /flushdns

Windows 搜索 > 网络重置

【讨论】:

  • 我跳过了最后一个网络重置部分,但其余部分仍然有效。在 ubuntu 18.04 和 20.04 上测试。
  • 不适用于 Windows Enterprise 1909 OS build 18363.1256 github.com/microsoft/WSL/issues/6427
【解决方案2】:

我花了几天时间才找到类似问题的答案... :-/ 向这个人致敬:https://github.com/microsoft/WSL/issues/5286#issuecomment-638739724

在我完成有关 /etc/resolv.conf 的所有操作后,它仍然无法正常工作,所以我的问题是关于我在笔记本电脑驱动器上打开的压缩。

解决方法是解压缩临时文件夹(除了带有 WSL 包的文件夹):

wsl --shutdown
compact /u %TEMP% /i /Q

【讨论】:

    【解决方案3】:

    我今天早些时候正在寻找有关此的信息,并且偶然发现了一个写得很好的要点,其中包含您需要的确切说明 - https://gist.github.com/pyther/b7c03579a5ea55fe431561b502ec1ba8

    其中包含有关如何在您连接或断开 VPN 时进行这些网络更改的说明。

    【讨论】:

      【解决方案4】:

      这为我解决了:

      sudo rm /etc/resolv.conf
      sudo bash -c 'echo "nameserver 8.8.8.8" > /etc/resolv.conf'
      sudo bash -c 'echo "[network]" > /etc/wsl.conf'
      sudo bash -c 'echo "generateResolvConf = false" >> /etc/wsl.conf'
      sudo chattr +i /etc/resolv.conf
      

      【讨论】:

        【解决方案5】:

        当您连接到 Cisco Anyconnect 时,WSL2 将 NAT 到最高优先级的以太网适配器。 Windows Store 中较新版本的 Cisco Anyconnect 似乎更正了这一点。但是,它不支持双重身份验证。因此,为了纠正这个问题,我将以下脚本用于 PowerShell。

        步骤:

        • 重新启动计算机(或从新开始)登录计算机,
        • 通过 Cisco AnyConnect 连接 从 Powershell 运行包含以下内容的脚本(注意:您的适配器名称可能需要更改 在第 2 行的引号中)
        Get-NetIPInterface -InterfaceAlias "vEthernet (WSL)" | Set-NetIPInterface -InterfaceMetric 1
        $VPNInterfaceName = "Ethernet 3"
        Get-NetIPInterface -InterfaceAlias $VPNInterfaceName | Set-NetIPInterface -InterfaceMetric 5001
        

        完成后打开 WSL,您应该一切顺利,除非有其他问题导致我没有遇到过的其他问题。我希望这会有所帮助,因为我们花了几天时间试图找出原因。

        编辑:确保在 Windows 终端中将“Ubunut/WSL”设置为默认配置文件,在启动 WSL 之前运行脚本。因此,如果 Ubuntu/WSL 是您的默认设置,请将您的默认设置为 PowerShell,或者切换到 PowerShell,运行命令 wsl --shutdown,然后执行上述脚本,然后重新打开 Ubuntu/WSL。

        【讨论】:

          【解决方案6】:

          我能做的最好的就是提供一个可行的例子。请注意,在我的配置中,WSL2 适配器 (eth0) 与默认网关位于不同的子网中,但当接口没有覆盖时,它仍将使用默认值。网关 IP 是由 windows 主机提供的虚拟分路接口。所以它需要匹配给windows主机的vEthernet(WSL)接口的IP。

          WSL2 重击:

          $ ifconfig
          eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
                  inet 172.31.121.217  netmask 255.255.240.0  broadcast 172.31.127.255
                  inet6 fe80::215:5dff:fe1c:7078  prefixlen 64  scopeid 0x20<link>
                  ether 00:15:5d:1c:70:78  txqueuelen 1000  (Ethernet)
                  RX packets 247038  bytes 264215849 (264.2 MB)
                  RX errors 0  dropped 0  overruns 0  frame 0
                  TX packets 81867  bytes 5902917 (5.9 MB)
                  TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
          
          
          $ ip route
          default via 172.31.112.1 dev eth0
          172.31.112.0/20 dev eth0 proto kernel scope link src 172.31.121.217
          

          从主机(cmd.exe)

          Ethernet adapter vEthernet (WSL):
          
             Connection-specific DNS Suffix  . : 
             IPv4 Address. . . . . . . . . . . : 172.31.112.1
             Subnet Mask . . . . . . . . . . . : 255.255.240.0
             Default Gateway . . . . . . . . . :
          

          在您的路由表中,您向子网添加了默认网关,而不是特定 IP。尝试更改它以匹配 vEthernet 接口:

          172.20.208.1
          

          但我会担心会弄乱 WSL2 网络,以防从现在到最终候选版本之间发生变化。我会考虑安装一个新图像并移动你的文件。或者,您可以使用 cygwin 作为 Bash 文件系统来存储您希望 WSL 访问的文件。这将保护您免受可能遭受的修改的 WSL 图像的影响,具体取决于您参与预览的时间长短。如果你走这条路,这应该会有所帮助,https://medium.com/@rcoe67/tips-for-seamlessly-using-cygwin-and-wsl-in-windows-10-9ed1a72ace6c

          【讨论】:

            猜你喜欢
            • 2021-05-26
            • 2014-01-29
            • 2011-10-19
            • 1970-01-01
            • 2020-06-01
            • 2021-07-16
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多