Description
Problem
One of the major shortfalls of Wiretap is that without third party tools, the top-level transport is always WireGuard/UDP.
A workaround for wrapping the transport in TCP is provided in the Experimental section of the README: https://github.com/sandialabs/wiretap?tab=readme-ov-file#tcp-tunneling, but raises the complexity of deployment quite a bit and involves other binaries.
Proposed Solution
Add the concept of "Transport Plugins" to the Wiretap binary that allows for tunneling WireGuard over other protocols (I'm thinking websockets as the first proof of concept, but could be DNS/ICMP/etc.)
There will be performance issues with these plugins and require an additional listener on the client, so we should be clear about the trade-offs in the docs.
What I think we need for v1 of this feature:
- Optional transport plugin argument, changing the transport that servers use to communicate back to clients
- Implementation of at least one transport plugin (e.g., websockets)
- Client-side listener to unwrap the underlying WG data and forward it to the proper interface