CH-J Server Manager透過 SSH 管理伺服器
選單
所有指南與文章 →

ping 失敗,但 SSH 和 HTTPS 正常:為什麼,這是問題嗎?

了解伺服器為何能忽略 ping 卻仍正常運作、如何直接測試服務,以及封鎖 ICMP 何時會造成實際故障。

為什麼會這樣

ping 使用 ICMP,而 SSH 和 HTTPS 使用 TCP 連接埠。這些流量彼此獨立,防火牆可以丟棄其中一種並放行另一種。許多網路和雲端安全群組預設會封鎖 ICMP 回應要求。因此,沒有回覆不代表伺服器停機,有回覆也不能證明服務正常。

測試服務,而非 ping

檢查你實際需要的連接埠與通訊協定。若這些測試成功,表示伺服器的相應服務可連線,而 ping 失敗只顯示路徑上的某處有過濾機制。

nc -vz -w 5 server.example 22
nc -vz -w 5 server.example 443
curl -sSI https://server.example/

使用 TCP 追蹤路徑

當 ICMP 或 UDP 遭過濾時,傳統的 traceroute 可能只顯示星號。透過 TCP 向開放的連接埠探測,通常能追蹤得更遠。這需要 root 權限,而且可能需要先安裝 traceroute,因為精簡系統並未包含它。

sudo traceroute -T -p 443 server.example

在伺服器上尋找過濾設定

若你管理這台伺服器,請檢查其防火牆,以及忽略回應要求的核心設定。請記住,封鎖也可能發生在伺服器外部的安全群組或路由器上,供應商也可能在其網路中過濾 ICMP,而你看不到相關規則。

sysctl net.ipv4.icmp_echo_ignore_all
sudo nft list ruleset | grep -i icmp
sudo ufw status verbose

封鎖 ICMP 何時會造成故障

封鎖回應要求通常無害,但封鎖所有 ICMP 則不然。路徑 MTU 探索仰賴封包過大的通知訊息。缺少這些訊息時,小量資料交換可以正常進行,大量交換卻會停滯,例如 SSH 登入成功後,遇到大量輸出便卡住。IPv6 對 ICMPv6 的依賴更深。第二個命令會在 Linux 上測試路徑是否支援 1500 位元組的 MTU。

ip route get 192.0.2.10
ping -M do -s 1472 -c 3 192.0.2.10

在 CH-J Server Manager 中比較

Server Diagnostics 不需 root,即可透過系統工具執行 ping,並分別測試 TCP、SSH 識別、HTTP 和 TLS,讓你能配合其他結果理解 ping 失敗的意義。這裡的 ping 失敗表示沒有收到回覆,無法指出封包在哪裡被丟棄,而 traceroute 也未必能回答這個問題。

詳細文件

RFC 4890: ICMPv6 filtering →

man: ping →

生物辨識解除鎖定與安全性 →