01

先決定要用哪種網路模式

WSL2 預設是 NAT 模式,發行版和 Windows 不共用回送位址,所以在 WSL 裡填 127.0.0.1 加連接埠一定連不上。這是最常見的踩坑點。

較新的 Windows 11 支援鏡像網路模式:在使用者目錄的 .wslconfig 裡替 wsl2 段加上 networkingMode=mirrored,重新啟動 WSL 之後 127.0.0.1 就能直接用,這是最省事的做法。留在 NAT 模式的話,得用 Windows 主機在 WSL 網段裡的位址,而且必須開啟「允許區域網路連線」,否則核心只監聽回送位址,外面根本連不進來。

防火牆是第一嫌疑
啟用區域網路連線後 Windows 會跳一次防火牆提示,沒放行的話後面所有步驟都白做。

合作推薦訂閱連結從哪來?本站合作機場註冊即送 1GB 香港高速體驗流量,可直接一鍵匯入。取得高速節點
02

分四步接上

  1. 1

    開啟允許區域網路連線

    在 Clash 設定裡啟用。第一次開啟時 Windows 防火牆會跳出視窗,至少要允許私人網路。

  2. 2

    NAT 模式下取得主機位址

    在 WSL 裡執行 ip route show default,輸出的第三個欄位就是 Windows 主機位址。把它寫進 https_proxy。這個位址每次重新啟動 WSL 都可能改變,建議在 .bashrc 裡動態取得,別寫死。

  3. 3

    Docker Desktop 的代理設定

    在設定的 Resources - Proxies 裡手動填 http://host.docker.internal 加連接埠。注意這一項只影響映像檔拉取與建置時的網路,容器裡執行的程式不受它管。

  4. 4

    容器內部

    docker run 時用 -e 傳 HTTPS_PROXY 與 HTTP_PROXY,或在使用者目錄的 .docker/config.json 裡設定 proxies 段作為預設值。同時把 localhost 與內部倉庫加進 noProxy。

03

兩邊分別驗證

在 WSL 裡 curl 一次 ipinfo.io/ip,回傳節點 IP 就成了。Docker 側用一個帶 curl 的暫時容器測同一個位址,能出結果代表容器的代理變數也生效了。兩邊要分開測,WSL 通不代表容器通。

  • 鏡像模式與 NAT 模式的設定不能混用,換模式後要改回送位址
  • 改完 .wslconfig 需要 wsl --shutdown 再啟動才生效
  • 拉取鄰近地區的映像檔時把倉庫位址加進 noProxy,否則反而更慢
04

常見問題

開了 TUN 模式,WSL 還需要另外設定嗎?

看網路模式。鏡像模式下通常能自動接管;NAT 模式下 WSL 走的是 Hyper-V 虛擬交換器,很可能繞過 TUN 網路卡,還是設定環境變數最穩。

WSL 裡昨天還能用,今天連不上了?

先看主機位址是不是變了。NAT 模式下這個位址會隨 WSL 重新啟動而改變,寫死在設定裡就會失效,改成每次啟動時動態取得。