Secure Browsing Made Simple: Stop SNI, DNS, and DPI Leaks | Brav

Discover practical steps to eliminate SNI, DNS, and DPI leaks in your network. Learn how VPNs, Shadowsocks, and proxy chains protect privacy.

Secure Browsing Made Simple: Stop SNI, DNS, and DPI Leaks

Published by Brav

Table of Contents

TL;DR

  • SNI leaks expose the sites you visit; every browser sends the hostname in cleartext.
  • DNS queries reveal destinations unless tunneled or sent over DoH.
  • VPNs hide SNI/DNS but can be spotted by DPI; the handshake is a tell-tale pattern.
  • Shadowsocks encrypts traffic between proxies, turning the chain into random noise that DPI can’t decipher.
  • Combine a VPN (or WireGuard), a Shadowsocks proxy chain, and DNS-over-HTTPS for rock-solid privacy.

Why This Matters

I remember the first time I saw a colleague’s browser logs reveal their company name even when they were on a supposedly “private” VPN. That was a textbook SNI leak. For network admins and security pros, an undetected leak means that an ISP, employer, or a malicious actor can still see what you’re doing. For developers, it means your application’s traffic could be fingerprinted. Privacy advocates worry that any leftover data can be sold or used for surveillance. This article is the playbook I built to keep all those leaks out of sight.

Core Concepts

TLS vs HTTPS

