無法從外部瀏覽器訪問WSL2 Localhost
無法從使用同一個wifi網路(LAN)的外部瀏覽器(ex:行動裝置)開啟本地WSL2虛擬機器執行的node.js伺服網頁
- localhost:3000網頁僅能在本地(電腦)瀏覽器瀏覽,無法在其他裝置(例如手機、平板)的瀏覽器瀏覽。
例如:
- 在連上同一網路的手機開啟http://172.17.10.206:3000 無法顯示網頁。 且每次重啟WSL的IP都不同。
具體原因在於WSL2會針對其虛擬網路使用網路位址轉譯 (NAT) 服務,其網路位址是動態變化的,每次重啟都會變更IP。 網路運作模式也是WSL(WSL 1)和WSL2的不同之一,使用WSL就沒有這樣的問題,參考: 使用 WSL 1 而非 WSL 2 的例外狀況。
大致上有幾種思路作為解決方式:
- A. 從WSL2"降級"至WSL。
- B. 使用netsh進行Windows端口轉發。為避免每次電腦重啟後失效,需在工作排程器加入規則腳本,參考: https://github.com/microsoft/WSL/issues/4150#issuecomment-504209723
- C. 橋接模式(Bridge Mode)。
前置作業
- 從 Windows 應用商店安裝 WSL 的預覽版( preview version of WSL)
- 在 Windows 中確認開啟 WSL和 Hyper-V、Hypervisor 路徑:應用程式->選用功能->更多Windows功能->開啟或關閉Windows功能
- 以PowerShell關閉正在執行中的WSL
指令:
wsl --shutdown
接下來要創建橋接 Hyper-V 的適配器(bridged Hyper-V adapter)
步驟
1.啟用橋接網絡。
記得先關閉正在執行中的WSL。 搜尋並開啟Hyper-V管理員,選中本機(MSI),動作 -> 虛擬交換機管理員,新增一個名為"Bridge"的虛擬交換機,連接類型為"外部網絡"。
2.建立.wslconfig 在使用者資料夾根目錄C:\Users\your username\ 中創建一個文本文件 .wslconfig,其中包含以下內容:
[wsl2]
networkingMode = bridged
vmSwitch = Bridge
#dhcp = false
#ipAddress = xxx.xxx.xxx.xxx
#macAddress = <made up mac address>
注意vmSwitch的值必須與先前創建的虛擬交換機的名稱一致。
#的參數可以視需要自行修改。
3.啟動 WSL2 (Ubuntu shell)
執行 ifconfig
或 ip addr
並檢查 IP 地址。
DHCP會從我的LAN路由器發配唯一IP地址。
電腦有可能需要再次重新啟動才能獲得唯一的IP地址。
測試執行node.js本地伺服器由外部瀏覽器打開這組唯一的IP地址,成功連線表示設定成功。
留言
張貼留言