GitHub clone 太慢、Docker image 拉不下來、npm install 經常逾時,通常不只是單一網站的問題,而是開發環境中的 DNS、連線路徑、代理模式與工具設定沒有對齊。瀏覽器能正常開啟頁面,也不代表 Git、Docker、npm 或 CI/CD 執行器一定會使用同一條路徑;它們可能採用不同的代理設定、憑證驗證方式與網路協定。
開發者 VPN 的正確用法,不是把所有程式一律切換成全域模式,而是先確認哪一個工具遇到問題,再選擇適合的接管範圍。本文會從本機開發環境開始,整理 GitHub、Docker Hub、npm、pip 與 API 的連線配置,接著說明 Windows、macOS、Linux、Android 和 iOS 官方客戶端,以及 Clash Verge、sing-box、Shadowrocket 等相容客戶端的使用思路,最後延伸到 CI/CD 執行器的設定。
開發環境為什麼需要分開設定
一般網頁瀏覽多半由瀏覽器單獨管理代理;Git 則可能讀取全域設定、環境變數或自己的設定檔;Docker CLI 會將請求交給 Docker Engine;npm 和 pip 又各自有 registry、憑證與代理參數。這些元件即使在同一台電腦上,也不一定共享同一套配置。因此,安裝一個客戶端並連上節點,只能代表隧道或代理本身建立成功,不能直接證明所有開發工具都已經走入該連線。
另一個常見差異是 TCP 與 UDP。Git clone、套件下載、Docker Registry 通訊和大部分 API 請求主要依賴 TCP、TLS 與 DNS;即時通訊或某些特殊工具可能需要 UDP。Shadowsocks、VMess、Trojan、Hysteria2 等通常屬於代理協定或代理生態中的傳輸方案,WireGuard 則是 VPN 協定。Clash Verge、sing-box 與 Shadowrocket 是相容客戶端,不同核心對 TUN、系統代理、UDP 和規則語法的支援程度可能不同。
開發工作中還要考慮憑證與網域分流。若只把瀏覽器設定為代理,終端機執行的 Git、npm 或 curl 仍可能直連;若直接對整個系統啟用全域代理,又可能讓內網 Git、公司服務、localhost 或 Docker 本地端點受到影響。比較穩妥的做法是先使用規則模式,將需要的程式或網域送往適合的線路,再保留本地網路與內部服務直連。
90+
國家覆蓋
200+
線路數
5
支援平台
不限
同時在線裝置
GitHub 與 Git:從 clone 到 release 下載
GitHub 相關問題不只包括 git clone。開發者還可能遇到 git fetch、子模組同步、Git LFS、Release 附件下載、套件來源和 Actions 相關服務。首先要確認 Git 實際使用的是 HTTPS 還是 SSH。HTTPS 通常比較容易配合 HTTP 代理;SSH 則使用另一套連線方式,不能只因為瀏覽器已經連線就推定會自動通過代理。
HTTPS Git 的代理範圍
如果團隊使用 HTTPS 儲存庫,可以先檢查目前的 Git 設定:
git config --global --get http.proxy
git config --global --get https.proxy
git remote -v
需要代理時,可以將代理位址寫入 Git 的全域設定;不需要時則應移除,而不是長期留下過期的端口。實際代理格式取決於客戶端提供的 HTTP、SOCKS5 或混合端口,不能把某一個客戶端的端口數字直接套用到另一個客戶端。若使用 SOCKS5,還要確認 Git 版本與代理格式對 DNS 解析的處理方式,避免網域在本地解析後造成連線路徑不一致。
git config --global http.proxy http://127.0.0.1:PORT
git config --global https.proxy http://127.0.0.1:PORT
git config --global --unset http.proxy
git config --global --unset https.proxy
上面的 PORT 只是佔位符,請替換為客戶端實際顯示的本機代理端口。若公司內部儲存庫不應經過外部代理,可以使用更細緻的網域規則,或採用只對特定命令生效的環境變數,而不要把所有 Git 流量都導向同一出口。
SSH、LFS 與大型檔案下載
SSH 儲存庫常見格式為 [email protected]:owner/repository.git。這類連線需要在 SSH 設定中指定代理或轉送方式,且不同作業系統的 OpenSSH、代理工具與安全政策可能不同。若只設定了 Git 的 HTTP 代理,SSH clone 仍可能逾時。Git LFS 也可能使用獨立的下載端點,當普通程式碼可以同步、LFS 物件卻失敗時,應分別查看 LFS 的端點和 Git trace,而不是重複切換節點。
對 GitHub Release 或原始碼壓縮檔,建議先以 curl 或瀏覽器確認目標網域,再比較 Git 本身的代理設定。不要把存取權杖直接放進命令列或貼到聊天工具中;命令歷史、CI 日誌與錯誤輸出都可能保存敏感資訊。
先確認儲存庫使用 HTTPS 還是 SSH,再針對 Git、SSH、LFS 和 Release 下載分別驗證;瀏覽器能開啟 GitHub,不等於命令列已完成配置。
Docker、npm 與 pip 的下載路徑
Docker image 拉取通常包含多個階段:Docker CLI 將請求交給 Docker Engine,Engine 再連接 Registry、Token 服務與分層內容位址。這就是為什麼只在目前 shell 設定代理,可能對 Docker Desktop 或 Linux 上的 Docker daemon 沒有作用。Docker Desktop 應在其設定中的代理區域確認;Linux 則通常需要為 Docker service 或 daemon 配置代理,修改後還要重新載入服務,並透過日誌確認設定是否生效。
若 Docker Hub 首頁可以開啟,但 docker pull 失敗,應依序檢查映像名稱、Registry 認證、DNS、Engine 代理與 TLS 錯誤。不要把 Docker Registry mirror、代理端口和私有 Registry 混為一談:mirror 是內容快取或鏡像來源,代理是連線轉送方式,私有 Registry 則涉及權限、憑證與儲存位置。企業環境若有內部 Registry,應優先遵循內部憑證與存取政策。
npm 的連線則由 registry 設定、npm 自身的代理選項與 shell 環境共同影響。可以先檢查目前來源:
npm config get registry
npm config get proxy
npm config get https-proxy
如果套件下載速度不穩定,先確認 registry 是否為團隊允許使用的來源,再檢查是否存在舊的代理設定。公司專案通常還會使用私有套件庫與 scope,例如 @company;這時不宜直接把所有 registry 都替換成公共來源,否則可能導致鎖定檔、權限驗證或套件完整性檢查失效。
pip 的設定方式也有相同原則。它可能讀取環境變數、使用者設定檔、虛擬環境外部的 shell 配置,以及專案指定的 index。若只在系統層級設定代理,卻沒有確認 Python 執行環境是否讀取該變數,安裝結果仍可能不一致。對需要驗證 TLS 的套件來源,不應以關閉憑證檢查作為快速修復;這會掩蓋中間人風險與錯誤憑證問題。
- ✅ Docker Desktop 與 Linux Docker daemon 分別確認代理是否生效
- ✅ npm 先確認 registry,再檢查 proxy 與 https-proxy 是否殘留舊值
- ✅ pip 保留 TLS 憑證驗證,優先修正來源與憑證鏈
- ❌ 不要把公共 registry、私有 registry 與快取 mirror 當成同一種設定
- ❌ 不要在 Dockerfile、package.json 或 shell 歷史中寫入長期有效的祕密
動手設定:由本機客戶端逐層驗證
以下是一套適合 Windows、macOS 和 Linux 的排查流程。Android 與 iOS 官方客戶端主要負責行動裝置本身的網路接管;若要在手機上測試 API,可使用支援代理設定的終端機或 API 工具,但不要期待手機客戶端會自動修改另一台電腦的 Git、Docker 或 npm 設定。
- 先安裝並連線:從本站的前往下載頁取得對應平台客戶端,登入後選擇目標地區與合適線路。若使用 Clash Verge、sing-box 或 Shadowrocket,應透過訂閱連結一鍵導入,並確認配置來源可信。
- 確認客戶端模式:先使用系統代理或規則模式,不要一開始就把所有流量切換成全域。若 Docker、獨立 IDE 或終端機不受系統代理影響,再考慮 TUN 模式;啟用前要留意本地網段、公司內網與虛擬化網路是否需要排除。
- 驗證 DNS 與基本 HTTPS:使用
curl -I https://github.com或其他不含祕密的測試請求,確認 DNS 解析、TLS 握手與 HTTP 回應能完成。不要只看瀏覽器頁面是否載入。 - 單獨測試 Git:執行小型的
git ls-remote或對測試儲存庫執行 fetch,確認 Git 的代理設定與認證沒有衝突。測試完成後,清理不再需要的全域代理值。 - 單獨測試 Docker:確認 Docker Engine 已重載代理設定,再使用公開映像進行拉取測試。若 Docker Desktop 與終端機結果不同,優先查看 Engine 日誌與 Desktop 網路設定。
- 單獨測試套件管理器:檢查 npm registry、pip index 和專案 lockfile,避免將「代理成功」誤判成「套件來源正確」。
- 記錄可重現配置:把非敏感的環境變數、registry 規則和例外網域寫入團隊文件;帳戶權杖、私鑰與密碼則使用祕密管理機制,不要提交到 Git 儲存庫。
如果某一個步驟失敗,不要同時修改節點、協議、DNS 和工具設定。一次只改一個變數,才能知道真正的影響來源。例如先固定線路,只比較 Git 代理是否開啟;再固定 Git 設定,只比較系統代理與 TUN 模式。這種方法比反覆點選不同節點更容易找到根因。
API、CI/CD 與團隊環境的穩定做法
API 工具常見的問題包括環境變數未載入、TLS 憑證不一致、DNS 解析位置不同,以及請求程式沒有繼承桌面客戶端的代理。使用 curl、Python requests、Node.js fetch 或 Postman 時,應先確認該工具支援的代理形式,再用不含認證資訊的健康檢查端點進行測試。對 API 服務來說,狀態碼、重試策略、逾時設定與回應內容都比單純「頁面能否開啟」更有參考價值。
CI/CD 執行器又是另一個環境。GitHub Actions、自架 Runner、GitLab Runner 或容器化建置器可能運行在獨立主機、虛擬機或 Kubernetes Pod 中,並不會自動繼承開發者電腦的 VPN 連線。若建置流程需要 clone 私有依賴、拉取 Docker 基礎映像或安裝 npm、pip 套件,應在 Runner 層級明確配置出站代理、可信任的 CA 憑證、registry 認證與允許的網域。
CI 中最重要的是可重現性。不要依賴某位開發者電腦上的本地訂閱或臨時節點,也不要把含有密碼的代理 URL 直接寫進公開工作流程。可以使用 CI 的祕密變數注入認證,透過固定的配置檔管理非敏感規則,並為 Docker、npm 和 pip 分別指定清楚的來源。若使用自架 Runner,還需要確認服務帳戶有讀取代理環境變數與憑證檔案的權限。
| 場景 | 優先檢查 | 建議方式 | 避免做法 |
|---|---|---|---|
| 本機 Git | HTTPS、SSH、LFS 是否使用不同通道 | 分別設定並逐項測試 | 只測瀏覽器首頁 |
| Docker 建置 | CLI 與 Engine 的代理範圍 | 在 Docker Desktop 或 daemon 層級配置 | 只設定 shell 代理 |
| npm / pip | registry、index、憑證與舊代理值 | 把來源與代理分開管理 | 隨意關閉 TLS 驗證 |
| API 呼叫 | 工具是否繼承環境變數 | 使用健康檢查、逾時與安全重試 | 把權杖放入命令歷史 |
| CI/CD Runner | 執行環境、CA、祕密與出站規則 | 在 Runner 層級建立可重現配置 | 依賴個人電腦的客戶端狀態 |
逾時、拒絕與速度不穩的排查清單
遇到 GitHub clone 逾時時,先看錯誤訊息是 DNS 解析失敗、TCP 連線逾時、TLS 握手錯誤,還是權限驗證失敗。DNS 錯誤應檢查解析器與規則;TCP 逾時應比較節點、端口與線路;TLS 錯誤則要查看系統時間、根憑證和是否存在企業 HTTPS 檢查;權限錯誤與代理通常不是同一個問題。
Docker pull 失敗時,先確認映像名稱與 tag 是否正確,再判斷錯誤發生在 Registry、Token 服務還是分層內容下載。若只有某一層重試,可能是該內容位址的路由或快取問題;若所有映像都失敗,則應回到 Engine 代理和 DNS。npm install 反覆逾時時,應查看 lockfile 指向的實際來源,因為專案可能同時使用公共套件、Git URL 和私有 registry。
速度問題也不一定代表線路頻寬不足。小型 API 請求更容易受到 DNS、TLS 握手和連線建立時間影響;Docker 與套件安裝則可能同時連線到多個網域。規則模式若漏掉其中一個必要網域,常會出現登入成功、下載失敗,或 metadata 能取得、實際檔案卻無法完成的情況。排查時應記錄完整網域與錯誤階段,再補充規則,而不是盲目切換全域模式。
- ✅ 先固定測試條件,一次只修改節點、協議或代理層級其中一項
- ✅ 將 Git、Docker Engine、npm、pip 與 API 工具視為獨立連線來源
- ✅ 為 CI/CD 建立獨立且可重現的代理、憑證與 registry 配置
- ✅ 保留本地網段、localhost 和內部服務的直連例外
- ❌ 不要把一次成功的下載結果當成長時間穩定性的證明
- ❌ 不要為了排除逾時而關閉 TLS 憑證驗證或提交祕密
開發者 VPN 的核心不是單純提高下載速度,而是讓每一個工具都使用可預期的 DNS、代理、憑證與路由。先分層設定,再用 Git、Docker、套件管理器和 API 各自驗證,最後把同樣原則移植到 CI/CD,才能減少「本機正常、建置失敗」的落差。
若還不熟悉訂閱連結導入、規則模式與不同平台的基本操作,可以先查看教學,再依照實際作業系統選擇官方客戶端或相容客戶端。開發環境涉及程式碼、套件與部署憑證,設定時應同時重視連線穩定性與祕密管理,避免為了短期下載速度犧牲整個工作流程的安全性。