Búsqueda de sitios web

Por qué tu tráfico DNS es una fuga de privacidad y cómo solucionarlo de una vez por todas


¿Te preocupa tu privacidad? ¿Te preocupa que tu proveedor de servicios de internet recopile tus datos? Las consultas DNS son una forma en que los fisgones pueden hacer tu perfil, y el DNS encriptado es la respuesta. Sin embargo, no todos son iguales, pero tengo una solución que puede proteger verdaderamente tu anonimato.

El problema y la solución

Tus consultas DNS filtran cada solicitud web que haces

DNS (Sistema de Nombres de Dominio) es un medio para mapear nombres de dominio (como example.com) a direcciones IP. Cuando realizas una solicitud web, tu sistema envía un paquete DNS a Internet hacia un servidor DNS (llamado resolutor recursivo). Ese sistema luego realiza una serie de solicitudes subsecuentes para resolver tu consulta. Todo el proceso ocurre a través de un protocolo de texto claro, lo que significa que cualquier persona que espíe en la red (como tu proveedor de Internet) puede construir un perfil detallado de tus hábitos de navegación. Cubrí esto extensamente en otro artículo que escribí. Te recomiendo que leas primero ese.

¿Entonces qué podemos hacer al respecto? La conclusión a la que se llegó anteriormente fue encriptar las consultas DNS. Aunque no es una solución perfecta, ofrece la mejor protección que tenemos y ciertamente hace que el perfilado sea mucho más difícil.

DNSCrypt Proxy es una de esas opciones. Es un programa de software (servicio) que se ejecuta en cualquier computadora, como tu escritorio o portátil. Luego actualizas la configuración de DNS de tu sistema operativo para enrutar las consultas a través de él—más sobre eso más adelante.

Instalar DNSCrypt Proxy

Un servicio local que acepta y cifra consultas DNS

Este es el programa de software que ejecutas en tu computadora y que acepta y encripta consultas DNS. En el archivo de configuración, le indicamos a dónde enviarlas.

El resto de la guía se centrará en Linux, pero puedes consultar las guías oficiales para Linux, Windows, macOS o varias otras plataformas. La siguiente sección de configuración es universal para todas ellas, y lo mismo ocurre con las explicaciones, por lo que seguirla es útil independientemente de lo que uses.

Cualquiera de estos métodos mencionados te ayudará a instalar y configurar el servicio.

Configurar DNSCrypt Proxy

Un formato de configuración universal en todas las plataformas

La configuración es la parte difícil, y compartiré contigo mi experiencia sobre lo que funciona.

Para ubicar el archivo de configuración de su plataforma, consulte las guías oficiales, pero en Linux, la ubicación es: /etc/dnscrypt-proxy/dnscrypt-proxy.toml.

Editaremos el archivo de configuración (TOML) para hacer que las consultas DNS pasen por un relé.

Primero, configure la dirección de escucha para que el servicio escuche en su computadora local usando el puerto DNS típico (53):

listen_addresses = [ "127.0.0.1:53", "[::1]:53" ]

Esto permite que los programas encuentren y usen fácilmente el Proxy DNSCrypt. "127.0.0.1" y "[::1]" son la computadora local (también conocida como localhost) para IPv4 y IPv6, respectivamente.

A continuación se muestran los nombres de los servidores. DNSCrypt Proxy descarga listas de resolutores, que incluyen configuraciones remotas llamadas sellos. Proporcionamos los nombres de estos sellos de la siguiente manera:

server_names = [ "server-name-1", "server-name-2" ]

Un sello es una cadena de configuración codificada y pública: contiene una dirección pública e información de cifrado. Por ejemplo, este es uno de los sellos de Quad9 para el servidor llamado "quad9-dnscrypt-ip4-filter-ecs-pri":

sdns://AQMAAAAAAAAADTkuOS45LjExOjg0NDMgZ8hHuMh1jNEgJFVDvnVnRt803x2EwAuMRwNo34Idhj4ZMi5kbnNjcnlwdC1jZXJ0LnF1YWQ5Lm5ldA

Así es como se ve decodificado:

Esto solo muestra el propósito y la función de los sellos.

Como nota al margen, la primera mitad de este video presenta Quad9. Es independiente de DNSCrypt, así que no los confundas. Puedes usar Quad9 sin DNSCrypt, lo cual se explica en la segunda mitad del video. Sin embargo, de esa manera no obtienes consultas encriptadas, así que ten cuidado. Es mejor usarlos juntos a través del servicio DNSCrypt de Quad9.

Volviendo a DNSCrypt. Cuando configuras un nombre de servidor, le estás diciendo a DNSCrypt Proxy qué servidores públicos (stamps) utilizar. Para usar el stamp mencionado arriba, configurarías:

server_names = [ "quad9-dnscrypt-ip4-filter-ecs-pri" ]

Usted elige servidores de la lista pública de servidores de DNSCrypt.



Para seleccionar un servidor adecuado, ordena la lista ("1") por el protocolo "DNSCrypt" primero ("2"), luego utiliza el nombre a la izquierda ("3"). La segunda imagen muestra información adicional del servidor, incluido el sello—esto es lo que DNSCrypt Proxy descarga cuando le das un nombre de servidor.

Ahora, sobre los relés, que son servidores intermedios que respetan la privacidad y anonimizan tus consultas. Si deseas usarlos (y deberías), entonces necesitas configurar la opción "routes" en la sección "anonymized_dns". El enfoque más sencillo es hacer que DNSCrypt Proxy retransmita todas las solicitudes mientras selecciona esos saltos al azar:

[anonymized_dns]
routes = [
  { server_name = "*", via = ["*"] }
]

Además, el enfoque anterior puede tardar un tiempo en funcionar inicialmente, porque necesita encontrar un relé que funcione.

Sin embargo, puedes elegir relés específicos así:

[anonymized_dns]
routes = [
    { server_name = "*", via = [ "relay-example-1", "relay-example-2" ] },
]

Eso enviará todas las consultas destinadas a cualquier servidor a través de relés llamados "relay-example-1" y "relay-example-2."

Puedes obtener una lista completa de relés de la lista pública de servidores de DNSCrypt.



Si hace clic en el encabezado (anotación "1"), puede ordenar la lista por relés ("2"). El nombre del servidor de relé está a la izquierda ("3").

Muchos de estos servidores de retransmisión son propiedad de la comunidad, así que ten cuidado con tu elección. Sin embargo, recuerda que no pueden leer tu consulta. Por último, para proteger tu anonimato, asegúrate de que tus retransmisores y servidores no sean propiedad de las mismas personas.

Puedes configurar adicionalmente los servidores para usar relés específicos:

[anonymized_dns]
routes = [
    { server_name = "example-server-1", via = [ "relay-example-1", "relay-example-2" ] },
    { server_name = "example-server-2", via = [ "relay-example-1", "relay-example-2" ] },
]

Ahora necesita cambiar la configuración de DNS. Tenemos guías para hacerlo en Windows 10, Windows 11 y macOS. En Linux, solo necesita actualizar un archivo:

su  # Requires root first.
echo "nameserver 127.0.0.1\nnameserver ::1" > /etc/resolv.conf
chattr +i /etc/resolv.conf # Make the file immutable.

Hacer que un archivo sea inmutable significa que incluso el root no puede cambiarlo. Sin embargo, puedes volver a hacerlo mutable con sudo chattr -i /etc/resolv.conf. Usa lsattr /etc/resolv.conf para ver el estado actual del atributo del archivo.

Hacer que el archivo resolv.conf sea inmutable en Linux a veces es necesario porque algunos programas (como NetworkManager) tienden a restablecerlo cuando se activan. Debes considerar esto como la opción nuclear y, si es posible lograrlo mediante algún otro método, entonces prefiere ese.

Hay algunos ajustes adicionales que permiten una conexión pura y anonimizada del protocolo DNSCrypt. Algunos actúan como filtros para la lista de servidores descargada.

# Cache queries makes them faster.
cache = true
cache_size = 4_096

# Use servers reachable over IPv4.
ipv4_servers = true

# Use servers reachable over IPv6.
ipv6_servers = true

# Use servers implementing the DNSCrypt protocol.
dnscrypt_servers = true

# We do not want to use DNS over HTTPS.
doh_servers = false

# We do not want to use servers implementing the Oblivious DNS over HTTPS protocol.
odoh_servers = false

# DNSSEC is optional here, but it limits your options.
require_dnssec = false

# Include only servers that do not log queries.
require_nolog = true

# Include servers that filter (for example, malware filters.)
require_nofilter = false

Además, en la sección "anonymized_dns", configure:

[anonymized_dns]
# Skip resolvers incompatible with anonymization (relays).
skip_incompatible = true

Si descubres que un servidor no establece una conexión, probablemente se deba a que uno de estos filtros lo excluye de la lista final de selección filtrada. Verifica nuevamente tu servidor objetivo y tus configuraciones.

