If you can have SIDE_A connect to SIDE_B and enable persistent-keepalive, that should take care of things mostly. If you can't do that for whatever reason, there are hole punching tricks like [1] and [2]. [1] https://git.zx2c4.com/WireGuard/tree/contrib/examples/nat-hole-punching [2] https://github.com/manuels/wireguard-p2p