这两天通过在win10
上启用了wsl
的能力,并安装了Ubuntu
, 具体的操作过程,网上已经非常多了,这篇文章主要记录两个点:
linux
子系统通过windows
代理上网linux
包的后缀由.Appx
改为.zip
,并解压到想要安装到的路径下。Ubuntu20
为例,解压后的目录如下 ,双击ubuntu2004.exe
,等待一会,它会自动在此目录下安装好ubuntu
windows
代理上网win10
是可以直接通过localhost
来访问wsl2
的, 但是wsl2
想访问Win10
就没有那么容易了。
wsl2
中获取win10
的ip
地址因为在`win10`和`wsl2`的网络环境中,`ip`地址是动态分配的,所以在`wsl2`想查看`win10`的地址需要通过如下的方式
```bash
$ cat /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.18.176.1
```
win10
和wsl2
互通# 查看wsl2的ip地址
$ ip route
default via 172.25.176.1 dev eth0
172.25.176.0/20 dev eth0 proto kernel scope link src 172.25.176.47
在windows
里执行下面的测试:
# win10 ping wsl2 顺利
C:\Users\xingmu> ping 172.25.176.47
正在 Ping 172.25.176.47 具有 32 字节的数据:
来自 172.25.176.47 的回复: 字节=32 时间<1ms TTL=64
来自 172.25.176.47 的回复: 字节=32 时间<1ms TTL=64
来自 172.25.176.47 的回复: 字节=32 时间<1ms TTL=64
来自 172.25.176.47 的回复: 字节=32 时间<1ms TTL=64
172.25.176.47 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 0ms,最长 = 0ms,平均 = 0ms
在linux
执行如下的测试:
# wsl2 ping win10 不通
$ ping 172.25.176.1
PING 172.25.176.1 (172.25.176.1) 56(84) bytes of data.
以下内容来自这里 ,侵删
首先暴力关闭 window10
的防火墙,然后再次 ping
宿主机。
所以可以确定就是宿主机防火墙拦截了宿主机的 ICMP
的回显,为了方便 WSL2
与宿主机进行无障碍沟通,我们可以禁用防火墙,但是很显然这样宿主机就完全暴露在公网之上,安全性无疑就大大折扣,所以最佳的做法就是我们添加一条入站规则: 仅允许 WSL2
所在的网段主机对宿主机进行无障碍访问 。
上图涉及到子网的计算,不会的小伙伴自己补课,或者使用一些在线的 网络和IP地址计算器 来计算。
到这里就创建好了,我们只需启用规则然后就可以无障碍的访问宿主机了。
可以看到此时宿主机已经可以被 PING
通。此时 主机提供的 任何对外的网络服务 WSL2 均可以访问。因为我们只是对网络地址做了限制,并没有限制协议、端口等。
上网软件需要设置允许来自局域网的连接。
我用的上网软件如下图所示。
这一步是最重要的一步, 需要在`Win10`防火墙中允许上网软件(`txxxxn`、`Vxxxy`)进行公用和专用网络的访问,只要设置这个就可以了, 不需要调整过其他设置。
wsl2
的代理# 获取主机 IP
#主机 IP 保存在 /etc/resolv.conf 中
export hostip=$(cat /etc/resolv.conf |grep -oP '(?<=nameserver\ ).*')
假设 Windows
上的 代理软件已允许局域网连接,http
监听在 8888
端口,SOCKS5
代理监听在 8889
端口,设置终端代理的方法与以往相同:
export https_proxy="http://${hostip}:8888";
export http_proxy="http://${hostip}:8888";
export all_proxy="socks5://${hostip}:8889";
为了方便日常使用,可以将以上命令保存为 alias
。添加以下内容到 ~/.bashrc
或者 ~/.zshrc
:
export hostip=$(cat /etc/resolv.conf |grep -oP '(?<=nameserver\ ).*')
export https_proxy="http://${hostip}:8888";
export http_proxy="http://${hostip}:8888";
export all_proxy="socks5://${hostip}:8889";
之后就可以在 WSL 2
中使用 setss
设置终端代理。
以下内容来自这里 ,侵删
在使用 WSL2
进行软件更新的时候经常超级慢(已更换了国内源的前提下),经过一番排查发现是 DNS
的问题,当使用自定义的 DNS
时,域名解析的速度明显快了很多。
不过 WSL2
的默认域名解析服务和普通的 Linux
略微有不同,下面解释一下:
熟悉 Linux
的都知道 DNS
服务器的配置信息是在 /etc/resolv.conf
文件中,默认情况下,微软在每次启动 WSL2
都会重新根据宿主机 WSL
网卡的地址(例如:172.25.176.1
)为 wsl2
实例生成这个文件,且指定 DNS
服务器的地址为宿主机 WSL
网卡的地址(例如:172.25.176.1
)。
所以要想使用自己指定的 DNS
服务,来加快解析,就需要先禁用掉自动生成策略,仔细读上图会发现,官方已经给出了禁用自动生成方法。
即创建 /etc/wsl.conf
,且内容如下:
[network]
generateResolvConf = false
然后删掉 /etc/resolv.conf
(因为自动生成的为一个软连接),并重新建一个 /etc/resolv.conf
文本文件,并将其 DNS
服务器地址指定为自己想用的,如下:
# generateResolvConf = false
nameserver 223.5.5.5
点击这里查看DNS的知识,选择合适的DNS服务器
https://www.link2sea.com/archives/496
https://blog.csdn.net/swordsm/article/details/107948497