HTTPS encrypts the payload of your web traffic, but the handshake that starts the session leaks the hostname in the Server Name Indication (SNI) field. The SNI is sent in cleartext, so anyone on the same network can see which domain you’re reaching even if the rest of the traffic is encrypted. [SNI — Wikipedia] (https://en.wikipedia.org/wiki/Server_Name_Indication)

DNS Leaks

When you type a URL, your client asks a DNS server to translate the domain to an IP. If that request is sent over the clear channel (UDP on port 53), the request is visible to any observer. [Domain Name System — Wikipedia] (https://en.wikipedia.org/wiki/Domain_Name_System)

DPI (Deep Packet Inspection)

DPI tools look at packet contents and patterns. A VPN like WireGuard sends a fixed-size UDP handshake that is easy to spot. [WireGuard Known Limitations] (https://www.wireguard.com/known-limitations/) Even if you’re using a VPN, DPI can often see the fact that some encrypted tunnel is active and can sometimes block it.

Proxies

An HTTP or SOCKS proxy operates at the application layer, forwarding traffic without decrypting TLS. The proxy simply passes the bytes; it can’t see inside the TLS session. However, traffic between proxies remains unencrypted unless you add another layer. [Zeek Log Formats — Zeek Docs] (https://docs.zeek.org/en/master/log-formats.html)

Proxy Chaining

When you chain proxies, no single node knows both your identity and your final destination. This separation of knowledge protects against a compromised intermediate proxy. The only hitch is that the hops in the chain are still in plain TCP unless you add encryption. [Transport Layer Security — Wikipedia] (https://en.wikipedia.org/wiki/Transport_Layer_Security)

Shadowsocks

Shadowsocks is a lightweight proxy that encrypts all traffic it forwards. It typically uses the ChaCha20-Poly1305 cipher, producing data that looks like random noise to any observer. [Shadowsocks Quick Guide] (https://shadowsocks5.github.io/en/config/quick-guide.html) [ChaCha20-Poly1305 — Wikipedia] (https://en.wikipedia.org/wiki/ChaCha20-Poly1305)

WireGuard

WireGuard is a modern VPN that runs on top of UDP. It’s fast, simple, and secure, but its handshake is a known DPI signature. [WireGuard — Wikipedia] (https://en.wikipedia.org/wiki/WireGuard)

DNS-over-HTTPS (DoH)

DoH hides DNS queries inside HTTPS traffic, thwarting passive eavesdropping. It’s an extra layer that many VPNs don’t do by default. [DNS over HTTPS — Wikipedia] (https://en.wikipedia.org/wiki/DNS_over_HTTPS)

ZEEK

ZEEK (formerly Bro) is a network monitoring engine that logs every session, including source/destination IPs, ports, and traffic volume. It’s a powerful way to spot unexpected leaks. [Zeek Log Formats — Zeek Docs] (https://docs.zeek.org/en/master/log-formats.html)

How to Apply It

Below is a practical, step-by-step recipe that a network admin can use to lock down all the leaks we just discussed.

1. Deploy a VPN that Supports DoH

  1. Install WireGuard on your server.
  2. Configure the client to use a DoH resolver (Cloudflare 1.1.1.1, Google 8.8.8.8) in its /etc/wireguard/wg0.conf.
    [Interface]
    PrivateKey = <client-key>
    Address = 10.0.0.2/32
    DNS = 1.1.1.1
    PostUp = iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
    
  3. Verify that the client can resolve domains via DoH (dig @1.1.1.1 with +https).
  4. Test that the VPN hides SNI: capture traffic on the client (tcpdump -i eth0 -nnS ‘udp port 51820’) and you should only see encrypted packets.

2. Add a Shadowsocks Layer Between the VPN and the Internet

  1. On the VPN server, run a Shadowsocks server (ss-server -s 0.0.0.0 -p 8388 -k mysecret -m chacha20-ietf-poly1305).
  2. On the client, configure a Shadowsocks client that points to the VPN server (ss-local -s 10.0.0.1 -p 8388 -k mysecret -m chacha20-ietf-poly1305).
  3. Configure your browser or OS to use the local Shadowsocks proxy (localhost:1080).
  4. The traffic now flows: Client → VPN → Shadowsocks Server → Internet.
  5. Because Shadowsocks encrypts the payload, DPI tools will see only random bytes and can’t fingerprint the protocol.

3. Chain Multiple Proxies (Optional)

If you need extra anonymity (e.g., in a heavily censored environment), add a second proxy (like a SOCKS5 or a 3rd-party proxy) behind Shadowsocks.

  • The first proxy (proxy A) forwards raw TLS to a Shadowsocks server (proxy B).
  • Proxy A sees only the client’s IP; Proxy B sees the final destination but not the client’s identity.
  • Traffic between proxies is protected by Shadowsocks encryption.

4. Monitor With ZEEK

  1. Install ZEEK on a monitor node that taps the VPN or the proxy interface.
  2. Enable the tls.log and conn.log modules.
  3. Run zeek -i and look for entries that match the pattern of your VPN port (51820) or Shadowsocks port (8388).
  4. If you see any unencrypted SNI or DNS requests in the logs, you have a leak.

5. Test Against DPI

Use a known DPI tool or a simple Wireshark capture.

  • Capture the handshake packets of WireGuard: you should see a 60-byte UDP packet with a predictable pattern.
  • Capture the Shadowsocks traffic: you should see random-looking data with no discernible headers.

Pitfalls & Edge Cases

IssueWhy it HappensMitigation
WireGuard DPI DetectionThe handshake uses a fixed packet size that DPI engines flag.Add an obfuscation layer (e.g., Shadowsocks) or use a WireGuard obfuscator.
Active ScanningFirewalls may block VPN ports after a few failed login attempts.Configure a fallback port (e.g., 443) or use a proxy to tunnel.
Proxy LatencyEach hop adds round-trip time.Keep the chain short and use low-latency providers.
DNS over IPv6Many systems still send IPv6 DNS queries to an unencrypted server.Force IPv4 DoH or configure IPv6 DoH resolvers.
Key ManagementShared keys can be leaked if stored insecurely.Use 3xUI to generate per-client keys and rotate them regularly.
ComplexityA long chain is hard to maintain.Document configurations and automate provisioning with IaC.

Quick FAQ

QA
What’s the difference between a VPN and Shadowsocks?A VPN tunnels all traffic at the IP level, encrypting headers and payloads, but can be DPI-detectable. Shadowsocks is an application-level proxy that encrypts the payload only; it hides the protocol but not the IP.
Can I use DNS-over-HTTPS with my VPN?Yes. Most VPNs let you specify a DoH server in the client config. DoH hides DNS queries from observers.
How does DPI detect VPN traffic?DPI looks at packet sizes, timing, and known signatures. WireGuard’s handshake is a fixed-size UDP packet that many DPI engines flag.
Why is SNI a leak?Because SNI is sent in cleartext during the TLS handshake, exposing the hostname.
Is 3xUI safe to use for key generation?3xUI is open source; it generates config files locally. As long as you keep the generated keys secret, it’s safe.
Can I run WireGuard inside a Shadowsocks proxy?Yes, you can tunnel the WireGuard client over Shadowsocks, adding an extra layer of obfuscation.
How do I monitor for leaks?Run ZEEK on a monitor interface and check tls.log for plaintext SNI or dns.log for non-encrypted queries.

Conclusion

You now have a layered defense: a VPN to hide your IP, DNS-over-HTTPS to mask DNS queries, and a Shadowsocks chain to hide the very existence of a tunnel from DPI. Combine that with ZEEK monitoring and you can see leaks before they become a problem.

Who should use this? Network administrators who need to provide secure browsing for employees; security professionals who want to audit and harden their infrastructure; developers deploying apps that must stay private; and privacy advocates looking for tangible steps.

If you’re just a casual user, a single VPN is probably enough—but don’t forget to enable DoH or use a reputable DNS provider.


References

Last updated: December 16, 2025

Recommended Articles

GPU Memory Testing Made Simple: Test RTX 3000 & AMD RX GPUs with the Kings_Overkill USB Drive | Brav

GPU Memory Testing Made Simple: Test RTX 3000 & AMD RX GPUs with the Kings_Overkill USB Drive

Guide for PC hobbyists and repair technicians on GPU memory testing, covering Kings_Overkill USB setup, BIOS tweaks, and interpreting test logs.