WebRTC, but obfs4 instead of DTLS
...or any other protocol.
This is very similar to #40244, which I created while researching this topic.
As we know, WebRTC data channels works like this: SCTP transport inside DTLS transport, inside ICE transport. Now, why do we have to constrain ourselves to DTLS when we can replace it with any other protocol? The Pion library is super modular and this seems very possible: https://pkg.go.dev/github.com/pion/ice .
Advantages (compared to regular Snowflake):
- As resistant to DPI as the protocol you choose (say, obfs4) (unlike DTLS, which some censors are willing to block (1, 2)).
Disadvantages:
- It's not actually WebRTC, so the browser extension won't be able to implement it.
What it does NOT solve, compared to regular Snowflake:
- The blocking of STUN. IP-, port- and DPI-based.
TODO:
- Think if it's worth to implement based on what it doesn't solve.
- Research STUNS (STUN over TLS) (as a censorship-resistant version of regular STUN).
- Research if it can work with STUN completely blocked for the client.
The creator of Pion said that he can help sketch up such a protocol.