RockDNS – Blog del Proyecto

Noticias, novedades del proyecto, información sobre DNS libre

Guía de Configuración RocksDNS en Linux

Guía Completa de Configuración de DNS cifrado con RocksDNS (DoH, DoT, DoQ)

Introducción

RocksDNS es un servicio DNS que ofrece protocolos seguros como DNS-over-HTTPS (DoH), DNS-over-TLS (DoT) y DNS-over-QUIC (DoQ), proporcionando mayor privacidad y seguridad en las consultas DNS al cifrar el tráfico.

Servidores Disponibles

Servidor Principal (España 🇪🇸)

  • DNS-over-HTTPS (DoH): https://dns.rocksdns.ovh/dns-query (puerto 443)
  • DNS-over-TLS (DoT): dns.rocksdns.ovh (puerto 853)
  • DNS-over-QUIC (DoQ): dns.rocksdns.ovh (puerto 784)
  • IP de respaldo: 82.223.31.111
  • Dominio alternativo: rescue.rocksdns.ovh

Servidor Secundario (Finlandia 🇫🇮)

  • DNS-over-HTTPS (DoH): https://dns2.rocksdns.ovh/dns-query (puerto 443)
  • DNS-over-TLS (DoT): dns2.rocksdns.ovh (puerto 853)
  • DNS-over-QUIC (DoQ): dns2.rocksdns.ovh (puerto 784)
  • IP principal: 46.62.141.91
  • Dominio alternativo: rescue2.rocksdns.ovh

Métodos de Configuración

1. Configuración con systemd-resolved (Recomendado)

Esta es la forma más moderna y compatible con la mayoría de distribuciones Linux actuales.

Verificar si systemd-resolved está activo:

systemctl status systemd-resolved

Configurar DNS-over-TLS (DoT):

# Editar el archivo de configuración
sudo nano /etc/systemd/resolved.conf

Añadir o modificar las siguientes líneas:

[Resolve]
DNS=dns.rocksdns.ovh dns2.rocksdns.ovh
DNSOverTLS=yes
Domains=~.

Reiniciar el servicio:

sudo systemctl restart systemd-resolved
sudo systemctl enable systemd-resolved

Verificar la configuración:

resolvectl status

2. Configuración con Stubby (DNS-over-TLS)

Stubby es un cliente específico para DNS-over-TLS que ofrece mayor control sobre la configuración.

Instalación:

# Ubuntu/Debian
sudo apt update && sudo apt install stubby

# Fedora/CentOS/RHEL
sudo dnf install stubby

# Arch Linux
sudo pacman -S stubby

Configuración:

sudo nano /etc/stubby/stubby.yml

Configuración completa para RocksDNS:

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
upstream_recursive_servers:
  - address_data: dns.rocksdns.ovh
    tls_auth_name: "dns.rocksdns.ovh"
    tls_port: 853
  - address_data: dns2.rocksdns.ovh
    tls_auth_name: "dns2.rocksdns.ovh"
    tls_port: 853
  - address_data: 82.223.31.111
    tls_auth_name: "rescue.rocksdns.ovh"
    tls_port: 853
  - address_data: 46.62.141.91
    tls_auth_name: "rescue2.rocksdns.ovh"
    tls_port: 853

Iniciar y habilitar Stubby:

sudo systemctl enable stubby
sudo systemctl start stubby

Configurar el sistema para usar Stubby:

# Editar resolv.conf
sudo nano /etc/resolv.conf

Añadir:

nameserver 127.0.0.1

3. Configuración con cloudflared (DNS-over-HTTPS)

Aunque cloudflared es de Cloudflare, puede configurarse para usar otros proveedores DoH.

Instalación:

# Descargar el binario
wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb
sudo dpkg -i cloudflared-linux-amd64.deb

# O usando snap
sudo snap install cloudflared

Configuración:

sudo mkdir -p /etc/cloudflared
sudo nano /etc/cloudflared/config.yml

Contenido del archivo:

proxy-dns: true
proxy-dns-port: 5053
proxy-dns-address: 127.0.0.1
proxy-dns-upstream:
  - https://dns.rocksdns.ovh/dns-query
  - https://dns2.rocksdns.ovh/dns-query

Crear servicio systemd:

sudo cloudflared service install
sudo systemctl start cloudflared
sudo systemctl enable cloudflared

Configurar el sistema:

sudo nano /etc/resolv.conf

Añadir:

nameserver 127.0.0.1

4. Configuración con dnscrypt-proxy

