進階技巧 預計閱讀 12 分鐘

GitHub Copilot CLI 無法連線?v2rayN 終端代理排查法

GitHub Copilot CLI 登入失敗、要求逾時或出現連線錯誤時,問題往往不是 v2rayN 節點本身,而是終端機沒有套用系統代理。本文以實際排查流程檢查 HTTP_PROXY、HTTPS_PROXY、分流規則、DNS、TUN 模式與核心日誌,協助恢復 Copilot CLI 的正常使用。

v2rayN 已經連上節點,瀏覽器也能正常開啟網站,但在終端機執行 GitHub Copilot CLI 時,仍可能遇到登入失敗、授權頁面無法開啟、API 請求逾時或反覆重試。這種情況通常不是節點本身完全失效,而是瀏覽器使用了系統代理,終端機程序卻沒有讀取相同的代理設定;也可能是分流規則把登入網域、API 網域或 DNS 請求送到了不合適的出站。

Copilot CLI 的連線鏈路涉及終端機環境變數、Node.js 或其他執行時期的代理支援、v2rayN 本機 SOCKS/HTTP 連接埠、Xray 路由規則、DNS 解析,以及 GitHub 認證服務的實際網域。排查時不要只在 v2rayN 主視窗測試節點延遲,也不要一開始就切換多個核心參數。應先確認命令列是否真的把流量交給 v2rayN,再逐步縮小到代理格式、分流和 DNS。

本文速覽

本文針對「v2rayN 已連線、GitHub Copilot CLI 卻無法使用」的情境,依序檢查終端機代理變數、HTTP CONNECT、GitHub 網域分流、DNS 與 TUN 模式;讀完後可以用最少改動判斷問題是在命令列、核心路由,還是認證流程本身。

先確認 Copilot CLI 實際走哪條路

瀏覽器能連線,不代表所有應用程式都會自動使用 v2rayN。v2rayN 開啟「系統代理」後,通常是透過 Windows 的系統代理設定影響支援該設定的應用程式;終端機中的命令、Node.js 程序或獨立的 CLI 工具,可能只讀取自身的 HTTP_PROXYHTTPS_PROXYALL_PROXY 等環境變數。不同工具對大寫、小寫變數、HTTP 代理和 SOCKS5 代理的支援也不完全一致。

先在 v2rayN 的「設定」→「參數設定」或目前版本相應的代理設定頁確認本機監聽連接埠。常見配置會使用 HTTP 代理連接埠 10809、SOCKS 代理連接埠 10808,但實際值可能因安裝版本與使用者修改而不同。不要直接套用這些數字,應以 v2rayN 畫面顯示的值為準。

HTTP 代理

格式
http://127.0.0.1:10809
用途
HTTP、HTTPS CONNECT
優點
CLI 相容性通常較高

適合先用 curl 驗證 HTTPS 請求是否能通過 v2rayN。

SOCKS5 代理

格式
socks5://127.0.0.1:10808
用途
TCP 連線與部分 DNS 代理
限制
工具必須明確支援 SOCKS

若工具不處理 SOCKS 環境變數,設定後仍可能完全繞過代理。

Windows PowerShell 可以先查看目前環境是否已有代理變數:

Get-ChildItem Env:HTTP_PROXY,Env:HTTPS_PROXY,Env:ALL_PROXY

如果沒有輸出,或顯示了舊電腦、舊連接埠的設定,便不能假設 Copilot CLI 會使用 v2rayN。也要留意 NO_PROXY,它可以讓某些網域或本機位址繞過代理。若之前曾設定過廣泛的 NO_PROXY,應暫時移除與 GitHub 相關的項目,再重新測試。

用最小命令驗證終端機代理

不要一開始直接重試完整的 Copilot CLI 登入流程。先用同一個終端機視窗設定臨時代理,再以一個可觀察結果的 HTTPS 請求測試。PowerShell 範例如下,連接埠請替換成 v2rayN 實際的 HTTP 代理連接埠:

$env:HTTP_PROXY="http://127.0.0.1:10809"
$env:HTTPS_PROXY="http://127.0.0.1:10809"
$env:NO_PROXY="127.0.0.1,localhost"

curl.exe -I --max-time 15 https://github.com
curl.exe -I --max-time 15 https://api.github.com

