# 在Windows 11安裝WLS

### 安裝WLS

開啟 PowerShell（以系統管理員身分）

```bash
wsl --install -d Ubuntu-24.04
```

※ wsl安裝成功後，有可能會發生在安裝Ubuntu-24.04報錯誤沒安裝成功，另一台新機遇到的問題是home版會提示vt沒開，我來是重開機後就好了

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

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

#### 關聯port

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

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

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

使用 PowerShell（以系統管理員身分）

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

確認建立規則

```bash
netsh interface portproxy show all
```

刪除

```
netsh interface portproxy delete v4tov4 listenport=81 listenaddress=0.0.0.0
```

開通 81 PORT 防火牆

```bash
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（以系統管理員身分）

列出

```bash
wsl -l -v
```

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

移除

```bash
wsl --unregister Ubuntu-24.04
```

### 其他

#### 自動更新 WSL2 IP 的 PowerShell 腳本

```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)

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

 動作選「啟動程式」，程式輸入：

```bash
powershell
```

參數輸入：

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

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