Aviso de afiliación — Este artículo contiene enlaces de afiliado de Contabo. Si adquieres un VPS a través de ellos, ganamos una comisión sin coste adicional para ti. Solo documentamos lo que realmente utilizamos en producción en nuestros propios VPS.
Este es el defecto oculto de WireGuard del que nadie te advierte: configuras tu túnel, todo tu tráfico IP pasa por Contabo, te sientes seguro — excepto que tus consultas DNS siguen yendo a tu ISP, al router del hotel, o al resolver del Wi-Fi corporativo. Una fuga DNS destruye la promesa de privacidad de cualquier VPN: aunque tus datos estén cifrados, tu ISP sabe que visitas github.com, tu-banco.com, o cualquier otra cosa, porque resuelve los nombres por ti.
El problema es estructural a WireGuard. A diferencia de OpenVPN, el protocolo no toma ninguna posición sobre DNS — es un túnel IP puro. La directiva DNS = ... en tu .conf es solo una indicación para wg-quick y varía según el SO. Esta guía desglosa el porqué, cómo detectarlo, y las soluciones operativas por plataforma — basadas en un año de depuración de fugas reales en nuestros propios setups Contabo + WireGuard.
Cómo ocurre realmente una fuga DNS
Tres mecanismos distintos producen una fuga DNS en un cliente WireGuard:
1. El SO mantiene activos sus resolvers originales. En Linux sin resolvectl, el archivo /etc/resolv.conf es reescrito por NetworkManager, dhclient o systemd-resolved en cada evento (renovación DHCP, wake from sleep, cambio de red). El DNS que habías configurado vía wg-quick queda sobreescrito. La aplicación hace una consulta → el sistema interroga el DNS original → ese DNS ve tus consultas fuera del túnel.
2. Los navegadores con DNS over HTTPS / DNS over TLS cortocircuitan el SO. Firefox y Chrome traen DoH activado por defecto en muchas regiones. Cuando el navegador abre una conexión DoH hacia mozilla.cloudflare-dns.com, esa conexión sí transita por el túnel WireGuard (hasta ahí bien), pero el navegador cortocircuita completamente el resolver local. Si un proveedor DoH guarda logs, tus consultas son visibles allí, de otra forma.
3. Apps con resolvers hardcodeados. Algunas apps (Spotify, ciertas apps de Microsoft, algunos juegos) hardcodean 8.8.8.8 o sus servidores propietarios. Realizan una consulta UDP/53 directamente a 8.8.8.8 — y si tu firewall no bloquea eso fuera del túnel, la consulta sale.
La conclusión es brutal: una fuga DNS no es un bug de WireGuard, es un estado estructural de los sistemas operativos. Hay que bloquear activamente las cosas para prevenirlo.
Detección fiable — las herramientas correctas
Olvida los tests cosméticos de fugas por un momento. Aquí están las tres pruebas que ejecutamos cada vez que sospechamos una fuga:
Test 1: dnsleaktest.com (extended) + ipleak.net
Ambos sitios hacen lo mismo: cargan una página que realiza consultas DNS a subdominios únicos generados aleatoriamente, luego comprueban del lado del servidor qué resolvers solicitaron esos subdominios. Si ves resolvers en tu país de origen (tu ISP, el Wi-Fi de tu empresa), es una fuga. Si solo ves resolvers de la región de tu VPS (Cloudflare DE, Hetzner DE), estás limpio.
dnsleaktest.com/extended-test | ipleak.net
Test 2: tcpdump en el servidor (el más fiable)
Esta es la prueba realmente estanca. En tu VPS que aloja WireGuard:
tcpdump -i wg0 -n udp port 53
Déjalo corriendo. En tu cliente (laptop, móvil) conectado al túnel, escribe curl https://example.com. Debes ver una consulta DNS en el tcpdump en wg0. Si no ves nada, tu cliente resolvió el DNS sin pasar por el túnel = fuga.
Alternativa en el propio cliente, aún más limpia:
sudo tcpdump -i any -n udp port 53 and not net 10.66.0.0/16
Donde 10.66.0.0/16 es tu subred del túnel WireGuard. Si aparece algo aquí, es una fuga — tráfico DNS que fluye fuera del túnel.
Test 3: resolvectl status (solo Linux)
resolvectl status
Para cada interfaz, ves los servidores DNS en uso. La interfaz wg0 debe listar tu DNS de túnel, e idealmente la interfaz eth0 no debe tener servidores DNS (o estar ignorada). Si eth0 mantiene activos los resolvers de tu ISP, las aplicaciones los usarán cuando la resolución DNS falle en wg0 (comportamiento fallback).
Soluciones operativas por plataforma
Linux desktop — la solución más robusta
Recomendación: systemd-resolved + DNS por interfaz + bloqueo nftables.
En tu .conf de WireGuard, el bloque [Interface]:
[Interface]
PrivateKey = ...
Address = 10.66.0.2/24
DNS = 10.66.0.1
PostUp = resolvectl dns %i 10.66.0.1; resolvectl domain %i '~.'
PreDown = resolvectl revert %i
El dominio ~. le dice a systemd-resolved "todas las consultas DNS van por esta interfaz". El PreDown revierte al desconectar.
Luego el bloqueo nftables — bloquear todo tráfico DNS que NO vaya a tu VPS:
nft add table inet vpn_lock
nft add chain inet vpn_lock output { type filter hook output priority 0 \; }
nft add rule inet vpn_lock output udp dport 53 ip daddr != 10.66.0.1 drop
nft add rule inet vpn_lock output tcp dport 53 ip daddr != 10.66.0.1 drop
Persiste esto en /etc/nftables.conf para sobrevivir reboots. Esta regla bloquea cualquier paquete UDP/TCP 53 que no vaya a tu resolver del VPS. Brutal pero efectivo — cualquier fuga queda físicamente bloqueada.
Windows 10/11
El cliente WireGuard nativo respeta correctamente DNS = ... a través del driver Wintun. El problema: el split DNS no es ideal por defecto, y el DoH en Edge/Chrome puede cortocircuitar.
Pasos:
- En tu .conf,
DNS = 10.66.0.1(tu resolver del VPS). - Deshabilitar DoH en el navegador: en Chrome
chrome://settings/security→ desmarcar "Usar DNS seguro"; en Edge la misma configuración. - Hardening del firewall: Firewall de Windows Defender Seguridad avanzada → regla de salida bloqueando UDP/53 excepto a la IP de tu VPS. Comando PowerShell:
New-NetFirewallRule -DisplayName "Block DNS Leak" `
-Direction Outbound -Protocol UDP -LocalPort 53 `
-RemoteAddress "!10.66.0.1" -Action Block
El ! inicial significa "cualquier cosa excepto". Ajusta 10.66.0.1 a la IP de tu resolver del VPS.
macOS Sonoma/Sequoia
El cliente WireGuard de macOS (App Store) respeta el DNS correctamente. Pero la caché de mDNSResponder y la proximidad con .local pueden dar sorpresas.
Pasos:
- Config WireGuard:
DNS = 10.66.0.1. - Tras conectar, vacía la caché DNS:
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder. - Deshabilitar DoH en el navegador (igual que en Windows).
- Verificar con
scutil --dnsque solo aparece tu DNS de túnel en el bloque "resolver #1".
iOS — el cliente WireGuard es honesto
El cliente oficial de WireGuard para iOS respeta DNS = ... correctamente. Normalmente no tienes que hacer nada más. Ojo con:
- Safari puede usar iCloud Private Relay si está activo, lo que añade una capa extra (Cloudflare/Akamai) — no es una fuga, pero cambia el routing.
- Las apps que usan puertos no estándar (algunas VoIP) pueden saltárselo — raro pero existe.
Test real: activa el túnel, ve a dnsleaktest.com en Safari, deberías ver solo resolvers de la región de tu VPS.
Android — el caso más complicado
El cliente oficial de WireGuard para Android gestiona el DNS parcialmente. El problema clásico: getprop net.dns1 de Android mantiene el DNS original activo, y algunas apps de Android consultan esa propiedad directamente, saltándose el túnel.
Mitigaciones por orden de preferencia:
- DNS privado de Android (Ajustes → Red → DNS privado) con un servidor DoT que controles:
dns.adguard.como tu propio servidor con Unbound + soporte DoT. DoT funciona incluso sin VPN, así que es una capa base de protección. - AdGuard Home o NextDNS como proveedor de DNS privado: mismo setup, pero controlas totalmente el resolver.
- AFWall+ (requiere root): bloquea todo tráfico DNS salvo hacia tu VPS. Opción más agresiva, requiere root.
Veredicto honesto: Android WireGuard + DNS privado apuntando a tu propio VPS es el setup más robusto que hemos probado. Cero fugas en 6 meses de uso intensivo con el móvil.
Setup robusto en el VPS — Unbound en Contabo
La otra mitad de la ecuación es quién responde el DNS en tu VPS. Por defecto, si tu cliente WireGuard apunta a 10.66.0.1, ese es tu VPS — y el VPS mismo necesita un resolver real. Dos opciones viables:
Opción A: Unbound (purista, recursivo completo)
Unbound consulta directamente las raíces DNS. Cero logs de terceros. El setup de privacidad más limpio. Instalación en un VPS Contabo S (Debian 12):
apt install unbound unbound-anchor
Config mínima en /etc/unbound/unbound.conf.d/vpn.conf:
server:
interface: 10.66.0.1
access-control: 10.66.0.0/24 allow
hide-identity: yes
hide-version: yes
qname-minimisation: yes
use-caps-for-id: yes
prefetch: yes
cache-min-ttl: 300
cache-max-ttl: 86400
num-threads: 2
msg-cache-size: 50m
rrset-cache-size: 100m
Reinicia: systemctl restart unbound. Test desde un cliente: dig @10.66.0.1 example.com — deberías obtener una respuesta con ANSWER SECTION.
Opción B: AdGuard Home (filtrado + UI)
Si quieres bloqueo de publicidad y trackers a nivel DNS, AdGuard Home es la opción fácil. Web UI, listas de filtros (EasyList, EasyPrivacy, OISD, …), estadísticas por cliente. Instalación:
curl -s -S -L https://raw.githubusercontent.com/AdguardTeam/AdGuardHome/master/scripts/install.sh | sh -s -- -v
Setup web en el puerto 3000 → configurar escucha en 10.66.0.1:53. Upstream: dejar el stack DoT/DoH por defecto (o encadenar a Unbound en 127.0.0.1 para el modo purista completo).
Nosotros ejecutamos AdGuard Home → Unbound en nuestro propio Contabo. Lo mejor de ambos mundos: filtrado + cero logs.
Montar cualquiera de las dos opciones lleva 15 minutos en un VPS Contabo S recién provisionado a 4,99 €/mes (setup completo: tutorial Contabo paso a paso). El coste total se mantiene en 60 €/año para un VPS que gestiona WireGuard + tu resolver DNS de una sola vez.
Hardening DNS en el lado del VPS
Tres ajustes adicionales en el hub WireGuard que hacen las fugas DNS mucho más difíciles:
1. Forzar el DNS del túnel via iptables/nftables. En el VPS, interceptar cualquier tráfico UDP/53 que provenga de la subred WireGuard y redirigirlo a tu resolver local:
nft add rule ip nat prerouting iif wg0 udp dport 53 dnat to 10.66.0.1
Incluso si un cliente intenta consultar 8.8.8.8 directamente, el VPS intercepta y responde vía Unbound. Brutal pero a prueba de balas.
2. Bloquear fugas IPv6 en el servidor. Si tu VPS no deshabilita IPv6 en la interfaz wg0, algunos clientes fugarán DNS por IPv6 fuera del túnel. Deshabilita IPv6 completamente en el VPS (net.ipv6.conf.all.disable_ipv6=1 en /etc/sysctl.conf), o añade una ruta IPv6 ::/0 a través de wg0 en el AllowedIPs de los clientes.
3. Monitorización saliente de DNS inusual. Configura un cron diario en el VPS que audite los logs de Unbound buscando consultas de IPs externas (no pertenecientes a 10.66.0.0/24). Si llegan consultas desde fuera, tu túnel tiene fugas o está abierto. Consulta nuestro monitoreo WireGuard VPS con Prometheus + Grafana para un setup listo para dashboard.
Falsos positivos comunes — sin pánico
Dos situaciones que parecen fugas pero no lo son:
1. iCloud Private Relay (macOS/iOS). Si tienes Private Relay activo, las consultas DNS son retransmitidas doblemente por Apple + Cloudflare/Akamai. dnsleaktest.com a veces muestra "Cloudflare US" en lugar de tu DNS de túnel — eso es comportamiento esperado, no una fuga. Deshabilita Private Relay si quieres ver únicamente tu DNS de túnel.
2. Browser DoH (Firefox, Chrome). Con DoH activo, tu navegador bypasea el resolver del SO y consulta un servidor DoH (cloudflare-dns.com por defecto en Firefox). Técnicamente no es una fuga — la conexión va por el túnel WireGuard — pero sí significa que un tercero (Cloudflare) ve tus consultas. Deshabilita el DoH del navegador si quieres que todas las consultas pasen por tu resolver del VPS.
Veredicto final — la checklist anti-fugas en 5 minutos
Por orden de prioridad, lo que hay que implementar para eliminar las fugas DNS en un WireGuard self-host:
DNS = 10.66.0.1en tu .conf +PostUp = resolvectl dns %i 10.66.0.1; resolvectl domain %i '~.'en Linux.- Firewall nftables/iptables que bloquee UDP/TCP 53 fuera del túnel en el cliente.
- Resolver en el VPS: Unbound o AdGuard Home en
10.66.0.1. - DNAT en el VPS para UDP/53 desde wg0 hacia 10.66.0.1.
- Deshabilitar DoH en el navegador (o aceptar que Cloudflare vea tus consultas).
- Verificar con
tcpdump -i any -n udp port 53en el cliente — cero tráfico fuera de wg0 es el objetivo.
Un setup limpio de WireGuard en Contabo con este stack: cero fugas en 12 meses de uso intensivo. No hay magia — el protocolo es sólido, los sistemas operativos son problemáticos, y el bloqueo es estructural, no opcional.
Para profundizar
- Auto-alojar VPN en Contabo: guía completa WireGuard 2026
- Tailscale vs WireGuard self-host: cuál elegir en 2026
- Cloudflare WARP vs WireGuard self-host 2026
- Kill switch VPN en Linux: iptables + systemd
- Monitorizar VPN VPS con Prometheus + Grafana
Fuentes y referencias:
- WireGuard whitepaper — Jason A. Donenfeld
- Unbound — resolver DNS recursivo
- AdGuard Home — bloqueador DNS de código abierto
- Manual de systemd-resolved
- dnsleaktest.com extended
Publicado el 2026-06-08. Tests y soluciones validados en Debian 12, Ubuntu 24.04, Windows 11 23H2, macOS Sonoma 14.5, iOS 17.5, Android 14 — con un VPS Contabo S Núremberg ejecutando WireGuard 1.0.20210914 + AdGuard Home + Unbound. El comportamiento puede diferir en otras distribuciones o versiones de SO — verifica siempre tu propio setup con tcpdump antes de considerarlo a prueba de fugas.
Aviso: WireGuard y el self-hosting de resolvers DNS son perfectamente legales en la UE, EE.UU., Canadá y la mayoría de países democráticos. VPNSmith publica este contenido con fines educativos.
★ Datacenter Nuremberg GDPR · ✓ IPv4 dédiée incluse · 200+ Mbps garantis
Probar Contabo30 jours satisfait ou remboursé→