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 使用的閘道器。