這裡使用 curl.exe 而不是 PowerShell 的 curl 別名,目的是避免不同 PowerShell 版本對命令別名的處理差異。若請求成功,通常會看到 HTTP 回應標頭,例如 200301403;只要能在 15 秒內取得穩定回應,就表示 DNS、TCP、代理 CONNECT 和基本 TLS 路徑至少已經走通。回應狀態碼本身不等於登入成功,因為 GitHub 可能依請求方法、認證狀態與 API 限制回傳不同結果。

  1. 設定臨時變數:只在目前 PowerShell 視窗生效,避免把錯誤連接埠永久寫入系統。
  2. 測試主網域:確認 github.com 能在代理下建立 HTTPS 連線。
  3. 測試 API 網域:確認 api.github.com 沒有被不同的分流規則阻擋。
  4. 查看 v2rayN 日誌:執行測試時應能看到對應的出站請求或連線記錄。
  5. 再啟動 CLI:保持同一個終端機視窗,避免變數未被帶入新程序。

若 HTTP 代理測試成功,但 Copilot CLI 仍然顯示代理錯誤,問題可能是該 CLI 使用的執行時期不讀取標準環境變數,或要求特定的代理格式。優先使用 http://127.0.0.1:連接埠 形式,而不是把 socks5:// 填入所有變數。某些程式只將 HTTPS_PROXY 用於 HTTPS 目標,某些程式則需要同時存在大寫和小寫變數;可以在測試視窗中一併設定,但不要在尚未確認結果前修改全域系統環境。

報錯: Could not resolve host: github.com

原因與解法:終端機使用的 DNS 無法解析網域,或代理變數沒有被程序讀取;先用 curl.exe 驗證 HTTP 代理,再檢查 v2rayN 的 DNS 與路由設定。

報錯: Failed to connect to 127.0.0.1 port 10809

原因與解法:本機 HTTP 代理連接埠未啟動、連接埠填錯或被其他程序占用;回到 v2rayN 確認監聽值,並查看核心是否正常運行。

報錯: proxy CONNECT aborted

原因與解法:HTTP 代理未能建立目標 HTTPS 通道,常見於代理類型填錯、節點出站失敗或目標網域被錯誤分流;先測試 github.comapi.github.com 的日誌。

檢查 GitHub 分流與 DNS 解析

Copilot CLI 並不只連線一個網域。登入過程可能涉及 GitHub 主站、API 服務、授權端點及其他必要的資源網域。若規則只代理主站,卻把 API 網域直連,便可能出現瀏覽器登入正常、CLI 授權交換逾時的差異。反過來,若把所有網域都代理,也可能因 DNS 解析位置不一致而造成連線反覆失敗。

在 v2rayN 中先確認「設定」→「參數設定」→「路由設定」的目前模式與規則順序。若使用自訂分流,應將 GitHub 相關網域放在寬泛的直連規則之前,並確認最後的兜底規則確實指向代理出站。不要只依賴名稱相似的規則項目,也不要把完整登入網址當成單一固定網域;應在核心日誌中觀察實際請求的目標名稱。

觀察結果 較可能原因 處理方向
瀏覽器正常,CLI 無任何核心記錄 CLI 沒有使用 v2rayN 代理 檢查 HTTP_PROXY、HTTPS_PROXY 與工具代理支援
CLI 請求出現在日誌,但連續逾時 節點出站、DNS 或遠端路徑異常 分別測試主網域與 API 網域,查看錯誤時間點
主網域可通,API 網域失敗 分流規則或 API 解析路徑不同 調整 GitHub API 相關規則,避免被錯誤直連
登入完成後命令仍顯示未授權 認證快取、權杖或 CLI 狀態異常 重新執行登入流程,不要反覆更換節點參數

DNS 方面,若 v2rayN 使用「遠端 DNS」或由 Xray 核心處理 DNS,終端機的查詢結果可能與瀏覽器不同。這不一定是錯誤,但必須確保查詢和後續連線走同一套策略。啟用 TUN 時,請特別確認 DNS 流量確實被 TUN 接管;否則系統先得到一個直連環境下的位址,之後才把 TCP 請求交給代理,可能產生解析污染、路由不一致或 TLS 目標不匹配。

結論:先看核心日誌,再改分流

如果執行 curl.exe 時 v2rayN 完全沒有新連線記錄,優先修正終端機代理變數;只有在請求已進入核心、但特定 GitHub 網域失敗時,才需要調整路由或 DNS。這個判斷能避免把「沒有送進代理」誤當成「節點規則寫錯」。

必要時改用 TUN,處理不支援代理變數的程序

若 Copilot CLI 所使用的執行時期完全不支援 HTTP 或 SOCKS 環境變數,或者它啟動了不會繼承目前終端機環境的子程序,TUN 模式可以作為替代方案。TUN 會在作業系統建立虛擬網路介面,將符合條件的 IP 流量交給核心處理,因此不必要求每個命令列工具都理解代理設定。

在 v2rayN 中開啟 TUN 前,先確認目前帳戶具有建立虛擬網路介面的權限,並記下原本的系統代理狀態。進入「設定」→「參數設定」→「TUN 模式」後,依版本選擇啟用 TUN、設定自動路由與 DNS 接管。套用後重新開啟終端機,再測試 curl.exe 和 Copilot CLI。TUN 啟用不代表所有流量必然代理;路由規則、私有網段排除、DNS 模式與核心支援仍會決定實際結果。

  • 先保留 127.0.0.1localhost 與區域網路網段的直連例外,避免本機服務或路由器管理頁面被送入代理。
  • 確認 TUN 虛擬介面已建立,且核心日誌沒有權限不足、路由安裝失敗或 DNS 監聽衝突。
  • 若同時開啟系統代理與 TUN,先用單一模式測試,避免重複接管造成迴圈或難以判讀的日誌。
  • 測試完成後,若 CLI 已能正常連線,再決定是否保留 TUN;不必為了單一工具長期啟用複雜的透明代理。

TUN 模式仍可能受 IPv6 影響。若系統優先取得 IPv6 位址,但目前節點、路由或 TUN 配置沒有完整處理 IPv6,CLI 可能表現為間歇性逾時。可以在日誌中比較 IPv4 與 IPv6 的連線結果,或暫時讓測試命令優先使用 IPv4,以確認是否為協定族差異。這是診斷手段,不代表應永久停用 IPv6;長期設定應依實際網路與核心能力決定。

最後處理登入狀態與常見問題

當主網域與 API 網域均可透過代理回應,且 v2rayN 日誌顯示連線成功,才適合處理 Copilot CLI 的登入狀態。先關閉目前失敗的 CLI 程序,再重新開啟一個已設定代理的終端機,執行該工具提供的登入命令。若瀏覽器授權頁面已開啟但回呼失敗,檢查本機回呼連接埠是否被防火牆或其他程序占用,也要避免把 localhost 加入會送往遠端代理的規則。

認證資訊屬於敏感資料,不要將存取權杖、完整錯誤輸出或含有帳戶識別資訊的設定檔貼到公開討論區。若曾在錯誤環境中產生可疑或過期的登入狀態,應依 Copilot CLI 本身提供的登出功能清理,再於代理路徑穩定後重新登入。更換節點可以用來驗證線路,但不應把節點切換當成認證問題的唯一解法。

瀏覽器可以登入,為什麼 CLI 完全沒有 v2rayN 日誌?

這表示 CLI 很可能沒有使用系統代理,也沒有讀取目前的環境變數。先在同一個 PowerShell 視窗設定 HTTP_PROXYHTTPS_PROXY,再用 curl.exe -I https://api.github.com 測試。

HTTP 代理和 SOCKS5 代理應該選哪一個?

先選 HTTP 代理,因為許多 CLI 對 HTTPS CONNECT 的支援比 SOCKS 環境變數更一致。若工具文件明確要求 SOCKS5,再改用 v2rayN 顯示的 SOCKS 連接埠。

設定代理後仍然顯示 DNS 逾時,該改哪裡?

先分辨是終端機本地解析失敗,還是核心代理出站解析失敗。查看 v2rayN 日誌中的目標網域與 DNS 錯誤,再檢查路由設定是否啟用 DNS 接管,以及 GitHub API 是否被錯誤送往直連。

開啟 TUN 後是否還需要設定 HTTP_PROXY?

不一定。TUN 主要處理作業系統層的 IP 流量,但部分程序仍可能使用自己的代理邏輯。排查時先只開啟 TUN 測試一次,再只設定環境變數測試一次,藉此確認哪條路徑真正有效。

整體而言,這類故障最重要的判斷不是「哪個節點延遲最低」,而是「Copilot CLI 的請求是否進入 v2rayN,以及進入後被哪個出站處理」。先用本機代理連接埠和 curl.exe 建立可重複的基準,再核對 GitHub 網域分流、DNS 與 TUN,最後才重新登入。每次只修改一個變數並保留日誌,通常比反覆匯入訂閱或重裝核心更快找到原因。

下載 v2rayN