Watch at Ease看見世界,讀懂生活。

故障排查 · 實用指南

curl 錯誤 7「連線失敗」?改防火牆前先證明目標、路徑與監聽器

錯誤 7 只表示連線步驟失敗,不等於防火牆必然阻擋。先固定實際跳點、執行環境與套接字結果。

原創邊界圖:區分失敗環境、首跳、網路路徑與監聽器。
原創示意圖:改網路控制前先定位真正失敗的連線跳點。 Watch at Ease

curl 錯誤 7 表示 libcurl 無法連線主機或代理;它不能單獨證明防火牆阻擋,也不能說明 curl 撥號的是目標、代理、哪種位址族或正確端口。

固定原始請求與詳細連線行,在失敗環境重現,區分拒絕、逾時與無路由,再只修改已證實的責任邊界。

固定實际連線跳点

重试前複制完整参數、URL、工作目錄、运行身份、錯誤和 curl -v 連線行,記錄协议、主機、端口、解析位址及是否選择代理。

第一次對照不要缩寫或重输命令;URL、代理變量或默認端口變化都会變成另一條連線。

在失败运行環境内複现

從原容器、服務账号、任務执行器或應用主機运行同一受限测试。宿主交互 Shell 成功只能作為對照,不能证明服務命名空間和路由正常。

記錄代理環境、curl 設定、位址族與網路命名空間。Docker 案例顯示不同运行條件会让同一主機名指向不同回环或桥接位址。

区分拒绝、超時與無路由

保留具體連線结果:ECONNREFUSED 表示所選端点拒绝,ETIMEDOUT 表示未及時建立連線,ENETUNREACH 表示运行環境沒有到該網路的路由。

在同一環境测试目标和一個已知正常端点。不要用单一端口推斷全局防火墙,也不要把超時当作沒有監聽器的证明。

核對目标與監聽器

在你控制的基础设施上核實服務状態、端口以及绑定的接口與位址族,并把公布端点與實际監聽器對照。

若主機名返回多個位址,保留 curl 尝试顺序。IPv4 成功不会抹去 IPv6 監聽失败,它只定位了位址族分支。

单独處理代理首跳

若 curl 選择代理,第一條 TCP 連線是代理主機和端口。先在同一環境驗證該跳点,代理連線成功後再讨论目标可達性。

不要為诊斷刪除全局代理。記錄适用的代理/no_proxy變量、設定文件與源 IP 策略,只做一項可逆變更。

用原請求完成退出测试

以相同 URL、代理選择和运行環境重複原命令,記錄實际對端、协议响應、連線耗時與最终退出码。

责任仍不清楚、變更会擴大暴露面或端点屬于其他团隊時應停止,并交接位址、端口、環境、结果和時間。

原創決策圖:區分連線拒絕、逾時與無路由。
原創示意圖:先分類連線結果,再選擇修復責任方。 Watch at Ease