fshy

Home / Egress and tunnels

udp-over-tcp (mullvad)

github.com/mullvad/udp-over-tcpTool (wireguard transport)egress/mullvad-udp-over-tcpJSONcomparereport an errorprovider JSON

Free allowance
No service and no account; a Rust library with two binaries, udp2tcp and tcp2udp
Verdict
self-hosted, last resortverdict paid-only: no free allowance; listed for its price. Self-hosted options are listed last, because this site is for users who have no hardware.
Cost
no price statedsee Price below
Identity
anonymousno card, no phone
Binding limit
noneno named constraint binds
Evidence
documented4 sources; a first-party page was read and the sentence quoted
Freshness
stale on 2026-11-23checked 2026-10-23 (live); stale on 2026-11-23
Free tierno service and no account; a Rust library with two binaries, udp2tcp and tcp2udp
unit none; metered on none
PriceUSD 0
Bindingnone the constraint is the server half, which is why Mullvad itself can offer the feature and a client cannot get it for free
Identityanonymous no account
Egressnot applicable; the software states no volume; ingress: tcp
free allowance: none published
Interfacecli udp2tcp and tcp2udp binaries, or the Rust crate
Toolingcargo; two binaries, embeddable as a library
Composes withcomposes with a server host; the Mullvad deployment of it is a paid provider feature recorded elsewhere.
Reliabilityone udp2tcp instance handles one peer only; the server spawns a UDP socket per TCP connection
NotesIncluded because it is the production-grade reference for the technique and the ancestor proxyguard names. Its existence also explains why the wrapper question is a hosting question: Mullvad can offer WireGuard over TCP because it owns the server half. A library alone cannot give the same thing without a server to run it. The 16-bit length prefix caps a datagram at 65535 bytes, which is not a real constraint for WireGuard's MTU.
Evidence notedocumented its behaviour inside the Mullvad app is not testable without a subscription; the library's own protocol is documented
Parsed numbers
  • has-free-tier 0
  • price USD 0
Evidence 4
datesourcewhat it proved
2026-10-23github.com/mullvad/udp-over-tcp"A library (and binaries) for tunneling UDP datagrams over a TCP stream"; tcp2udp example forwarding 10.0.0.0:5001/TCP to 127.0.0.1:51820/UDP
2026-10-23github.com/mullvad/udp-over-tcpthe wire format: "Each datagram is preceded with a 16 bit unsigned integer in big endian byte order"
2026-10-23github.com/mullvad/udp-over-tcp588 stars, no GitHub releases, last push 2026-08-17
2026-10-23mullvad.net/en/blog/introducing-wireguard-over-tcp-and-ipv6Mullvad deploys WireGuard over TCP on its own servers and switches to it with 'mullvad relay set tunnel wireguard --protocol tcp'
More fields 9
wg pathnone
wg detailtcp2udp runs on the server and forwards to 127.0.0.1:51820; udp2tcp runs on a user beside the WireGuard interface
ingresstcp
volume statednot applicable; the software states no volume
bytes transityes
transit notethrough the tcp2udp server, which owns the UDP socket to WireGuard
hosting requirementa server host running tcp2udp; the client binary goes beside the WireGuard interface
last releaseno GitHub releases; last push 2026-08-17
stars588
Unknown values 2
  • per object cap stated: the field does not apply to this kind of offer
  • retention stated: the field does not apply to this kind of offer