為什麼會這樣
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 也未必能回答這個問題。