说了半天还没到实际配置,废话是不是有点多哈哈
![[吐舌]](/static/emoticons/u5410u820c.png)
安装 wsl 分两步,开启虚拟化和安装对应的 Linux 发行版
首先开启虚拟化需要在 bios 和 windows 两个地方完成:
1. BIOS 中开启 hyper-v,amd 和 intel 在 bios 中设置的位置不同,大家可以自己搜一下
2. 控制面板->程序->启用或关闭 windows 功能 ->开启 Windows 虚拟化和 Linux 子系统(WSL2)以及Hyper-V
接着是安装 Linux 发行版,没什么特殊需求的话就用 Ubuntu,用的人最多,现在安装发行版也比以前简单得多,直接去 Microsoft Store 里搜索 Ubuntu 下载想要的版本就好(我选择的是 Ubuntu 24.04.1 LTS),除了 Ubuntu 以外同时下载一个终端预览,相比默认的 cmd 或者 power shell 更好用,安装完成后终端上点击 + 旁边的小箭头,直接能看到我们安装的 Ubuntu,第一次打开会让创建一个用户,按自己喜好创建就好,别忘了密码
写到这里停下来看看自己写的又感觉太简略了
![[黑线]](/static/emoticons/u9ed1u7ebf.png)
不过这段没图我就是写的再仔细也写不清楚,大家还是搜一搜 wsl 安装教程来装一下,我就站在巨人的肩膀上继续讲讲 wsl 的坑
wsl 的一个坑就在于其默认的网络模式是 nat,这个默认模式下 wsl 会将 windows 机器作为网关,也就是所有的应用都要先通过 windows 然后再向目标服务器发起请求,那对于我们的影响就是有两点
1. wsl 上起的服务隐藏在 nat 后,会导致服务的连通性变差,我虽然没测试过,但是我猜 qb/tr 等下载器在 nat 后是没法连到站点的,(除非 wsl 能配置端口转发,然后路由器再来一层转发
![[狂汗]](/static/emoticons/u72c2u6c57.png)
),而且也不好对外提供服务
2. 最捞的一点,nat 模式下 wsl 每次重启这个子网地址都会随机变化,导致你配置的代理每次重启都失效,我之前是自己写了个脚本检测网关变化,然后每次自动修改 zsh,docker 还有个什么的包管理器配置的代理地址,然后重装系统没备份
![[喷]](/static/emoticons/u55b7.png)
不想重写这玩意了
3. 升级 win11 之后我发现最新的 wsl 版本有一个提示,如果你开启了代理,他就会提示你 "检测到 localhost 代理配置,但未镜像到 WSL。NAT 模式下的 WSL 不支持 localhost 代理。" 这个提示非常很烦人,而且这个问题不要去网上搜解决办法,按照我后面说的办法来解决,到时候会解释
-----------太长了分个行-------------
当我们安装好 Ubuntu 并且看到 "检测到 localhost 代理配置,但未镜像到 WSL。NAT 模式下的 WSL 不支持 localhost 代理。" 这个提醒的时候很有可能会在网上搜索一下,然后就会看到清一水的教程让我们修改 wslconfig 配置文件,把网络模式改成 mirror 再加一个 autoproxy,这个是 wsl 更新之后才有的,但是不要这么改,因为我实测用了这个模式之后没法给局域网用户提供服务,所有的服务只能本机访问 (甚至只能 127.0.0.1 访问,本机 ip 都不行,除非你加另一个配置 hostAddressLoopback 把所有本机地址都映射到 locahost,但是局域网还是不能访问这些服务)。
因此我们选择第三种网络模式,也就是 bridge 模式,通过这种模式配置我们把 wsl 摆在和 windows 齐平的位置上,配置方法如下(觉得全是字不直观的话也可以去搜一下,教程很多):
首先在 Hyper-V 管理器中创建一个虚拟交换机,在 Actions -> Virtual Switch Manager -> New virtual network switch,选择外部网络和对应的网卡,名字叫做 wslBridge 即可
接着在 /mnt/c/Users/{用户}/ 目录下创建一个 .wslconfig 文件,添加以下内容:
----------------
[wsl2]
networkingMode=bridged
vmSwitch=wslBridge
----------------
重启 wsl 即可,这时路由器会将其认为是一个独立的设备并为其分配 ip,因此只需要将代理 ip 配置为 windows ip(注意在 windows 防火墙上开一个入站规则,允许访问代理端口)
最好通过路由器设置为 wsl 绑定一个静态 ip,方便之后访问服务