Iniciar y probar el servicio

Es diferente para cada plataforma

Una vez configurado, necesitas poner en marcha el servicio y probarlo. Para plataformas distintas de Linux, consulta la guía correspondiente enlazada anteriormente.

Para Linux, el servicio se llama normalmente "dnscrypt-proxy":

sudo systemctl enable dnscrypt-proxy
sudo systemctl start dnscrypt-proxy

Para probarlo:

cd /etc/dnscrypt-proxy
dnscrypt-proxy -resolve example.com

Alternativamente, si usas dig, puedes ejecutar:

dig example.com

Deberías ver que se resuelve usando el servidor local:


He preparado un archivo de configuración completo y funcional para ti. Utiliza el servicio DNSCrypt filtrado de Quad9, que filtra los dominios de malware. También retransmite las conexiones a través de Austria y Suecia. Puedes agregar o eliminar retransmisores según lo consideres necesario o usar la información tratada para personalizar tu configuración.

Para las opciones que hemos cubierto hoy, las etiqueté con "¡PERSONALIZADO!". Para todo lo demás, puedes encontrarlas en el archivo de configuración de ejemplo.

######################################################################
#                 GLOBAL SETTINGS (WITHOUT SECTIONS)                 #
######################################################################

# CUSTOM!
listen_addresses = [ "127.0.0.1:53", "[::1]:53" ]

# CUSTOM!
server_names = [ "quad9-dnscrypt-ip4-filter-pri" ]

# CUSTOM! These options are either changed from their defaults or significant
# for the proper functioning of a pure DNSCrypt connection.
# I explained these previously.
cache = true
cache_size = 4_096
dnscrypt_servers = true
doh_servers = false
ipv4_servers = true
ipv6_servers = true
odoh_servers = false
require_dnssec = false
require_nofilter = false  # quad9-dnscrypt-ip4-filter-pri filters malware domains.
require_nolog = true

######################################################################
# SECTIONED SETTINGS #
######################################################################

[anonymized_dns]
skip_incompatible = true  # Only use servers that support relays.

# CUSTOM!
routes = [
  { server_name = "*", via = [ "anon-cs-austria", "anon-cs-swe" ] },
]

[sources.public-resolvers]
# This is where DNSCrypt resolves server names to stamps.
# They're authenticated using cryptography.
urls = [
  "https://raw.githubusercontent.com/DNSCrypt/dnscrypt-resolvers/master/v3/public-resolvers.md",
  "https://download.dnscrypt.info/resolvers-list/v3/public-resolvers.md"
]
cache_file = "public-resolvers.md"
minisign_key = "RWQf6LRCGA9i53mlYecO4IzT51TGPpvWucNSCh1CBM0QTaLn73Y7GFO3"
refresh_delay = 73
prefix = ""

[sources.relays]
# A list of relays.
urls = [
  "https://raw.githubusercontent.com/DNSCrypt/dnscrypt-resolvers/master/v3/relays.md",
  "https://download.dnscrypt.info/resolvers-list/v3/relays.md"
]
cache_file = "relays.md"
minisign_key = "RWQf6LRCGA9i53mlYecO4IzT51TGPpvWucNSCh1CBM0QTaLn73Y7GFO3"
refresh_delay = 73
prefix = ""

[broken_implementations]
# These are lists of server names with problematic implementations.
fragments_blocked = [
  "cisco",
  "cisco-ipv6",
  "cisco-familyshield",
  "cisco-familyshield-ipv6",
  "cisco-sandbox",
  "cleanbrowsing-adult",
  "cleanbrowsing-adult-ipv6",
  "cleanbrowsing-family",
  "cleanbrowsing-family-ipv6",
  "cleanbrowsing-security",
  "cleanbrowsing-security-ipv6"
]

Puedes ejecutar dnscrypt-proxy -check (mientras estás en el mismo directorio que el archivo de configuración) para asegurarte de que tus consultas se enruten a través de Austria o Suecia. Una vez que hagas eso, solo queda iniciar el servicio y realizar consultas DNS.

Aunque el DNS cifrado hace mucho por tu privacidad, un VPN hace más. Con el DNS cifrado, es como cerrar tus cortinas, pero con un VPN, es como también cerrar con llave todas tus puertas. Si te tomas en serio la privacidad, te recomiendo ProtonVPN, que personalmente uso y me encanta.

Artículos relacionados