了解 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:9090
和export https_proxy=172.19.21.17:9090
设置环境变量, 可以通过curl https://www.google.com
是否能得到正常网页的 HTML 来判断是否成功. 如果使用sudo
命令, 则需要使用envkeep
保证相应的环境变量被保留.
备注: 尚未研究 SSH 的代理. 可以参考:
端口转发
从局域网访问主机上的 WSL 2, 可以参考; 因本人暂无需求, 故尚未研究. 下面仅备注一些可能相关的链接.
Windows 10 WSL 2 网络配置 | ruihusky’s Blog
File System
虽然 Windows 的文件系统挂载在了 WSL 2 上, Windows 中也可以直接在资源管理器中访问 WSL 2 上的文件系统. 但是建议, 在可能的情况下, 还是将文件放在 WSL 2 中处理, 尽量不要跨系统进行操作.
Misc
- WSL 2 踩坑分享 - xiabee
- How do I get back unused disk space from ubuntu on wsl2? - Super User
- Get started mounting a Linux disk in WSL 2 | Microsoft Docs
- Connect USB devices | Microsoft Docs
-
#WSL 中获取宿主机 IP - WSL 2 中访问宿主机 Windows 的代理 - ZingLix Blog 以及 Accessing network applications with WSL - Microsoft Learn ↩︎
-
来自 WSL 2 的一些网络访问问题 | Artin’s Blog (bytem.io), 引用自 Issue #4585 · microsoft/WSL. 前者还提到了使用 TUN 模式代理整张网卡的流量. ↩︎
-
WSL 2 来了! 但是能正常使用并不简单 - Wizcas - 知乎 (Also available at 0x1C.dev); 该文章参考了 在 WSL 2 中访问主机代理 - Geek 成长路 (rogerkung-win.top). ↩︎
Last modified on 2022-05-19