Es treten Probleme mit Diensten hinter dem internen Google Cloud Load Balancer auf, die nicht beantwortet werden können, wenn die Antwort eine bestimmte Größe überschreitet. Nach einigem "tcpdump" und "wireshark" kann unsere Site-to-Site-IPSec-VPN-Instanz anscheinend kein ICMP-Paket "Fragmentierung erforderlich" an GCLB zurücksenden, sodass die Antwort in einer TCP-Neuübertragungsschleife hängen bleibt.
Einzelheiten
Wir haben einen Site-to-Site-IPSec-Tunnel für eine GCP-VPC und unser Onsite-Gateway eingerichtet. Wir haben einige VM-Instanzen in dieser VPC und haben eine interne GCLB (Google Cloud Load Balancer) erstellt, um diese Dienste zu nutzen. Wir haben jedoch festgestellt, dass die curl
Anforderung an die GCLB (von unserem internen Netzwerk) stecken bleibt und schließlich eine Zeitüberschreitung auftritt , wenn die Antwort des Dienstes eine bestimmte Größe überschreitet.
Ich habe einen tcpdump auf unserer VPN-Instanz (der Instanz, die ipsec ausführt) in GCP durchgeführt und den Trace erfasst, wenn die Antwort "groß" ist. Es stellt sich heraus, dass das VPN versucht, ein für die ICMP-Fragmentierung erforderliches Paket an die interne GCLB zurückzusenden, aber "keine Route zum Host" erhält. Ich habe überprüft, ob von der VPN-Instanz eine Route zu GCLB besteht, und ich kann die GCLB-Instanz sogar an der VPN-Instanz einrollen. Ich hatte den Verdacht, dass die Firewall das ICMP-Paket blockiert.
Sehen Sie hier den Screenshot von wireshark
Da ich jedoch mit den Firewall-Regeln von GCP herumgespielt habe, war es mir nicht möglich, Firewall-Regeln für GCLB im Netzwerk anzuwenden. Es scheint, dass alle Firewall-Regeln für VM-Instanzen gelten.
Könnte jemand etwas Licht ins Dunkel bringen, wie man das umgehen kann?