連不上有兩種症狀,指向相反的除錯方向。連線逾時(connection timed out)是封包送不到——對方沒回應、客戶端等到超時放棄;問題在可達性層(路由、私網、防火牆把封包默默丟棄)。連線被拒(connection refused)是封包送到了、對方主動拒絕;問題在服務層(該 port 沒有服務在聽、或防火牆明確回拒)。把這兩個分開,是遠端連線除錯少走冤枉路的第一刀;再往下一層是認證,例如 SSH 連得上卻被要求輸入密碼,見 SSH 金鑰儲放與 authorized_keys(在它們更前面還有一種症狀——名字根本沒解析成位址,見判讀訊號)。

概念位置

連上 sshd 後金鑰沒被接受而退回問密碼,是認證層的問題、不是這裡的可達性或服務層,見 SSH 金鑰儲放與 authorized_keys

逾時:封包送不到

逾時代表你的封包沒有得到任何回應。常見原因都在網路可達性這一層:目的位址根本路由不到(例如連一個 tailnet 私網位址、但這台裝置沒在同一個 tailnet 上——那個位址對它不存在)、中途被防火牆以 DROP 默默丟棄(DROP 不回任何東西、所以是逾時而非被拒)、或機器根本沒開機。判讀方向是往「封包到得了目的地嗎」查,而不是去看服務。

被拒:封包送到了、被拒絕

被拒代表封包確實抵達目的主機、但被回了一個明確的拒絕。常見原因在服務層:那個 port 上沒有服務在監聽(服務沒起、或聽在別的 port / 介面)、或防火牆規則是 REJECT(明確回拒、跟 DROP 的默默丟棄相反)。收到被拒,代表「網路是通的、機器是活的」——可以把可達性層從嫌疑名單劃掉、直接查服務與認證。

判讀訊號

拿到症狀先歸類再動手:

  • 解析失敗Could not resolve host / Name or service not known)→ 名字還沒變成位址、卡在 resolver 這關:/etc/hosts、DNS、或用主機名連線時的 MagicDNS 出問題。這比逾時 / 被拒更前面——連封包都還沒送出去。用 IP 直連能通、用主機名不通,就是這一層。落在這一層之後往下分流(哪一個 resolver 壞了、間歇性怎麼判定),見 本機 DNS proxy 插在第一順位時的放大效應
  • 逾時 → 先驗可達性:目的位址對這台裝置路由得到嗎(在正確的私網 / VPN 上嗎)、中途有沒有防火牆 DROP、機器起了嗎。
  • 被拒 → 服務層:ss -tlnp 看服務有沒有在聽那個 port、聽在哪個介面;認證另算,見概念位置。

一個實務例子:手機連遠端機器的私網位址回逾時,根因往往是手機的 VPN 沒連上、位址路由不到——這時去查伺服器的 sshd 是查錯層。

邊界

這條判別的前提是症狀分得清。有些環境會把兩者糊掉:防火牆可以設成對被拒的連線也不回應(讓被拒看起來像逾時、刻意隱藏服務存在);某些 proxy / 負載平衡層會改寫錯誤。但在直連或 VPN 直達的多數情況,「逾時 = 可達性、被拒 = 服務」這條分岔可靠。機器層級「連不到還是沒起來」的完整分流見 機器連不到或起不來