无法从WSL2访问网络

时间:2019-08-23 21:53:07

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

我无法从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显然可以访问Internet,并且我正在尝试从WSL2子系统ping 8.8.8.8以检查Internet连接。我正在使用Windows Preview版本10.0.18956

谢谢

6 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

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

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

修复是解压缩临时文件夹(除了包含 WSL 包的文件夹):

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

答案 2 :(得分:1)

当您连接到Cisco Anyconnect WSL2时,它将NAT到最高优先级的以太网适配器。 Windows应用商店中更新版本的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。

答案 3 :(得分:0)

我能做的就是提供一个可行的例子。请注意,在我的配置中,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

答案 4 :(得分:0)

我遇到了同样的问题,并且可以通过运行以下命令使它再次运行(我从其他地方获得此命令,对不起,我不记得在哪里了):

在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

使用Google名称服务器进行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搜索>网络重置

答案 5 :(得分:0)

这为我解决了:

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