🔥 LAUNCH SALE — up to +60% bonus traffic · Residential from $0.67/GB · code BACK15 Claim →
Log in Get proxies
PyProxy is back — buy residential, ISP, mobile & datacenter proxies directly, from $0.67/GB. Launch bonus up to +60%.
Technical · UDP through proxies

UDP through proxies: what carries it, and what to do instead

The honest answer to "how do I send UDP through my proxy" is usually that you cannot, and that the thing you are trying to achieve does not need UDP anyway. Here is why the protocols work that way, how to push a stubborn client back onto TCP, and where a VPN or your own server is genuinely the right tool.

Why an HTTP proxy cannot carry UDP at all

This is not a licensing decision or a missing feature. The HTTP proxy protocol is defined on top of TCP. A client either sends an ordinary HTTP request with an absolute URL over a TCP connection to the proxy, or it sends CONNECT host:443 and the proxy opens a second TCP connection and splices the two together so TLS can flow end to end.

There is no message anywhere in that protocol that means "send this datagram to that address and give me back whatever comes in reply". UDP has no connection to splice — it is individual packets with no handshake, no ordering and no session for a proxy to hold on to. So no configuration, header or flag makes an HTTP proxy pass UDP. If your tool says "proxy set" and then sends UDP, it is not sending it through the proxy; it is sending it directly.

State it plainly: PyProxy's residential product is HTTP and HTTPS. It does not support SOCKS5, and it does not carry UDP. If your requirement is genuinely datagrams, this is the wrong layer and the sections below tell you what to reach for instead.

SOCKS5, UDP ASSOCIATE, and why it is so rarely available

SOCKS5 is the one proxy protocol with a real answer for UDP. Alongside CONNECT and BIND, RFC 1928 defines UDP ASSOCIATE: the client opens a TCP control connection to the proxy, asks for a UDP association, and the proxy replies with an address and port to which the client may send datagrams. Each datagram is wrapped in a small SOCKS header naming the real destination. The proxy unwraps it, forwards the payload, and wraps replies on the way back. The TCP control connection stays open for the lifetime of the association — drop it and the association dies.

That mechanism is optional, and in practice most of the industry skips it. Three reasons recur. It needs per-client UDP state on the proxy with no connection semantics to drive cleanup, which is unpleasant to operate. It is a natural amplification and abuse vector, so anyone with a public endpoint has a reason not to expose it. And on residential networks the exit is a consumer device behind carrier NAT, where inbound datagrams to a negotiated port are unreliable even when everything is implemented correctly.

So the practical rule: assume UDP ASSOCIATE is unavailable unless a provider states in writing that it is supported on the specific product you are buying. "SOCKS5 supported" on a pricing page almost always means TCP through SOCKS5 and nothing more. Test rather than assume, and if it matters commercially, ask support before you pay — for PyProxy that is @PyProxyBack on Telegram.

What people actually need UDP for

Before engineering around this, check which of these you are really facing, because two of the four have clean answers that do not involve UDP.

TrafficWhat it needsRealistic approach
QUIC / HTTP/3UDP 443Turn it off; every site that serves HTTP/3 also serves HTTP/2 over TCP
DNSUDP 53Let the proxy resolve names remotely, or use DNS over HTTPS on TCP 443
Game trafficUDP, low latencyVPN or a server near the game region; a proxy is the wrong tool
VoIP, WebRTC, video callsUDP media, sometimes TCP fallbackVPN; or accept the TURN/TCP fallback and its quality cost

DNS is the case that surprises people. When you hand a hostname to an HTTP proxy — the whole hostname, not a pre-resolved address — the proxy does the lookup at its end. Your machine never sends a DNS query for that name, so there is nothing to route. With curl, -x http://... plus a URL already behaves this way. What breaks it is resolving locally first and then connecting to a literal IP: now the lookup leaks from your real address and the proxy only sees an address.

Forcing a client onto TCP, and the HTTP/3 leak

