開發者工具 · · 約 17 分鐘閱讀

WSL2 終端走 Windows Clash:鏡像網路與 localhost 代理實測(2026)

許多人在 Windows 上已用圖形客戶端跑 Clash,接著在 WSL2 裡開終端機跑 aptgitcurlnpm,卻發現怎麼設代理都不生效,或誤以為在 WSL 裡打 127.0.0.1 就會碰到 Windows 上的監聽埠。實情是:WSL2 有自己的虛擬網路命名空間,預設情況下「Linux 這一側的迴環位址」與「Windows 桌面那側的迴環位址」並不是同一個介面。本篇以實測取向整理:如何取得Windows 宿主機在 WSL 視角下的可路由位址、何時可以談鏡像網路(Mirrored)localhost 轉發、以及 Clash mixed-port終端環境變數該怎麼對齊。與站內Docker 容器走宿主機 Clash一文分工:Docker 偏重容器 bridge、HTTP_PROXY 與閘道;本文專注在WSL2 與 Windows 之間的位址關係WSL 內終端出站,不重複容器網路的細節。

1. 為什麼 WSL2 裡的 127.0.0.1 多半不是 Windows 上的 Clash

WSL2 是以輕量虛擬機方式運行 Linux 核心,對使用者來說雖然「好像就在同一台電腦上」,但在網路堆疊上,WSL 裡的 127.0.0.1 指的是這個 Linux 環境自己的迴環介面,而不是你在 Windows 工作階段裡開啟的 Clash 監聽埠。也因此,常見的錯誤直覺是:「我在 Windows 上看到 Clash 聽在 127.0.0.1:7890,那我在 WSL 裡也打同一個位址不就好了?」——在預設網路模式下,這通常不會接到你以為的那個服務。

要把 WSL 裡的終端代理流量送到 Windows 上已運行的 Clash,核心問題其實只有一句話:從 WSL 發出的 TCP 連線,要送到「Windows 宿主機在該路由環境下可達的那個 IP」上的 mixed-port(或你設定的 HTTP/SOCKS 埠)。接下來的章節會說明如何穩定取得這個位址,以及微軟較新的鏡像網路選項如何改變這個故事。

2. 取得 Windows 宿主機 IP:預設 WSL2 最常用的兩種查法

傳統/預設的 WSL2 網路模型下,實務上最常見的做法是先找出「WSL 視角下,通往 Windows 的那個下一跳」。許多教學會請你查看 /etc/resolv.conf 裡的 nameserver,在不少組態中它會落在私有網段(例如 172.x.x.x),並且可當成 Windows 宿主機位址來連線測試。另一個常見做法是看預設路由:ip route show default 顯示的 default via 位址,往往與你需要的宿主機位址一致或高度相關。

為什麼這裡要強調「實測」?因為 WSL 版本、Windows 版本、是否安裝過第三方虛擬網卡或 VPN、以及公司網路政策,都會讓檔案內容與路由表長得不一樣。最穩健的習慣是:每次懷疑位址過期,就用同一套指令重新確認,再用 curl -v 對你的代理埠做一次最小連線測試。

範例:查預設閘道與名稱伺服器(請依環境解讀輸出)

# default gateway (often the Windows host from WSL's perspective)
ip route show default

# resolver file (nameserver line is a common hint on many setups)
grep -E '^nameserver' /etc/resolv.conf

取得位址後,把代理 URL 寫成類似 http://<HOST_IP>:<MIXED_PORT>(實際埠號以你的 Clash 設定為準)。若你接下來要開啟 allow-lan 讓 WSL 能連進來,請同步閱讀站內 allow-lan 與區網暴露相關說明,避免為了開發方便而把監聽範圍擴大到不必要的網段。

3. 鏡像網路模式:什麼時候 localhost 變得「比較像同一台」

微軟在較新的 Windows/WSL 版本上推進鏡像網路(Mirrored networking)等能力,目標之一是讓 WSL 與 Windows 的網路視角更一致。在啟用並符合條件的情況下,使用者會感覺到:localhost/埠轉發相關行為更接近「同一台機器上互連」的直覺,對開發者來說可減少一些手動查 IP 的心智負擔。

但實務上仍建議你把鏡像模式當成加速器與可選優化,而不是萬靈丹:不同版本文件與實際行為可能演進,且你的環境可能還有 VPN、Hyper-V、其他虛擬網卡參與路由決策。最穩的落地方式是:先能用「宿主機 IP + mixed-port」走通,再視需要研究鏡像模式是否能簡化你的團隊工作流程。

若你同時在調整 Windows 11 上的 Clash 圖形客戶端與系統代理/TUN,建議搭配 Windows 11 上 Verge Rev 首次設定一文,先把宿主機側的模式選擇與權限流程釐清,再回到 WSL 端對位址與埠。

4. Windows 端 Clash:mixed-port、綁定位址與 allow-lan

無論你用哪種方式從 WSL 連到 Windows,Windows 上的 Clash 必須在「WSL 連得到的那個介面」上開放埠。多數圖形客戶端會提供 mixed-port(同時承載 HTTP 與 SOCKS 的常見做法之一),但你仍要確認兩件事:第一,埠號沒有和其他軟體衝突;第二,若你只綁 127.0.0.1,則只有 Windows 本機迴環可連,WSL 這類跨命名空間的來源常常會被拒於門外。

因此實測時常會看到需要開啟允許區域網路/LAN 存取(常見設定名稱如 allow-lan),讓監聽不只侷限在迴環。這會連帶帶來安全邊界問題:你的代理埠在信任網域之外是否可被接觸,應搭配防火牆與使用情境評估。這與「把服務暴露給整個區網」是同一枚硬幣的兩面,請不要只在開發機上複製貼上關鍵字而忽略風險。