dnscrypt-proxy soporta múltiples protocolos incluyendo DoH y DoT.

Instalación:

# Ubuntu/Debian
sudo apt install dnscrypt-proxy

# Fedora
sudo dnf install dnscrypt-proxy

# Arch Linux
sudo pacman -S dnscrypt-proxy

Configuración:

sudo nano /etc/dnscrypt-proxy/dnscrypt-proxy.toml

Configuración básica:

server_names = ['rocksdns-doh', 'rocksdns2-doh']
listen_addresses = ['127.0.0.1:53']
max_clients = 250
ipv4_servers = true
ipv6_servers = false
dnscrypt_servers = false
doh_servers = true
require_dnssec = false
require_nolog = true
require_nofilter = true
force_tcp = false
timeout = 5000
keepalive = 30
cert_refresh_delay = 240
log_level = 0

[static]
[static.'rocksdns-doh']
stamp = 'sdns://AgcAAAAAAAAADDEyNy4wLjAuMTo0NDMgBuZm1wdG43_9a-C6lFYLDhksJ4u0N_0JwOxfXSPVOJYRZG5zLnJvY2tzZG5zLm92aA0vZG5zLXF1ZXJ5'

[static.'rocksdns2-doh']
stamp = 'sdns://AgcAAAAAAAAADDEyNy4wLjAuMTo0NDMgBuZm1wdG43_9a-C6lFYLDhksJ4u0N_0JwOxfXSPVOJYSZG5zMi5yb2Nrc2Rucy5vdmgNL2Rucy1xdWVyeQ'

Iniciar el servicio:

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

Configuración del Navegador (DNS-over-HTTPS)

Firefox

  1. Ir a about:config
  2. Buscar network.trr.mode y establecer a 3
  3. Buscar network.trr.uri y establecer a https://dns.rocksdns.ovh/dns-query

Google Chrome

google-chrome --enable-features=dns-over-https --dns-over-https-templates="https://dns.rocksdns.ovh/dns-query"

Verificación de la Configuración

Verificar que DNS funciona:

dig @127.0.0.1 google.com
nslookup google.com

Verificar cifrado DNS:

# Verificar DoT
dig @dns.rocksdns.ovh +tls google.com

# Verificar DoH (requiere curl)
curl -H 'accept: application/dns-json' 'https://dns.rocksdns.ovh/dns-query?name=google.com&type=A'

Verificar el proveedor DNS actual:

# Visitar en navegador:
https://dnscheck.tools
# O usar:
dig TXT whoami.ds.akahelp.net +short

Solución de Problemas

Problema: DNS no resuelve

# Verificar que el servicio está corriendo
systemctl status systemd-resolved
systemctl status stubby
systemctl status cloudflared

# Verificar conectividad
ping dns.rocksdns.ovh
ping dns2.rocksdns.ovh

Problema: Lentitud en resolución

# Probar diferentes servidores
dig @dns.rocksdns.ovh google.com
dig @dns2.rocksdns.ovh google.com

Restaurar configuración original:

# Backup del resolv.conf original
sudo cp /etc/resolv.conf.backup /etc/resolv.conf

# O restablecer a DNS automático
sudo dhclient -r && sudo dhclient

Recomendaciones

  1. Para usuarios básicos: Usar systemd-resolved con DoT
  2. Para máxima privacidad: Usar Stubby con configuración personalizada
  3. Para navegación web: Configurar DoH en el navegador como respaldo
  4. Para servidores: Usar dnscrypt-proxy por su robustez

Consideraciones de Seguridad

Configuración Avanzada

Configuración con NetworkManager

Para usuarios de escritorio con NetworkManager:

# Configurar DoT globalmente
sudo nmcli connection modify "Wired connection 1" ipv4.dns "dns.rocksdns.ovh"
sudo nmcli connection modify "Wired connection 1" ipv4.dns-options "tls-hostname:dns.rocksdns.ovh"
sudo nmcli connection up "Wired connection 1"

Configuración por interfaz de red

Para configurar DNS específico por interfaz:

# Editar configuración de red
sudo nano /etc/netplan/01-netcfg.yaml

Ejemplo de configuración:

network:
  version: 2
  ethernets:
    enp0s3:
      dhcp4: true
      nameservers:
        addresses: [127.0.0.1]
      dhcp4-overrides:
        use-dns: false

Configuración para Docker

Para usar RocksDNS en contenedores Docker:

# Crear daemon.json
sudo nano /etc/docker/daemon.json

Contenido:

{
  "dns": ["127.0.0.1", "dns.rocksdns.ovh"],
  "dns-opts": ["edns0", "trust-ad"]
}

Monitoreo y Logs

Monitorear consultas DNS:

# Ver logs de systemd-resolved
journalctl -u systemd-resolved -f

# Ver logs de Stubby
journalctl -u stubby -f

# Monitorear consultas en tiempo real
sudo tcpdump -i any port 853 or port 443

Estadísticas de rendimiento:

# Medir tiempo de respuesta
dig @dns.rocksdns.ovh google.com | grep "Query time"

# Comparar servidores DNS
for server in dns.rocksdns.ovh dns2.rocksdns.ovh; do
  echo "Probando $server:"
  dig @$server google.com | grep "Query time"
done

Automatización y Scripts

Script de verificación automática:

#!/bin/bash
# Guardar como check_dns.sh

echo "Verificando configuración DNS..."

# Verificar resolución
if dig @127.0.0.1 google.com &>/dev/null; then
    echo "✓ DNS local funciona"
else
    echo "✗ Error en DNS local"
fi

# Verificar DoT
if dig @dns.rocksdns.ovh +tls google.com &>/dev/null; then
    echo "✓ DNS-over-TLS funciona"
else
    echo "✗ Error en DNS-over-TLS"
fi

# Verificar proveedor actual
provider=$(dig TXT whoami.ds.akahelp.net +short 2>/dev/null)
echo "Proveedor detectado: $provider"

Script de instalación automática:

#!/bin/bash
# Instalador automático para Ubuntu/Debian

echo "Instalando RocksDNS con systemd-resolved..."

# Backup de configuración actual
sudo cp /etc/systemd/resolved.conf /etc/systemd/resolved.conf.backup

# Configurar systemd-resolved
cat <<EOF | sudo tee /etc/systemd/resolved.conf
[Resolve]
DNS=dns.rocksdns.ovh dns2.rocksdns.ovh
DNSOverTLS=yes
Domains=~.
Cache=yes
DNSStubListener=yes
EOF

# Reiniciar servicios
sudo systemctl restart systemd-resolved
sudo systemctl enable systemd-resolved

echo "Configuración completada. Verificando..."
resolvectl status

Optimización de Rendimiento

Configuración de caché local:

# Instalar dnsmasq como caché local
sudo apt install dnsmasq

# Configurar dnsmasq
sudo nano /etc/dnsmasq.conf

Añadir:

server=127.0.0.53
cache-size=1000
no-resolv
log-queries

Ajustes de timeout:

# Para systemd-resolved
sudo nano /etc/systemd/resolved.conf

Añadir:

[Resolve]
DNS=dns.rocksdns.ovh dns2.rocksdns.ovh
DNSOverTLS=yes
Domains=~.
ReadEtcHosts=yes
ResolveUnicastSingleLabel=no
DNSStubListenerExtra=127.0.0.2:53

Respaldo y Recuperación

Crear respaldo completo:

#!/bin/bash
# Script de respaldo

backup_dir="/backup/dns-config-$(date +%Y%m%d)"
mkdir -p "$backup_dir"

# Respaldar archivos de configuración
sudo cp /etc/systemd/resolved.conf "$backup_dir/"
sudo cp /etc/resolv.conf "$backup_dir/"
sudo cp -r /etc/stubby "$backup_dir/" 2>/dev/null || true
sudo cp -r /etc/cloudflared "$backup_dir/" 2>/dev/null || true

echo "Respaldo creado en: $backup_dir"

Restaurar configuración:

# Restaurar desde respaldo
sudo cp /backup/dns-config-YYYYMMDD/resolved.conf /etc/systemd/
sudo systemctl restart systemd-resolved

# O volver a configuración DHCP
sudo rm /etc/resolv.conf
sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf

Comandos Útiles

# Ver estado actual de DNS
resolvectl status

# Limpiar caché DNS
sudo systemd-resolve --flush-caches

# Probar resolución específica
resolvectl query google.com

# Ver estadísticas de DNS
resolvectl statistics

# Verificar configuración activa
cat /etc/resolv.conf

# Test completo de conectividad DNS
nslookup google.com && echo "DNS OK" || echo "DNS FAIL"

# Verificar que DoT está funcionando
ss -tlnp | grep :853

# Verificar latencia a servidores RocksDNS
ping -c 4 dns.rocksdns.ovh
ping -c 4 dns2.rocksdns.ovh

Categorías: Guías | Etiquetas: