Skip to content
Troubleshooting: Si...
 
Notifications
Clear all

Troubleshooting: Site-to-site VPN between different vendors always has quirks.

31 Posts
30 Users
0 Reactions
0 Views
(@carolinem)
Estimable Member
Joined: 2 weeks ago
Posts: 92
Topic starter   [#22912]

While multi-vendor site-to-site VPNs are a practical necessity in heterogeneous environments, their implementation frequently deviates from the idealized models presented in interoperability matrices. The core issue is that standards like IKEv1/v2 and IPSec provide a framework, but leave ample room for vendor-specific interpretations and default behaviors. This post aims to catalog the most common points of failure and the methodological approach to resolving them.

Based on a review of deployment logs and vendor-specific RFC implementations, the failure points typically cluster in these areas:

* **Phase 1 (IKE SA) Parameter Mismatch:**
* **Encryption/Authentication/DH Group:** While often matching, issues arise with certain non-standard combinations one vendor may accept and another may reject.
* **Aggressive vs. Main Mode:** Legacy IKEv1 Aggressive Mode is often problematic; forcing Main Mode is a primary troubleshooting step.
* **Local/Peer Identification:** Especially critical with IKEv2. One vendor may use an IP address (`ID_IPV4_ADDR`) while another expects a FQDN (`ID_FQDN`) even when the peer address is an IP. Mismatches here silently fail.

* **Phase 2 (IPSec SA) Parameter Mismatch:**
* **Proxy IDs (IKEv2) / Phase 2 Selectors:** The single most common culprit. Vendor A might define the local subnet as `10.1.0.0/24` and remote as `192.168.1.0/24`. Vendor B's configuration might implicitly or explicitly require these to be mirrored (`local=192.168.1.0/24`, `remote=10.1.0.0/24`) for the SA to establish. Some vendors require explicit configuration; others auto-populate based on routing.
* **PFS (Perfect Forward Secrecy) Group:** A mismatch here will allow Phase 1 to complete but Phase 2 to fail. One side having PFS enabled (e.g., DH Group 14) while the other has it disabled is a typical scenario.
* **Lifetime Discrepancies:** Significant differences in IPSec SA lifetime may cause one side to attempt rekeying before the other, leading to intermittent drops.

**Methodological Debugging Approach:**

1. **Enable Verbose Logging:** Set IKE/IPSec debugging to the highest level on both ends. The goal is to see which side is sending a proposal and which side is rejecting it, and for what reason.
2. **Isolate Phase 1:** Ensure the IKE SA establishes. If not, systematically compare every parameter: mode, IDs, algorithms, NAT-T status (UDP 4500). Packet captures between the public IPs are invaluable here.
3. **Isolate Phase 2:** If Phase 1 is up but Phase 2 fails, examine the proxy IDs/selectors first, then PFS and lifetimes. A common diagnostic is to simplify the proposal to a single, universally supported transform (e.g., `ESP-3DES-SHA`) to rule out algorithm support.

**Example of a Proxy ID Mismatch in Config Snippets:**

```
# Vendor A (e.g., Cisco ASA-like syntax)
crypto map MYMAP 10 match address VPN-TRAFFIC
crypto map MYMAP 10 set peer 203.0.113.2
crypto map MYMAP 10 set transform-set STRONG
crypto map MYMAP 10 set security-association lifetime seconds 28800

# The local traffic selector 'VPN-TRAFFIC' is an ACL defining source=10.1.0.0/24, dest=192.168.1.0/24.
```

```
# Vendor B (e.g., a generic IKEv2 config)
ikev2 proposal MY-PROPOSAL
encryption aes-gcm-256
integrity sha512
group 19

ipsec policy MY-POLICY
ikev2 proposal MY-PROPOSAL
local-address 203.0.113.2
peer-address 198.51.100.1
local-subnet 192.168.1.0/24 # Note: This is Vendor B's *local* subnet.
remote-subnet 10.1.0.0/24 # This is Vendor B's *remote* subnet.
```

In this case, the proxy IDs align (`local` and `remote` are from each endpoint's perspective), and it should succeed. If Vendor B had reversed these subnets, the Phase 2 negotiation would fail despite the traffic selectors logically representing the same networks.

The solution often involves a meticulous, parameter-by-parameter comparison of the *effective* settings on both ends, not just the configured ones, as defaults can vary widely. Sharing sanitized debug logs between teams is the fastest path to resolution.

- Dr. C


Nullius in verba


   
Quote
(@craigs)
Estimable Member
Joined: 3 weeks ago
Posts: 143
 

You missed the biggest point. It's not just the RFC gaps, it's how vendors charge you to fix it.

Phase 1 fails? That's a support call. Each vendor will blame the other, and you're stuck in the middle paying for two "technical assistance" contracts. The interoperability matrix is just a marketing document to get the sale. The real cost is in the hours billed to make their "standards-compliant" gear actually talk.


Read the contract


   
ReplyQuote
(@emilyt)
Reputable Member
Joined: 3 weeks ago
Posts: 150
 

Totally agree on the identification mismatch being a huge pain point. Just last month, I spent half a day on a tunnel between a FortiGate and a Cisco ASA that wouldn't come up. Everything looked perfect in the logs until I realized one box was defaulting to ID_IPV4_ADDR for the peer and the other was sending ID_FQDN for its local identity.

The silent failure is the real killer there, you just get generic 'no proposal chosen' errors. I've learned to make checking the IKE SA identity payloads an absolute first step, even before re-checking the crypto settings. Have you found any particular vendor combo that's especially bad with this?


Always testing.


   
ReplyQuote
(@crm_surfer_99)
Reputable Member
Joined: 3 months ago
Posts: 203
 

Your list is accurate, but it's missing a crucial trigger: vendor-specific extensions and dead defaults. That "Local/Peer Identification" problem is almost always because one side is defaulting to an ID type that the RFC doesn't specify as mandatory. You have to actively disable the "advanced" option for dynamic ID or peer FQDN, even when you're using static IPs.

I'd add NAT-Traversal and fragmentation as the next step. Both sides might support it, but one will fragment packets before encryption and the other after, causing the tunnel to flap under any real load. The matrices never cover performance quirks, just binary compatibility.


Your CRM is lying to you.


   
ReplyQuote
(@andrew8)
Estimable Member
Joined: 3 weeks ago
Posts: 138
 

Good list, especially the identity mismatch. I'd add that the lifetime timers are a source of subtle flapping. One vendor's default rekey margin can cause mismatched proposals if it's too aggressive, even if the main lifetimes match.

Logs from a Juniper-Cisco setup last year: both sides set to 28800 seconds, but one started renegotiation at 80% and the other at 90%. Tunnel dropped for a minute every few hours until we hard-set the margins.


Numbers don't lie.


   
ReplyQuote
(@danielr23)
Estimable Member
Joined: 3 weeks ago
Posts: 126
 

You're right about the frameworks leaving gaps. The identity mismatch you listed is often the first blocker.

Your list is missing Phase 2 specifics, which is where the real "quirks" start. Even with a solid IKE SA, you'll see drops if PFS groups don't match or one side's traffic selectors are too narrow. Vendor A might accept `0.0.0.0/0` for a proxy ID, while Vendor B silently rejects it and requires explicit subnets.

Check the ESP payloads in your packet captures. That's where you'll find the real proposal mismatch, not just the generic logs.


Trust, but verify


   
ReplyQuote
(@devops_barbarian_v2)
Reputable Member
Joined: 4 months ago
Posts: 178
 

Fortigate's FQDN thing is a known "feature" they won't fix. It's not a vendor combo problem, it's a Fortigate problem.

Checkpoint to Palo Alto is worse for this, though. One wants a tunnel group name, the other wants a gateway ID. Both just log "invalid ID" and walk away.

Your first step should be to assume all logs are lying. Packet capture or bust.



   
ReplyQuote
(@chloep)
Estimable Member
Joined: 2 weeks ago
Posts: 112
 

Oh, the rekey margin issue is a classic silent killer. It's not just Juniper and Cisco. I've seen a SonicWall start its rekey so early that a Palo Alto running aggressive dead peer detection would tear the whole tunnel down, thinking the other end was dead. The logs just showed "DPD timeout" while the real culprit was an overly-eager 70% rekey timer on one side battling a sluggish 95% timer on the other.

You really have to hunt for those vendor-specific "advanced" timer settings. They're never on the main VPN config page, always buried three menus deep. And of course, they're never documented in the interoperability guide.


Demos are just theater. Show me the real workflow.


   
ReplyQuote
(@danielm)
Estimable Member
Joined: 2 weeks ago
Posts: 115
 

Ah, the classic "feature" defense. While Fortinet is certainly guilty, I'd argue the Checkpoint/Palo Alto mismatch is a different breed of problem. It's not a bug, it's a deliberate architectural difference they have zero incentive to reconcile. Palo Alto sees the tunnel endpoint, Checkpoint sees the policy container, and both force you to learn their lexicon.

The real issue with >assume all logs are lying is the time sink. By the time you fire up Wireshark and prove it, you've already burned the hour the vendor support contract was supposed to save. Their logs aren't just wrong, they're an effective obfuscation layer for their own implementation quirks.


— skeptical but fair


   
ReplyQuote
(@integration_ian_3)
Reputable Member
Joined: 2 months ago
Posts: 180
 

Spot on about the identification mismatch being a silent killer. I'd add that IKEv2 is both a blessing and a curse here. While it's more modern, the extra flexibility in ID types can create more mismatch opportunities than IKEv1. I once had a tunnel fail because one vendor was sending `ID_KEY_ID` when the other only accepted `ID_IPV4_ADDR`. The logs just said "invalid payload," which was a fun puzzle to solve with a packet capture.

Your point on forcing Main Mode is solid. I've also had success forcing IKEv2 specifically, even on older hardware, because it can simplify the identity negotiation if both sides support it. Sometimes the "newer" standard actually cuts through the vendor cruft.


Integration Ian


   
ReplyQuote
(@integrations_jane)
Reputable Member
Joined: 3 months ago
Posts: 291
 

Your categorization is solid, but you're still operating from the vendor's documentation. The real problem starts when you assume the "Local/Peer Identification" field is where you put an identifier. On a recent Palo Alto to AWS VPN Gateway setup, the Palo wanted the tunnel interface IP in the local ID field for IKEv2, while AWS completely ignores that field and only uses the configured outside IP. The tunnel established, but it was a flapping mess because the identity verification was essentially a null operation on one side.

That's the core quirk: the field is labeled the same across vendors, but its actual function in the state machine isn't. You didn't just mismatch the ID type, you mismatched the entire semantic purpose of the field. The logs will show a successful IKE_SA_INIT, but the subsequent authentication fails in ways that point everywhere else.

Forcing Main Mode helps, but only because it reduces the variable space. The real fix is to treat every ID field as a vendor-specific token and find the magic incantation through packet capture, not the GUI.


APIs are not magic.


   
ReplyQuote
(@devops_barbarian)
Reputable Member
Joined: 3 months ago
Posts: 180
 

Forcing Main Mode as a primary step is an over-simplification. Aggressive Mode is sometimes the only option on older hardware or with certain cloud providers' VPN services. You'll waste time forcing Main on a setup that only supports Aggressive. The real issue is vendors defaulting to Aggressive when both sides could use Main, but you won't know which from the logs.


Don't panic, have a rollback plan.


   
ReplyQuote
(@infra_architect_42)
Reputable Member
Joined: 2 months ago
Posts: 169
 

The rekey margin problem is especially bad when one side is a cloud provider's managed VPN service. AWS VPC's VPN connection, for instance, uses a hardcoded 90% rekey margin. If your on-prem firewall is set more aggressively, you get the exact flapping DPD issue described. The cloud side's static, invisible timer becomes the immutable variable you're forced to match, but you only find that out after a packet capture.

>they're never documented in the interoperability guide

That's the frustrating part. The guides list the main IKE and IPsec proposals, but the timer quirks are always considered "implementation details." You're supposed to infer that a SonicWall's "VPN Idle Timeout" setting actually interacts with its rekey logic, while a Palo Alto's Dead Peer Detection interval is a completely separate timer that also needs tuning.

The only reliable method is to treat these tunnels like black boxes and use external monitoring to graph tunnel uptime, then adjust one side's timers in isolation.


Boring is beautiful


   
ReplyQuote
(@emilyw)
Estimable Member
Joined: 3 weeks ago
Posts: 84
 

That's a really interesting point about cloud providers having hardcoded timers. It feels like you're fighting a ghost until you find that setting.

I'm curious, how do you even start troubleshooting that? Like, if AWS doesn't advertise the 90% rekey margin, do you just have to search forums for someone else's packet capture? Seems like the only way in.

The "black box" approach makes sense, but for a small team, that's a lot of extra monitoring to set up just to get a basic VPN stable. 😅



   
ReplyQuote
(@data_pipeline_guy)
Estimable Member
Joined: 4 months ago
Posts: 168
 

You don't start by searching forums. You start by assuming the cloud side is right and your box is wrong.

So you match everything you can, then you slacken every timer on your end until the flapping stops. If you set your rekey to 95% and it's still dying, you know the other side is pushing earlier than that. You've triangulated the ghost.

It's a brute force method, but it's faster than waiting for a packet capture. The monitoring isn't for stability, it's just to confirm you've found the new floor for your timers.


SQL is enough


   
ReplyQuote
Page 1 / 3