5. WSL 內設定終端代理:環境變數與工具鏈差異

當 Windows 端的埠與監聽範圍確認無誤後,WSL 內最常見的做法是設定 HTTP_PROXYHTTPS_PROXY,必要時再加上 ALL_PROXY(視工具是否讀取)。許多使用者會把這些變數寫進 ~/.bashrc~/.zshrc 或 fish 的設定檔,並用一段可切換的函式包起來,避免永遠強制走代理導致內網或本機服務被誤送。

apt 在部分發行版上會遵循環境變數,但也可能受 Acquire::http::Proxy 等設定影響;git 除了環境變數,也可能使用 http.proxy 設定;npmpnpmyarn 各有自己的設定入口與快取行為。換句話說:「我在 shell 裡 export 了」只解決了一部分工具,遇到頑固案例時要回頭確認該工具到底讀哪一層設定

最小範例(請替換 IP 與埠號)

export HTTP_PROXY=http://172.24.160.1:7890
export HTTPS_PROXY=http://172.24.160.1:7890
export ALL_PROXY=socks5://172.24.160.1:7890
# 172.24.160.1 is a placeholder; use your measured host IP

也請保留合理的 NO_PROXY:例如本機開發站、公司內部網域、容器 registry 等,避免「外網走代理沒問題,內網反而全炸」的體感。若你同時在 Windows 上用 Docker Desktop,並且需要容器內連宿主機代理,請改參考站內 Docker 容器走主機 Clash:那篇文章的閘道與 bridge 視角與 WSL2 終端不完全相同,混用時最忌「把同一個位址硬套到兩種環境」。

6. resolv.conf、DNS 與 Fake-IP:別把「能 ping」當成「規則有命中」

另一個高頻混淆點是:DNS 解析發生在哪裡。WSL 內的 /etc/resolv.conf 可能由系統自動生成,顯示的名稱伺服器位址常被拿來當「宿主機提示」,但它不等於告訴你「所有應用程式的 DNS 都一定會經過 Clash 的 DNS 模組」。當你在 Clash/mihomo 裡啟用 Fake-IP 或自訂上游 DNS 時,Windows 與 WSL 兩邊的解析路徑如果不一致,會出現典型症狀:瀏覽器看起來正常,終端機裡某個工具卻一直連到「不像你想像的那個網域/IP」

這類問題的處理原則是:先確認TCP 連代理埠是否成功(網路層是否到達 Windows),再分開處理名稱解析規則命中。把兩件事混成同一個「我猜是 DNS」會大幅拉長除錯時間。

7. 連不通時的排查順序(建議照順序做)

下面這份順序是實務上最省時間的路徑: 先確認 Windows 上 Clash 正在運行,且 mixed-port 的埠號與你 WSL 內使用的相同; 確認監聽不是只綁 127.0.0.1(必要時調整 allow-lan/綁定位址策略); 在 WSL 內重新量測宿主機 IP(不要沿用幾天前的舊值);curl -vhttp://<HOST_IP>:<PORT> 做最小化連線,觀察是 Connection refused、逾時、還是代理握手錯誤; 再看工具是否真的讀了 HTTP_PROXY 最後才進入 DNS/Fake-IP/規則命中的交叉比對。

其中 Connection refused 多半代表位址對了但服務沒聽被本機防火牆擋;長時間逾時則更像路由不可達錯誤的 IP。把錯誤訊息分桶後再對症下藥,會比一次改十個設定更有效。

訂閱與規則仍不確定時

若 Windows 端 Clash 尚未完成訂閱匯入或策略組仍在調整,建議先到 訂閱匯入教學把基底補齊。WSL 端只是把終端流量接到已存在的那台 Clash,無法替代訂閱、規則與節點品質本身。

8. 與 Docker 宿主機代理文的差異(何時改看另一篇)

若你的主要痛點是 Docker 容器內連線、host.docker.internal、或 Linux bridge 上的閘道路由,請優先閱讀 Docker 容器走主機 Clash。該文處理的是容器網路命名空間映像建置/Compose的脈絡;本篇則處理 WSL2 Linux 使用者空間如何把 CLI 流量送到 Windows。兩者都可能用到 HTTP_PROXY,但「宿主機」在路由表裡指到的物件常常不是同一個位址,這也是實務上最容易複製貼上失敗的原因。

寫在最後

WSL2 當成「另一台 Linux」來理解網路,很多看似玄學的問題會立刻變得可拆解:跨命名空間的位址監聽綁定工具鏈是否讀環境變數、以及 DNS 與規則是否在同一條管線上。相較於介面停滯、觀測困難的舊工具,持續演進的 Clash 生態在日誌與規則調整上通常更利於開發者反覆驗證;當 Windows 端先把 mixed-port 與監聽範圍站穩,你在 WSL 裡跑套件管理器與 Git 時,也比較不會陷入「改 A 壞 B」的循環。

若你希望用同一個安裝包完成訂閱匯入、系統代理或 TUN、以及後續規則微調,建議從本站 下載頁取得適合 Windows 的用戶端,先把宿主機側的監聽與安全邊界確認無誤,再回到 WSL 對齊 IP 與環境變數。當你準備好把終端機流量與 Clash 日誌對照一次,現在即可開始:→ 立即免費下載 Clash,開啟流暢上網新體驗

依主題相關度匹配的延伸閱讀,涵蓋同分類下的實戰配置文章。