VPN with failover internet connections

I have setup a router with 3 different internet connection possibilities:

  • wired ethernet
  • wireless
  • 4G

Each network has a different distance for the default route (in DHCP client) so when there are one
or more active networks the proper one is selected from the above list.
This works fine in itself, e.g. when wired is available it takes precedence, and 4G is only used when
the other two are not available.

The problem I am facing is this: sometimes a network works OK at the DHCP level, i.e. the router
gets an address and the default route is set, however in reality the network does not route to
internet. I want to setup a reliable VPN from this router, and when I just configure L2TP/IPsec
or SSTP it works OK when the best network from the above list is able to connect it, but when it
isn’t I lose my VPN. E.g. sometimes a wireless network does not allow the L2TP/IPsec connection
and I am left with a dead link although it would still have worked over 4G.
I tried SSTP over such a network and it works, but now it turns out that SSTP does not recover when
the default route (and thus the desired source address) changes midway. So again the link has died
and I have to visit the site.

Unfortunately there is no way to specify a source address (or even better: a source interface) in the
L2TP or SSTP clients. If so I could decide to setup 3 different clients and each of them only tries to
connect when the corresponding internet interface is up. I could then arrange that when more than
one opf these comes up, only the preferred one is used.

Is there another way to solve this? I would prefer not to have a complicated script that configures
the router on-the-fly to enable/disable interfaces, tunnels, rules etc. Something that just works by
preference/distance like the low-level routing solution I use is preferred.