跳到主內容

在Windows 11安裝WLS

安裝WLS

開啟 PowerShell(以系統管理員身分)

wsl --install -d Ubuntu-24.04

※ 如果發生錯誤沒成功,重開機後才能成功

安裝後會詢問要使用什麼帳密,可直接用目前登入windows用的帳密會比較好記

登入後是空空全新的Ubuntu Linux環境,你可以針對需求進行安裝及設定

關聯port

進入UbuntuLinux後,會看到IP是隨機的net (外面不能連入)

假設我在 Ubuntu 裝好 nginx port 用 80,我在本機輸入隨機IP 172.26.94.32,就能看到Nginx的畫面

我想要讓外面的連入,要這樣做

使用 PowerShell(以系統管理員身分)

netsh interface portproxy add v4tov4 listenport=81 listenaddress=0.0.0.0 connectport=80 connectaddress=172.26.94.32

確認建立規則

netsh interface portproxy show all

刪除

netsh interface portproxy delete v4tov4 listenport=81 listenaddress=0.0.0.0

開通 81 PORT 防火牆

netsh advfirewall firewall add rule name="WSL2 Port 81" dir=in action=allow protocol=TCP localport=81

檢查是否生效

netsh advfirewall firewall show rule name="Allow WSL2 Port 81"

移除WLS

使用 PowerShell(以系統管理員身分)

列出

wsl -l -v

  NAME              STATE           VERSION
* Ubuntu-24.04      Running         2
  docker-desktop    Running         2

移除

wsl --unregister Ubuntu-24.04

其他

自動更新 WSL2 IP 的 PowerShell 腳本

# ================================
# WSL2 PortProxy 自動更新腳本
# ================================

# 設定對外端口 (Windows listen port) 與內部端口 (WSL2 connect port)
$ListenPort  = 81
$ConnectPort = 80

# 抓取 WSL2 當前 IP
$wsl_ip = wsl hostname -I | ForEach-Object { $_.Trim() } | Select-Object -First 1

if (-not $wsl_ip) {
    Write-Host "❌ 無法取得 WSL2 IP,請確認 WSL2 已啟動。" -ForegroundColor Red
    exit
}

Write-Host "✅ 偵測到 WSL2 IP: $wsl_ip" -ForegroundColor Green

# 移除舊規則(避免重複)
netsh interface portproxy delete v4tov4 listenport=$ListenPort listenaddress=0.0.0.0 > $null 2>&1

# 新增新的 PortProxy 規則
netsh interface portproxy add v4tov4 listenport=$ListenPort listenaddress=0.0.0.0 connectport=$ConnectPort connectaddress=$wsl_ip

# 確保防火牆允許該 Port
netsh advfirewall firewall add rule name="WSL2 Port $ListenPort" dir=in action=allow protocol=TCP localport=$ListenPort > $null 2>&1

Write-Host "✅ PortProxy 已更新: 0.0.0.0:$ListenPort → $wsl_ip:$ConnectPort" -ForegroundColor Cyan

執行

powershell -ExecutionPolicy Bypass -File C:\Users\你的帳號\update-wsl-port.ps1

開機自動執行

    開啟 工作排程器 (taskschd.msc)

    建立基本工作 → 觸發器選「當登入時」

    動作選「啟動程式」,程式輸入:

powershell

參數輸入:

-ExecutionPolicy Bypass -File C:\Users\你的帳號\update-wsl-port.ps1

✅ 這樣你就不用擔心 WSL2 IP 每次重開會變,永遠能透過 http://192.168.0.168:81/ 存取。