Established to Active and drops into Idle. Synthetic ping probes report 100% uptime, but every couple of minutes, the BGP hold timer drains to zero, tearing down routing tables across the hybrid infrastructure.
This exact failure mode was dissected in the operational teardown BGP Route Flapping: Diagnosing Multi Cloud Transit Gateway Partitions, exposing how multi-cloud transit architectures routinely collapse under silent Path MTU (PMTU) black holes. Teams often mistake these flaps for control-plane instability, memory pressure on border routers, or provider physical cutovers. In reality, the breakdown lives squarely at Layer 3 and Layer 4 encapsulation boundaries where standard packet-sizing assumptions silently shatter.
The Anatomy of an Encapsulated Black Hole
TEXT
Standard Frame (1500 bytes) + ESP/GRE Overhead (50-76 bytes) = 1550+ bytes
[ Outer IP (20B) | ESP Header (8B) | IV (8-16B) | Inner IP (20B) | TCP (20B) | Payload | ESP Trail/Auth (16B) ]
+--- Exceeds Cloud 1500 MTU ---> [DROP]Why Path MTU Discovery Fails in the Cloud
Diagnostic Verification via Packet Capture
ping -c 5 <remote_ip> works, rerun the probe while forcing the Don't Fragment bit and stepping up the payload size. On Linux, this is done using the -M do flag:
BASH
# Probe tunnel path without fragmentation using explicit payload sizes
ping -M do -s 1472 10.254.0.1 # 1472 + 28 (IP/ICMP) = 1500 bytes
ping -M do -s 1392 10.254.0.1 # 1392 + 28 (IP/ICMP) = 1420 bytesFrag needed and DF set locally or hangs in total silence without packet return, you have isolated an MTU barrier. Running tcpdump on the tunnel endpoint will reveal the BGP TCP handshake completing successfully, followed by an abrupt sequence of unacknowledged retransmissions matching the maximum segment size immediately preceding the peer timeout.
Enforcing Deterministic TCP MSS Clamping
nftables, apply MSS clamping explicitly on the forward chain for all tunnel interfaces:
BASH
# Clamping MSS to 1360 on outgoing traffic traversing the IPsec VTI
nft add table ip filter
nft add chain ip filter forward { type filter hook forward priority 0 \; }
nft add rule ip filter forward oifname "vti0" tcp flags syn tcp option maxseg size set 1360iptables, the equivalent rule intercepts TCP SYN packets and clamps the MSS to match the path automatically:
BASH
# Automatically clamp MSS to interface MTU minus IP/TCP overhead
iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -o vti0 -j TCPMSS --clamp-mss-to-pmtuvti0 or GRE tunnel gre1) must have its base MTU configured manually to match that inner limit (e.g., ip link set dev vti0 mtu 1400). This ensures non-TCP control-plane protocols, including OSPF or non-TCP BFD probes, do not attempt to transmit frames that exceed transit boundaries.
Structural Hardening for Cloud Gateways
- Explicitly allow ICMP Type 3 Code 4 in all perimeter security groups and cloud network access lists (NACLs) to allow PMTUD to function whenever clamping rules fail to match abnormal payloads.
- Enable Appliance Mode on Transit Gateway VPC attachments when routing east-west or north-south traffic through intermediate network inspection VPCs, ensuring bidirectional symmetry across AZ boundaries.
- De-couple control plane BFD from underlay links. Avoid running aggressive sub-second Bidirectional Forwarding Detection timers on the unencapsulated Direct Connect underlay if the overlay IPsec tunnels are relying on independent, loose BGP hold timers. A mismatch here creates a 30-second routing black hole during failovers while the overlay waits to expire.