Modern browsers and many HTTP libraries prefer HTTP/3 when the server advertises it, and HTTP/3 rides QUIC over UDP. This produces the single most common "my proxy is not working" report: the page loads, the proxy log is empty, and a check page shows your real address. Nothing is broken. The client saw Alt-Svc: h3, opened a UDP socket to port 443, and your HTTP proxy setting was simply not applicable to that socket.

Chromium-based browsers usually disable QUIC when a proxy is configured, but "usually" is not a guarantee across builds, extensions, PAC files and system-wide settings — so turn it off explicitly:

chrome --disable-quic --proxy-server="http://127.0.0.1:8080"

# or, in the UI:
#   chrome://flags/#enable-quic  ->  Disabled

In Firefox, open about:config and set network.http.http3.enable to false. Command-line tools generally either need HTTP/3 requested explicitly, or expose a --no-quic style switch; with curl, HTTP/3 is opt-in via --http3, and you can pin a version if a library is choosing for you:

curl --http1.1 -x http://USERNAME-country-us:PASSWORD@gw.pyproxy.com:1111 https://httpbin.org/ip

If you want certainty rather than a setting somebody can flip, block the datagrams at the operating system. Anything that wanted QUIC then falls back to TCP, which is exactly what you want:

# Linux
sudo iptables -A OUTPUT -p udp --dport 443 -j REJECT
sudo iptables -A OUTPUT -p udp --dport 80  -j REJECT

# Windows, elevated
netsh advfirewall firewall add rule name="Block QUIC out" ^
  dir=out action=block protocol=UDP remoteport=443

Then verify with the proxy in place. The address in the response should be the exit address, and it should still be that address on the next call within the same session — a session token in the username holds one PyProxy exit address for about thirty minutes, which is what keeps a multi-step job coherent. If the reported address ever flips back to your own, something is still escaping over UDP.

When the right answer is a VPN or a dedicated server

A proxy is an application-level relay for application traffic. A VPN is a virtual network interface: WireGuard and OpenVPN move IP packets, so TCP, UDP, ICMP and DNS all traverse it without the application knowing. That difference, not marketing, is why game traffic and voice belong on a VPN.

Reach for one of these instead of a proxy when:

And keep using proxies for what they are unbeatable at: HTTPS requests that need to appear to come from a particular place, at a particular scale, with the address swappable per request. That is a TCP problem, which is why the tooling is TCP-shaped. A working line looks like this, and the username carries the options:

curl -x http://USERNAME-country-us:PASSWORD@gw.pyproxy.com:1111 https://httpbin.org/ip

If you are not sure which side of the line your project falls on, the cheap move is to try the HTTP path first with QUIC disabled. In most cases the UDP requirement turns out to be an optimisation the client chose on its own, not something your target needs.

PyProxy residential starts at $0.67/GB with traffic that never expires. Link Telegram to a new account and the first gigabyte is free — no card, no deposit.
See proxy plans Get 1 GB free

Questions people ask

Can an HTTP proxy carry UDP traffic?

No. The HTTP proxy protocol is defined over TCP: a plain request is forwarded on a TCP connection and CONNECT opens a TCP tunnel. There is no message in the protocol that says send this datagram, so no configuration of an HTTP proxy will pass UDP.

Does PyProxy's residential product support UDP?

No. PyProxy residential is HTTP and HTTPS only and does not support SOCKS5, which means it carries TCP traffic and does not carry UDP. If your tool must send datagrams, a proxy of this kind is the wrong layer for the job.

Why does some traffic bypass my proxy entirely?

Usually HTTP/3, which runs over QUIC on UDP port 443. If the client tries QUIC and the network lets the datagrams out, the request never touches your HTTP proxy and leaves from your real address. Disable HTTP/3 in the client, and block outbound UDP 443 locally if you want certainty.

What should I use if I genuinely need UDP through another address?

A VPN or your own server. WireGuard and OpenVPN move IP packets, so UDP for games, VoIP and DNS works naturally, and a rented server with a VPN or a SOCKS5 daemon you configure yourself gives you a fixed address you control. Proxies are for application traffic over TCP.