Linux / Windows · 2023-06-05

启用Win10的Linux子系统

建议直接使用WSL2:
https://learn.microsoft.com/zh-cn/windows/wsl/install-manual#step-4—download-the-linux-kernel-update-package

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
wsl –update –web-download
wsl –set-default-version 2

wsl –import-in-place ubuntu ubuntu.tar –user admin

/etc/wsl.conf
[boot]
systemd=true
[user]
default=username
[boot]
command=service docker start
[network]
hostname = DemoHost
generateHosts = false
generateResolvConf = false

WSL2 服务访问
由于 WSL2 与主机之间是通过私有网络访问,那么外网需要访问 WSL2 中的服务时,需要在主机设置端口转发。 例如需要访问 WSL2 中的 5000 端口时,则需在主机设置:

netsh interface portproxy add v4tov4 listenport=8899 listenaddress=* connectport=8080 connectaddress=127.0.0.1 protocol=tcp

listenport:表示在主机上监听的端口,这里设置为5000,也可设置为其他端口;
listenaddress: 表示可访问监听端口的 IP 地址范围, * 表示任意地址;
connectport:表示转发至 WSL2 的端口;
connectaddress:表示 WSL2 的地址;
CAUTION
需要注意的是:

WSL2 中的服务需监听 0.0.0.0 地址段,而不能是 localhost;
主机防火墙需设置规则,允许监听端口,否则主机外网无法访问。
TIP
另外,每次重启电脑后,WSL2 的 IP 地址会改变,笨办法就是重新再设置一次,无需删除原有规则,直接可覆盖;当然,也可以长期不重启电脑;其它网上也有很多办法,比如动态设置域名访问 WSL2 等,可自行参考。

查看端口转发命令:

netsh interface portproxy show all

删除端口转发命令:

netsh interface portproxy delete v4tov4 listenport=8899 listenaddress=*