防火牆規則可以應用於內部 GCLB 嗎?
tl;dr我們遇到了內部 Google Cloud Load Balancer 背後的服務在響應超過一定大小時無法回复的問題。在一些 tcpdump’ing 和 wireshark’ing 之後,看起來我們的站點到站點 ipsec VPN 實例無法將 ICMP“需要分段”數據包發送回 GCLB,導致響應卡在 TCP 重傳循環中。
細節
我們為 GCP VPC 和我們的現場網關設置了站點到站點的 IPSec 隧道。我們在那個 VPC 中有一些 vm 實例,我們創建了內部 GCLB(Google云負載均衡器)來平衡這些服務。但是,我們注意到,當服務的響應超過一定大小時,
curl
對 GCLB 的請求(來自我們的內部網路)會卡住並最終超時。我在 GCP 中的 VPN 實例(執行 ipsec 的實例)上做了一個 tcpdump,並在響應為“大”時擷取了跟踪。事實證明,VPN 嘗試將需要 ICMP 分段的數據包發送回內部 GCLB,但“沒有到主機的路由”。我驗證了從 VPN 實例到 GCLB 的路由,我什至可以在 VPN 實例處 curl GCLB 實例。這讓我懷疑防火牆正在阻止 ICMP 數據包。
在這裡查看wireshark截圖
但是,玩弄 GCP 的防火牆規則,我無法使防火牆規則適用於網路中的 GCLB。似乎所有防火牆規則都適用於 VM 實例。
有人可以闡明如何解決這個問題嗎?
從主題來看,您的問題似乎是:“防火牆規則可以應用於內部 GCLB 嗎?” 答案是不。防火牆規則直接應用於虛擬機,而不是負載平衡器。內部負載均衡器是直通負載均衡器。要控制流量,您可以將防火牆規則應用到虛擬機本身,但不能將它們應用到“負載均衡器”。您可以查看此文件以獲取更多資訊。
在查看了您的詳細資訊後,您似乎已經配置了一個虛擬機來執行 IPSec 軟體,正如您提到的“我在 GCP 中的 VPN 實例(執行 ipsec 的實例)上做了一個 tcpdump。” 我建議他們改用 Cloud VPN,這樣您就可以確保正確設置 MTU 之類的東西。實例在很多地方都可能存在諸如 MTU 配置錯誤之類的問題。
請注意,GCP 中的最大 MTU 為 1460 字節,但 VPN 流量的 MTU 應該小於考慮數據包封裝的情況。使用 Cloud VPN 時,您可以查看本地網關的建議。
他們應該做的另一件事是在通過隧道發送流量之前對流量進行預分段。流量在封裝之前必須預先分片。這是連接到 Cloud VPN 的對等設備所需的配置。這是相關的文件連結。看起來您正在執行基於 VM 的 VPN,您需要在他們的 VM 和他們的對等網關上處理預分段。
我想在這裡提一下,Cloud VPN 會為您進行預分片,因此唯一需要考慮的是對等設備。