It’s slow, but it works and is a handy “last resort” tool.
https://github.com/yarrick/iodine
Regarding cloudflare DNS over HTTPS: It could be that it tries to server data encoded as JSON, which is impossible in JSON. Some control characters and bytes 128-255 cannot be represented as JSON strings.
Otherwise there's https://github.com/yarrick/iodine
Edit: seems like others have recommended it already. I got it working in a hotel room once after giving up on the utterly broken ToS acceptance page for the WiFi.
Using DNS to exfiltrate arbitrary data thru firewalls that don’t log DNS requests is handy too.
If you want to RUN a VPN, master iptables and enterprise networking: https://www.amazon.com/Linux-Firewalls-3rd-Steve-Suehring/dp... .
If you want to WRITE a VPN, read the source of a few openly available relatively simple VPN/tunnel implementations.
https://github.com/yarrick/iodine https://github.com/jpillora/chisel
Familiarise yourself with packet layers. Fantastic resource: https://github.com/netspooky/protocols/tree/main/broadcast_b...
A major advantage of this approach is that it leverages a port and protocol that’s rarely blocked, and if 53 is blocked, you can generally still use the approved local dns servers for your data-carrying queries.
These days, it looks like there are at least a few well-known pieces of software to do this, e.g. https://github.com/yarrick/iodine
https://github.com/yarrick/iodine
Allows exfiltrating data using dns.
"Free" Wifi in the whole world after that as most AP allow DNS requests.