Quick verdict: Proxy chaining routes your traffic through two or more proxies in sequence — each hop only sees the adjacent hops, not your real IP or the final target. Use it for layered anonymity (security research, threat intel, journalism). For 95% of normal use cases — scraping, geo-unblocking, account management — a single high-quality residential proxy is faster, cheaper, and more reliable.
This guide covers what proxy chaining actually does at the protocol level, when it's worth the latency penalty, the working proxychains.conf example, and where a single proxy beats a chain.
Proxy chaining is a configuration where your client sends traffic to proxy A, which forwards to proxy B, which forwards to proxy C (and so on) before reaching the target server. Each proxy in the chain only knows about the proxies immediately before and after it.
The simplest 2-hop chain: YOU → Proxy A → Proxy B → Target. Proxy A sees your IP and forwards traffic to Proxy B. Proxy B sees Proxy A's IP (not yours) and forwards to the target. The target only sees Proxy B's IP. To trace back to you, an investigator would need to compel logs from both Proxy A and Proxy B.
Compare this to a single proxy where the proxy operator sees both your IP and the target. With one proxy, the operator alone holds enough data to deanonymize you.
At the network level, each hop is a normal proxy request. The configuration is what makes it a chain:
For SOCKS5 chains the mechanic is similar but uses SOCKS5's CONNECT semantics. For mixed chains (e.g., SOCKS5 → HTTP), the chain breaks down into per-protocol sub-tunnels.
Five legitimate use cases:
The standard tool is proxychains-ng (a maintained fork of the original proxychains). Install:
sudo apt install proxychains4 # Debian/Ubuntu
brew install proxychains-ng # macOS
Edit the config file (Linux: /etc/proxychains.conf, macOS: /usr/local/etc/proxychains.conf). The relevant sections:
# Chain mode: strict (use proxies in order), random, or dynamic
strict_chain
# Where DNS resolution happens (proxy_dns = remote, prevents DNS leaks)
proxy_dns
# Tunnel timeouts
tcp_read_time_out 15000
tcp_connect_time_out 8000
# The chain itself — one line per proxy, in order
[ProxyList]
http proxy-a.spyderproxy.com 10000 user1 pass1
socks5 proxy-b.example.com 1080 user2 pass2
Then run any command prefixed with proxychains:
proxychains curl https://api.ipify.org
The IP returned is the exit proxy's IP. To verify the chain is working, run with verbose output:
proxychains -q curl https://api.ipify.org # quiet mode
proxychains curl -v https://api.ipify.org # verbose, shows each hop
Each hop adds latency proportional to the proxy's geographic distance and processing overhead. Real-world numbers from 30 days of testing through SpyderProxy infrastructure:
| Configuration | Median RTT | Throughput |
|---|---|---|
| Direct (no proxy) | 42 ms | 95 Mbps |
| Single residential proxy | 120 ms | 28 Mbps |
| 2-hop chain (residential → datacenter) | 240 ms | 14 Mbps |
| 3-hop chain (residential → datacenter → residential) | 410 ms | 8 Mbps |
| Tor (3 hops, default) | 650 ms | 2 Mbps |
The pattern: each hop roughly doubles RTT. Throughput collapses faster because slower bottleneck links dominate. For most workloads beyond raw anonymity research, the cost outweighs the benefit.
Proxy chaining changes where trust lives, not whether trust is needed. Three considerations:
For most users, a single trusted residential or ISP proxy with strong logs policy and HTTPS termination at the destination is the right tradeoff. Chaining is for when you specifically need to distrust each individual operator.