megrxu

WSL2 端口转发

Apr 28, 2020  

最近发现很多同学都升级到了 Ubuntu 20.04 LTS,于是也就把现有的几台服务器升级了(毕竟没在跑什么需要可靠性的服务)。又发现 WSL 也可以升级了,于是就配了一下。


在 WSL2 的后续更新中,微软已经将端口转发无感集成。如果你仅使用一个 WSL 发行版,本篇所描述的方法已经在大多数场景下不再需要了。

按照官方的教程,可以看到基本上就是换一下源,并全部更新一下就好了。

用了 WSL2 之后,好像暂时没有什么性能上的可观改变,在里面打开 VSCode 还是一样的慢。然而有一天想在里面编辑一个 Hugo 主题的时候,发现原先使用的 localhost 没办法访问 WSL 了。忽然想起来好像 WSL2 好像已经是一个较为完整的虚拟机了,那网络什么的似乎应该也和主机分开了。搜索了一下,好像是这样的

那就需要在本机搞一个端口转发了。后来发现给 WSL2 分配的地址竟然也不是静态的(也不知道出于什么样的考虑)。又搜索了一下,发现一个可用的 Powershell 脚本。原理就是开 WSL 看一下这次的 IP,再把指定的一些端口转发一下。然后再使用任务计划程序Task Scheduler把这个脚本指定为每次登录时运行,就好了。

1
2
powershell.exe -ExecutionPolicy Bypass c:\scripts\wslbridge.ps1
# source: https://github.com/microsoft/WSL/issues/4150#issuecomment-504947432

直接用管理员权限运行这个命令,其实还不能让端口转发立刻生效(估摸着需要重启下防火墙之类的?)。为了测试 Task Scheduler,我就直接重启了。

WSL2 neofetch
WSL2 neofetch

Windows Terminal 开启了毛玻璃效果还不错。虽然之前一直觉得 Fluent Design 实在是有点过于前卫。


有个有趣的发现,在 WSL2 内部,$hostname.mshome.net 指向的 IP 就是 WSL2 使用的网关。