GCP認證帳號 GCP防火牆放行Ping請求設置:開啟 ICMP 協議讓伺服器可以被測速
前言:為什麼要放行 Ping(ICMP)
很多人第一次在 GCP 上做連線測試時,都會遇到同一個問題:你把服務部署好了,端口也開了,但對外 Ping 卻不通。於是測速軟體顯示延遲、封包遺失等資訊全部變成空白,甚至導致你以為整體網路壞掉。其實不一定是服務掛了,常見原因只是你沒有讓 ICMP(Internet Control Message Protocol)通過防火牆。
Ping 用的主要是 ICMP 的 Echo 請求與 Echo 回應。你對外發出 Echo request,如果伺服器端或中間的網路裝置不允許 ICMP,封包就會直接被丟棄,你看到的結果就會像是「根本沒有機器在那裡」。因此,如果你的目標是「可被 Ping 測速」,就需要在 GCP 的防火牆規則中明確允許 ICMP。
要注意一點:放行 Ping 不等於放行應用流量。ICMP 是診斷工具,能協助你判斷延遲與可達性,但它不會取代 TCP/UDP 的服務測試。你仍應該用 HTTP、SSH 或你實際提供的協定做完整驗證。不過在很多運維場景,先把 ICMP 開起來,至少可以快速排除「外網根本打不到」的問題。
先弄清楚:GCP 防火牆放行的是什麼
在 GCP 裡,防火牆規則主要作用在 VPC 網路層。你設定的規則會指定:
- 套用到哪個網路(通常是同一個 VPC)
- 套用對象是哪些資源(標籤/目標服務帳戶等方式)
- 來源來源(IP 範圍、或允許全部來源)
- 協定與埠(ICMP 的話是類型與代碼)
當你開放 TCP 的某個埠,GCP 只會讓那個埠的封包進得來;而 ICMP 則是以協定本身來判斷是否允許。ICMP 不像 TCP 那樣有「埠」概念,但它有「類型(type)」與「代碼(code)」。Ping 對應的常見組合是:
- Echo request(通常 type=8, code=0)
- Echo reply(通常 type=0, code=0)
多數情況下,你需要允許 Echo request 進入你的 VM,VM 才能回送 Echo reply。至於 Echo reply,通常反向流量會被系統允許回程(取決於規則與狀態防火牆行為),但在某些嚴格情境你可能也要確認回應是否被阻擋。不過對一般「讓外部可以 Ping 到」的需求,只要放行 request,絕大多數就能達成。
你可能以為「開了端口就能 Ping」,但其實不是
很多人用為「只要安全性設定允許來源連線,Ping 就自然能通」來推測。這個推測常常失準,原因在於:
- Ping 使用的是 ICMP,不是 TCP/UDP。
- GCP 的防火牆規則是逐類型分開管理的。你開了 22/TCP,不代表 ICMP 也會被放行。
- 即使你開了 ICMP,作業系統也可能自己擋掉(例如 Linux 的 icmp_echo_ignore_all 設定)。
所以正確的思路應該是:先確認 GCP 防火牆層是否允許 ICMP,再確認 VM 的作業系統層是否允許 Echo request,最後再用工具驗證。
設定目標:你要開的是「誰可以 Ping」
在實務上,你可能有兩種需求:
- GCP認證帳號 允許任何人 Ping:用於公開網站、公開服務的可觀測性;或你只想讓監控系統看到可達性。
- 只允許特定來源 Ping:只允許你自己的監控機器或公司網段,降低暴露面。
如果你讓「所有來源」都能 Ping,通常不會造成應用層安全性問題,但確實會增加被掃描/探測的機會。是否要全開,取決於你的風險承受度與合規要求。下面我會以「允許監控/測速」為導向提供常見做法,同時提醒如何收斂來源。
在 GCP 防火牆中開啟 ICMP 的步驟
以下以 GCP Console 的流程為主,方向你可以直接照做。不同專案或新介面可能在按鈕名稱上有些差異,但概念一致。
第一步:確認你的 VM 在哪個 VPC、用什麼防火牆套用機制
GCP 的防火牆規則是對 VPC 生效的。首先你要確認你要測的那台 VM 連在哪個 VPC 網路,以及防火牆規則是否使用:
- network tags(網路標籤)
- service account(服務帳戶)
GCP認證帳號 你在建立防火牆規則時,需要把它對準到那台 VM。否則規則雖然存在,但不套用在目標資源上,外部 Ping 還是會失敗。
第二步:新增防火牆規則(Ingress)
在你選定的 VPC 底下,找到「防火牆規則(Firewall rules)」並新增一筆。建議你選擇:
- Direction:Ingress(入站)
- Targets:套用到你的 VM(通常用 network tag 最直覺)
- Source IP ranges:根據需求填入(例如監控系統所在網段,或暫時用 0.0.0.0/0 測試)
- Protocols and ports:選擇 ICMP
這裡的關鍵就是「ICMP」。在介面中,你會看到 ICMP 的類型與代碼選項,或讓你填 type/code。
第三步:設定 ICMP Echo request(讓 Ping 進來)
一般要允許 Ping 最常用的設定是:
- ICMP type:8(Echo request)
- ICMP code:0
有些介面會直接讓你選「echo-request」,你就選那個對應項。若介面用的是「類型/代碼」填入方式,就填 type=8 code=0。
如果你希望更完整地涵蓋 Ping 的行為,你也可以另外加一條規則允許 type=0 code=0(Echo reply)。但在大多數情境,Echo reply 是從 VM 送出回去,通常不會需要你額外在 ingress 規則中放行,因為它屬於回應流量。真正該擔心的是 request 是否被擋。
第四步:注意優先順序與既有規則
GCP 的防火牆規則不像傳統那樣完全是「先來先到」;它有自己的評估邏輯。實務上你最需要確認的是:你新加的 ICMP 規則是否真的套用到目標 VM,以及是否被其他規則覆蓋或導致匹配結果不如預期。
GCP認證帳號 在排錯時,你可以採取這個檢查順序:
- 你的規則 Targets 是否包含 VM(標籤/服務帳戶)
- Source IP ranges 是否包含你用來測 Ping 的那台機器
- ICMP type/code 是否是你需要的 Echo request
- 同一個方向(Ingress)是否還有其他規則讓你誤以為已放行
第五步:保存並等待生效
通常防火牆規則更新會在幾十秒到一兩分鐘內生效,但視系統狀態而定。不要太快判定失敗。你可以在設定完成後立即做 Ping 測試;若不通,先等一分鐘再測第二次。
VM 作業系統層也要放行:你可能已經通過 GCP,卻仍 Ping 不通
就算你在 GCP 防火牆把 ICMP 放行了,VM 的作業系統還可能阻擋 ICMP。尤其在 Linux 上,常見情況是你啟用了某些安全強化設定,導致回應被關閉。
以 Linux 為例,你可以檢查下列系統參數是否允許回應 Echo request:
- net.ipv4.icmp_echo_ignore_all
若此值被設為 1,系統會忽略回應,導致 Ping 失敗。很多發行版預設不會這樣,但你如果自己硬化過或使用了某些模板,就有可能遇到。
此外,如果你 VM 上還有軟體型防火牆(例如 iptables、nftables、ufw),也可能對 ICMP 做了限制。你要把 ICMP Echo request 允許進入,至少讓 echo 回應能出去。
對於 Windows Server,則可能要在「Windows 防火牆規則」中允許 ICMPv4 的 Echo request 回應。這部分不同版本設定路徑略有差異,但原則一致:允許 ping 的 ICMP 類型。
驗證:用 Ping、Tracert/Traceroute 與封包觀察判斷卡在哪裡
你要讓測速可用,驗證不能只看「設定有沒有做」。建議你用分層方式驗證,把問題定位到「GCP 還是 OS」甚至「路由」。
第一步:在外部主機 Ping
從一台不在同一個 VPC 裡的外部機器執行 Ping,觀察是否收到回應。你要留意:
- 如果完全不回,可能是 request 被擋(GCP 或 OS)
- 如果間歇回應,可能是網路抖動、或中間裝置策略
- 如果只在內網能 Ping、外網不能,可能是來源來源或路由/防火牆不一致
第二步:確認 ICMP type/code 是否正確
很多人會犯的錯是:放行了錯的 ICMP 類型。你要的是 Echo request。若你不小心開了別的 ICMP,例如 destination unreachable 或 timestamp-related 類型,Ping 仍不會通。
所以在排錯時,你可以回頭檢查規則:type=8 code=0 是否確定是那條你真正允許的。
第三步:用路由與連線測試縮小範圍
如果你 Ping 不通,你也可以做一個「對照組」測試:
- 對同一台 VM 的 SSH/HTTP 是否可以連?(確認服務本身與路由)
- 用 traceroute/tracert 看路徑是否在某一跳就停止
若 TCP/HTTP 是通的,但 Ping 不通,通常就是 ICMP 層被擋,不是路由壞了。反過來,如果 TCP 也不通,可能是防火牆、路由、或 VM 本身狀態的問題。
安全性與運維:何時該開、何時該收斂
GCP認證帳號 允許 ICMP Echo request,對監控與可觀測性很有幫助,但也要把它當作一個可管理的風險點來看。
建議一:來源不要一開始就全開
如果你是為了「測速」或「特定監控系統」準備,應該把 Source IP ranges 限定在監控來源網段。你可以先用全開(0.0.0.0/0)測試環境是否正確,再把來源收斂回來。
建議二:建立規則名稱與變更記錄
防火牆規則一多就會難以追蹤。建議你在規則命名上清楚寫出用途,例如:
- allow-icmp-echo-monitoring
- allow-icmp-echo-from-office
這樣未來你排錯時能快速確認是哪個變更造成的差異。
建議三:把「Ping 可用」當作一種健康指標,而不是唯一指標
Ping 反映的是 ICMP 層可達性與基本延遲,但它不等同於應用健康。某些服務可能在 TCP 層是阻塞狀態,但 ICMP 仍回得去;或相反,ICMP 被禁但服務其實正常。因此你要把 Ping 當作補充訊號,最好搭配 HTTP/TCP 的健康檢查。
常見踩坑整理
- 忘了套用 Targets:規則建好了,但 VM 沒打上對應 network tag,或服務帳戶不匹配。
- Source IP 範圍不包含測試機:你在公司網段測,但規則只允許某個其他網段。
- ICMP type 設錯:不是 Echo request(type=8 code=0),自然 Ping 不通。
- GCP認證帳號 OS 層仍擋 ICMP:Linux hardening、Windows 防火牆規則未放行。
- 以為開了 TCP/UDP 就能 Ping:協定不同,規則不自動影響。
- 變更後等待不足:防火牆更新可能需要幾十秒到一兩分鐘。
實務範例:從「設定」到「讓測速正常」
假設你的情境是:你在 GCP 上有一台對外提供服務的 VM,現在要讓第三方測速工具能 Ping 你來記錄延遲。你採取以下流程,成功率最高。
步驟 1:先在安全方式下測試
GCP認證帳號 你先暫時從測試用機器所在的 IP 網段建立一條 ICMP 規則,確保 Source IP ranges 包含你的測試來源。ICMP type 設為 8、code 設為 0。Targets 指向該 VM(用 network tag 最直覺)。
步驟 2:同時確認 VM OS
到 VM 裡確認作業系統沒有把 ICMP Echo 回應關掉。若你使用了防火牆規則,讓 ICMP echo reply 可以正常回傳。
步驟 3:外部驗證
回到外部主機執行 Ping,觀察延遲是否出現、是否有封包遺失。
步驟 4:縮小來源並留好紀錄
當你確認 Ping 正常後,把 Source IP ranges 從 0.0.0.0/0 或測試網段收斂成你真正需要的來源網段,並保留變更紀錄。
結語:Ping 不只是「能不能通」,更是「可被觀測」
在 GCP 上開啟 ICMP Echo request,看似只是幾個欄位的設定,但它背後牽涉到 VPC 防火牆套用、協定類型正確性、以及 VM 作業系統的策略。當你把這三層理順,你的伺服器就能被外部可靠地 Ping,測速工具也就能拿到延遲與可達性資料。
更重要的是,你建立了一套可重複的驗證流程:先確認網路層是否允許,再確認作業系統是否回應,最後用外部工具驗證。日後遇到延遲飆高或監控告警,你就不必靠猜,能快速判斷是 ICMP 層、路由層,還是應用層出了狀況。

