Cómo Configurar DNS sobre HTTPS en Linux

Esta guía le ayudará a configurar DNS sobre HTTPS (DoH) en su sistema Linux, cubriendo múltiples métodos de configuración y mejores prácticas.

Requisitos Previos

  • Sistema operativo Linux
  • Privilegios de administrador (root)
  • Conocimientos básicos de línea de comandos
  • Conexión de red estable

Usando systemd-resolved

Paso 1: Verificar la Versión de systemd-resolved

systemctl --version
systemd-resolve --version

Asegúrese de que la versión sea 247 o superior, ya que estas versiones soportan DoH.

Paso 2: Configurar resolved.conf

Edite /etc/systemd/resolved.conf:

[Resolve]
DNS=1.1.1.1 1.0.0.1
DNSOverTLS=yes
DNSSEC=yes
Cache=yes
DNSStubListener=yes

Para DoH, agregue la siguiente configuración:

[Resolve]
DNS=https://cloudflare-dns.com/dns-query
     https://dns.google/dns-query
DNSOverTLS=no
DNSSEC=yes
Cache=yes
DNSStubListener=yes

Paso 3: Reiniciar el Servicio

sudo systemctl restart systemd-resolved
sudo systemctl status systemd-resolved

Usando NetworkManager

Paso 1: Verificar la Versión de NetworkManager

nmcli --version

Asegúrese de que la versión soporte funcionalidad DoH.

Paso 2: Configurar la Conexión

Configure DoH usando nmcli:

# Listar conexiones actuales
nmcli connection show

# Modificar la conexión especificada
sudo nmcli connection modify "Nombre de la Conexión" ipv4.dns "1.1.1.1,1.0.0.1" ipv4.dns-over-tls yes
sudo nmcli connection modify "Nombre de la Conexión" ipv6.dns "2606:4700:4700::1111,2606:4700:4700::1001" ipv6.dns-over-tls yes

Paso 3: Aplicar Cambios

sudo nmcli connection up "Nombre de la Conexión"

Usando Clientes Independientes

dnscrypt-proxy

  1. Instalación
# Debian/Ubuntu
sudo apt install dnscrypt-proxy

# Fedora
sudo dnf install dnscrypt-proxy

# Arch Linux
sudo pacman -S dnscrypt-proxy
  1. Configuración

Edite /etc/dnscrypt-proxy/dnscrypt-proxy.toml:

server_names = ['cloudflare', 'google']
listen_addresses = ['127.0.0.1:53']
max_clients = 250
ipv4_servers = true
ipv6_servers = true
dnscrypt_servers = true
doh_servers = true
require_dnssec = true
require_nolog = true
require_nofilter = true
force_tcp = false
timeout = 2500
keepalive = 30
  1. Iniciar Servicio
sudo systemctl enable dnscrypt-proxy
sudo systemctl start dnscrypt-proxy
sudo systemctl status dnscrypt-proxy

Stubby

  1. Instalación
# Debian/Ubuntu
sudo apt install stubby

# Fedora
sudo dnf install stubby

# Arch Linux
sudo pacman -S stubby
  1. Configuración

Edite /etc/stubby/stubby.yml:

resolution_type: GETDNS_RESOLUTION_STUB
dns_transport_list:
  - GETDNS_TRANSPORT_TLS
tls_authentication: GETDNS_AUTHENTICATION_REQUIRED
tls_query_padding_blocksize: 128
edns_client_subnet_private: 1
round_robin_upstreams: 1
idle_timeout: 10000
listen_addresses:
  - 127.0.0.1@53
  - 0::1@53
upstream_recursive_servers:
  - address_data: 1.1.1.1
    tls_auth_name: "cloudflare-dns.com"
  - address_data: 1.0.0.1
    tls_auth_name: "cloudflare-dns.com"
  1. Iniciar Servicio
sudo systemctl enable stubby
sudo systemctl start stubby
sudo systemctl status stubby

Verificar Configuración

Método 1: Usando dig

# Probar resolución DNS
dig @127.0.0.1 example.com

# Verificar DNSSEC
dig @127.0.0.1 example.com +dnssec

# Verificar servidor DoH
dig @127.0.0.1 whoami.cloudflare CH TXT

Método 2: Usando resolvectl

# Ver configuración DNS actual
resolvectl status

# Probar resolución DNS
resolvectl query example.com

# Verificar DNSSEC
resolvectl query --dnssec example.com

Método 3: Pruebas en Línea

  1. Visite un sitio web de prueba de fugas DNS
  2. Ejecute la prueba completa
  3. Verifique el enrutamiento de las solicitudes DNS

Solución de Problemas

Problemas Comunes

  1. Fallo de Resolución

    • Verifique la conexión de red
    • Verifique los archivos de configuración
    • Verifique el estado del servicio
    • Revise los registros del sistema
  2. Problemas de Rendimiento

    • Elija el servidor más cercano
    • Optimice la configuración de caché
    • Monitoree el tiempo de respuesta
    • Verifique los recursos del sistema
  3. Problemas de Compatibilidad

    • Actualice los paquetes
    • Verifique dependencias
    • Verifique requisitos del sistema
    • Pruebe configuraciones alternativas

Análisis de Registros

  1. Registros del Sistema
# Ver registros de systemd-resolved
journalctl -u systemd-resolved

# Ver registros de NetworkManager
journalctl -u NetworkManager

# Ver registros de dnscrypt-proxy
journalctl -u dnscrypt-proxy
  1. Diagnóstico de Red
# Probar conectividad de red
ping 1.1.1.1

# Verificar resolución DNS
nslookup example.com

# Verificar DNSSEC
dig example.com +dnssec

Mejores Prácticas

  1. Selección de Proveedor

    • Evalúe políticas de privacidad
    • Verifique disponibilidad del servicio
    • Considere ubicación geográfica
    • Pruebe velocidad de conexión
  2. Recomendaciones de Seguridad

    • Use proveedores confiables
    • Habilite DNSSEC
    • Actualizaciones regulares del sistema
    • Monitoree actividad de red
  3. Optimización de Rendimiento

    • Elija servidores más cercanos
    • Optimice configuración de caché
    • Monitoree métricas de rendimiento
    • Mantenimiento regular

Implementación Empresarial

Configuración a Nivel de Sistema

  1. Crear Archivos de Configuración

    • Configurar systemd-resolved
    • Configurar NetworkManager
    • Implementar software cliente
  2. Estrategia de Implementación

    • Usar gestión de configuración
    • Implementar monitoreo
    • Planificar ventanas de mantenimiento
  3. Gestión de Mantenimiento

    • Actualizaciones regulares
    • Monitoreo de rendimiento
    • Seguimiento de incidencias
    • Procedimientos de respaldo

Próximos Pasos