Major update — 2026-08-23: the 1:1 NAT / BINAT workaround is NOT universally required — it's per-server
I want to correct something in my original post that I now believe was wrong, or at least incomplete: I described the BINAT workaround as something you need for any additional simultaneous WireGuard tunnel on a ProtonVPN account. That's not accurate. Whether you need it depends on which specific server you're connecting to — some servers need it, some don't, and there's no way to predict which from the outside.
What I found, testing across multiple tunnels and servers on the same account:
I honestly don't know why some servers behave this way and others don't — I've emailed ProtonVPN support asking for clarity and will update this post if I get a useful answer. It could be different infrastructure/software versions across the fleet, something account-side, or something else entirely.
Revised recommendation for anyone building multiple simultaneous tunnels: don't build the BINAT/NAT workaround preemptively for every new tunnel. Build the tunnel plainly first (unique local address, standard outbound NAT to "interface address"), then test:
I want to correct something in my original post that I now believe was wrong, or at least incomplete: I described the BINAT workaround as something you need for any additional simultaneous WireGuard tunnel on a ProtonVPN account. That's not accurate. Whether you need it depends on which specific server you're connecting to — some servers need it, some don't, and there's no way to predict which from the outside.
What I found, testing across multiple tunnels and servers on the same account:
- Some servers reply to ICMP correctly to whatever local address you've configured, with zero NAT tricks needed — real traffic and monitoring both work out of the box.
- Other servers — even using an identical client-side setup — reply to ICMP using the old shared default address (10.2.0.2) regardless of what you've configured locally, and need the BINAT workaround to be reachable for monitoring purposes.
- I initially assumed this was caused by reusing a client keypair across more than one server over time — it isn't. I tested this directly: generated a completely fresh keypair, used with exactly one server that had shown the problem, and it exhibited the exact same behavior. A fresh key doesn't avoid it.
- Real application traffic (browsing, curl, etc.) works fine either way, on every server I tested — this only affects ICMP-based health monitoring (dpinger, ping, etc.), which is why it's easy to miss if you're not specifically checking.
I honestly don't know why some servers behave this way and others don't — I've emailed ProtonVPN support asking for clarity and will update this post if I get a useful answer. It could be different infrastructure/software versions across the fleet, something account-side, or something else entirely.
Revised recommendation for anyone building multiple simultaneous tunnels: don't build the BINAT/NAT workaround preemptively for every new tunnel. Build the tunnel plainly first (unique local address, standard outbound NAT to "interface address"), then test:
- Check your gateway monitor status (dpinger, or just [tt]ping[/tt] from the firewall using the tunnel's local address as source).
- If ICMP fails but real traffic works, check your firewall's live packet log (Firewall > Log Files > Live View in OPNsense) for the blocked reply — look at the actual destination address.
- If it shows the old shared [tt]10.2.0.2[/tt] (or some other unexpected address) instead of your tunnel's real address, then add the 1:1 BINAT rule, translating that address back to your real one.
- If you ever change which server a tunnel connects to, re-check — a workaround needed for one server can actively break a different server that replies correctly on its own (learned this the hard way: an active BINAT rule caused a new block once I switched to a server that didn't need it, since its correctly-addressed replies no longer matched the state the BINAT rule expected).
"