跳到主要內容

WSL2 鏡像網路模式

要讓外部設備(如同區域網路內的其他電腦或手機)連線到你 WSL 2 裡面的服務,主要會遇到一個數位高牆:WSL 2 預設使用的是虛擬 NAT 網路。這意味著 WSL 有自己獨立的內部 IP,外部世界只看得到你的 Windows 主機,看不到裡面的 WSL。

為了解決這個問題,目前有兩種最主流且有效的方法。


方法一:使用「鏡像網路模式」(最推薦,最簡單)

微軟在較新版本的 WSL 2 中引入了 Mirrored(鏡像)網路模式。開啟後,WSL 2 會直接共享 Windows 主機的網路介面與 IP 位址,外部程式只要連線到你的 Windows IP,就等於直接連到 WSL。

設定步驟:

  1. 在 Windows 中打開你的使用者資料夾(路徑通常是 C:\Users\<你的用戶名>\)。
  2. 檢查有沒有一個叫 .wslconfig 的檔案,如果沒有,請手動建立一個。
  3. 編輯該檔案,加入以下內容:
[wsl2]
networkingMode=mirrored
  1. 儲存檔案後,打開 Windows PowerShell,輸入以下指令重啟 WSL 讓設定生效:
wsl --shutdown

重啟後,你在 WSL 裡啟動的服務(例如連接埠 8080),外部設備直接連線到你的 Windows_IP:8080 就能成功存取!


方法二:使用 Port Forwarding(連接埠轉發)

如果你因為特定原因不想開啟鏡像模式,傳統的方法是透過 Windows 的 netsh 指令,把傳送到 Windows 特定連接埠的流量,「轉寄」給 WSL 的內部 IP。

設定步驟:

  1. 查詢 WSL 的內部 IP: 在 WSL 終端機中輸入 hostname -I,你會得到一串類似 172.x.x.x 的 IP。
  2. 設定轉發(需以系統管理員權限打開 PowerShell): 假設你想把外部連向 Windows 8080 連接埠的流量,轉給 WSL 的 8080 連接埠:
   netsh interface portproxy add v4tov4 listenport=8080 listenaddress=0.0.0.0 connectport=8080 connectaddress=<你的WSL_IP>

注意:因為 WSL 每次重啟 IP 都可能會變動,如果用這個方法,每次 WSL 重啟後都需要重新執行此指令更新 connectaddress


關鍵最後一步:放行 Windows 防火牆

無論你選擇上述哪一種方法,Windows 防火牆預設都會擋下外部進來的連線。你必須手動開啟對應的連接埠。

快速設定(以管理員權限打開 PowerShell):

執行以下指令,允許外部連入指定的連接埠(以 8080 為例):

New-NetFirewallRule -DisplayName "WSL_Service_8080" -Direction Inbound -Action Allow -Protocol TCP -LocalPort 8080

留言