What does "unreliable" mean?
Static or dynamic packet loss or time-dependent complete link-out?
Some stuff you could look into:
- udpspeeder (as mentioned above)
- mptcp
- glorytun
Those three do static FEC, MP (TCP) and MP (UDP) + VPN respectively.
In theory I guess you could run fx. udpspeeder+glorytun together and compensate both for packet losses and link-out.
For udpspeeder, you will probably need a UDP-based VPN running over it, for mptcp you will probably need a TCP-based VPN running over it, to make regular applications work.
MPTCP comes with a "path manager" that dynamically selects paths. It's part of the Linux kernel so should be of good quality. One could conceivably get OpenVPN to run on top of it.
I think that the usefulness of udpspeeder is limited to high latency links with packet losses that are pretty static. It does not have a feedback mechanism nor a "loss manager" to automatically adjust FEC parameters. Also debatable if it might not be better to use FEC lower in the stack before frames are discarded anyway by the ethernet FCS, so that the algorithm could correct bitflips and not just lost frames.
There are various projects and packages out there that might make the process easier (v2ray, openmptcprouter, tinyfecvpn, glorytun, many more).
If you don't need FEC and don't care about duplicated traffic, you could also look into something like what wireguard-multipath does, fx. using tc mirred
action or nftables dup
statement to mirror an encrypted tunnel over two paths.
Finally, there's also failover. For example, mwan3 can probe different paths and route around links that go silent.
Ooh, interesting suggestion!