使用 WSL 2 进行工作
WSL 2 安装以及使用过程中的一些注意事项.

了解 WSL 2

可以查看微软文档上的 适用于 Linux 的 Windows 子系统文档 - Microsoft Docs, 接下来也会引用其中的一些页面.

微软文档可以切换语言, 如有需要点击页面上的 🌐 语言切换图标即可.

为什么使用 WSL? : 为什么这么多人吹 WSL? - 知乎

安装 Installation

首先是安装 WSL 2, 参考微软文档 使用 WSL 在 Windows 上安装 Linux 即可.

安装完成后是 设置 WSL 开发环境, 可以根据自己的需要参考文档中的相关部分进行设置.

Networking

最主要的是网络问题. 一般日常工作需要, 需要 WSL2 和主机能够互相访问.

WSL 2 作为 Hyper-V 虚拟机运行, 不同于 WSL 1 的桥接, 其使用网络地址转换 (NAT) 服务作为其虚拟网络 1. 因此, 主机和 WSL 2 需要首先得知对方在该虚拟网络下的 IP 地址才能互相通信. 需要注意, 每次重启主机, 该 IP 地址都会发生变化.

可以通过下面的方法获取主机和 WSL 2 的 IP 2:

在运行的 WSL 2 上, 可以通过访问 /etc/resolv.conf, 从而得知主机在该网络下的地址:

$ 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.21.160.1
$ cat /etc/resolv.conf | grep nameserver | awk '{ print $2 }
172.21.160.1

可以通过 hostname -I 得到 WSL 2 的 IP.

$ hostname -I | awk '{print $1}'
172.21.172.66 

但是, 要想 WSL 2 成功访问主机, 还需要主机放开防火墙规则. 可以参考下面的 PowerShell 命令 (需要管理员权限) 3, 解除 Windows 主机上针对 WSL 虚拟网卡的防火墙规则:

# 直接放开 `vEthernet (WSL)` 这张网卡的防火墙
New-NetFirewallRule -DisplayName "WSL" -Direction Inbound -InterfaceAlias "vEthernet (WSL)" -Action Allow

Proxy

从前文可以看出, WSL 2 的网络配置略显复杂, 因此可以优先考虑直接在 WSL 2 上运行代理程序.

WSL 2 对主机上程序的访问, 相当于来自局域网的访问. 因此, 需要让代理软件侦听主机在 WSL 2 局域网中的地址. 同时, 除了前文说到的 放行 WSL 2 的网卡 外, 还需要 允许代理软件通过防火墙 4.

之后, 便可以在 WSL 2 上使用主机上的代理了.

比如有个 HTTP/HTTPS 代理跑在主机的 9090 端口, 那么就是先查到主机在 WSL 2 局域网里的 IP, 比如说 172.19.21.17, 先确保代理软件侦听这个地址 (也可以无脑 0.0.0.0, 但是需要确保是安全的局域网), 然后尝试使用 export http_proxy=172.19.21.17:9090export https_proxy=172.19.21.17:9090 设置环境变量, 可以通过 curl https://www.google.com 是否能得到正常网页的 HTML 来判断是否成功. 如果使用 sudo 命令, 则需要使用 envkeep 保证相应的环境变量被保留.

备注: 尚未研究 SSH 的代理. 可以参考:

wizcas/wsl2proxy - github.com

端口转发

从局域网访问主机上的 WSL 2, 可以参考; 因本人暂无需求, 故尚未研究. 下面仅备注一些可能相关的链接.

如何在局域网的其他主机上中访问本机的 WSL2 - 知乎

Windows 10 WSL 2 网络配置 | ruihusky’s Blog

File System

虽然 Windows 的文件系统挂载在了 WSL 2 上, Windows 中也可以直接在资源管理器中访问 WSL 2 上的文件系统. 但是建议, 在可能的情况下, 还是将文件放在 WSL 2 中处理, 尽量不要跨系统进行操作.

Misc


Last modified on 2022-05-19