Skip to content
Esta página fue generada y traducida con asistencia de IA. Si encuentra alguna imprecisión, no dude en ayudar a mejorarla. Editar en GitHub

Proxy DNS ​

El comando sd dns-proxy inicia un servidor proxy DNS local que intercepta las consultas DNS y las filtra a través de tres motores antes de reenviarlas a un resolvedor ascendente:

  1. Motor adblock -- bloquea anuncios, rastreadores y dominios maliciosos de las listas de filtros
  2. Feed de dominios IOC -- bloquea dominios de los indicadores de compromiso de inteligencia de amenazas
  3. Lista de bloqueo DNS personalizada -- bloquea dominios de listas definidas por el usuario

Las consultas que coinciden con algún filtro reciben respuesta con 0.0.0.0 (NXDOMAIN). El resto de las consultas se reenvían al servidor DNS ascendente configurado. Cada consulta y su estado de resolución se registra en un archivo JSONL.

Inicio Rápido ​

bash
# Start the DNS proxy with defaults (listen 127.0.0.1:53, upstream 8.8.8.8:53)
sudo sd dns-proxy

TIP

El proxy escucha en el puerto 53 de forma predeterminada, lo que requiere privilegios de root. Para pruebas sin privilegios, usa un puerto alto como --listen 127.0.0.1:5353.

Opciones del Comando ​

bash
sd dns-proxy [OPTIONS]
OpciónPredeterminadoDescripción
--listen127.0.0.1:53Dirección y puerto en los que escuchar
--upstream8.8.8.8:53Servidor DNS ascendente al que reenviar las consultas no bloqueadas
--log-path/tmp/prx-sd-dns.logRuta para el archivo de registro JSONL de consultas

Ejemplos de Uso ​

Uso Básico ​

Inicia el proxy en la dirección predeterminada con Google DNS como ascendente:

bash
sudo sd dns-proxy

Salida:

>>> Starting DNS proxy (listen=127.0.0.1:53, upstream=8.8.8.8:53, log=/tmp/prx-sd-dns.log)
>>> Filter engines: adblock + dns_blocklist + ioc_domains
>>> Press Ctrl+C to stop.

Dirección de Escucha y Ascendente Personalizados ​

Usa Cloudflare DNS como ascendente y escucha en un puerto personalizado:

bash
sudo sd dns-proxy --listen 127.0.0.1:5353 --upstream 1.1.1.1:53

Ruta de Registro Personalizada ​

Escribe los registros de consultas en una ubicación específica:

bash
sudo sd dns-proxy --log-path /var/log/prx-sd/dns-queries.jsonl

Combinación con Adblock ​

El proxy DNS carga automáticamente las listas de filtros adblock desde ~/.prx-sd/adblock/. Para obtener la mejor cobertura:

bash
# Step 1: Enable and sync adblock lists
sudo sd adblock enable
sd adblock sync

# Step 2: Start the DNS proxy (it picks up adblock rules automatically)
sudo sd dns-proxy

El proxy lee las mismas listas de filtros en caché que usa sd adblock. Cualquier lista agregada mediante sd adblock add está automáticamente disponible para el proxy después de reiniciarlo.

Configurar tu Sistema para Usar el Proxy ​

Linux (systemd-resolved) ​

Edita /etc/systemd/resolved.conf:

ini
[Resolve]
DNS=127.0.0.1

Luego reinicia:

bash
sudo systemctl restart systemd-resolved

Linux (resolv.conf) ​

bash
echo "nameserver 127.0.0.1" | sudo tee /etc/resolv.conf

macOS ​

bash
sudo networksetup -setdnsservers Wi-Fi 127.0.0.1

Para revertir:

bash
sudo networksetup -setdnsservers Wi-Fi empty

WARNING

Redirigir todo el tráfico DNS al proxy local significa que si el proxy se detiene, la resolución DNS fallará hasta que restaures la configuración original o reinicies el proxy.

Formato del Registro ​

El proxy DNS escribe JSONL (un objeto JSON por línea) en la ruta de registro configurada. Cada entrada contiene:

json
{
  "timestamp": "2026-03-20T14:30:00.123Z",
  "query": "ads.example.com",
  "type": "A",
  "action": "blocked",
  "filter": "adblock",
  "upstream_ms": null
}
json
{
  "timestamp": "2026-03-20T14:30:00.456Z",
  "query": "docs.example.com",
  "type": "A",
  "action": "forwarded",
  "filter": null,
  "upstream_ms": 12
}
CampoDescripción
timestampMarca de tiempo ISO 8601 de la consulta
queryEl nombre de dominio consultado
typeTipo de registro DNS (A, AAAA, CNAME, etc.)
actionblocked o forwarded
filterQué filtro coincidió: adblock, ioc, blocklist, o null
upstream_msTiempo de ida y vuelta al DNS ascendente (null si está bloqueado)

Arquitectura ​

Client DNS Query (port 53)
        |
        v
  +------------------+
  |  sd dns-proxy     |
  |                  |
  |  1. Adblock      |---> blocked? --> respond 0.0.0.0
  |  2. IOC domains  |---> blocked? --> respond 0.0.0.0
  |  3. DNS blocklist |---> blocked? --> respond 0.0.0.0
  |                  |
  |  Not blocked:    |
  |  Forward to      |---> upstream DNS (e.g. 8.8.8.8)
  |  upstream         |<--- response
  |                  |
  |  Log to JSONL    |
  +------------------+
        |
        v
  Client receives response

Ejecutar como Servicio ​

Para ejecutar el proxy DNS como un servicio systemd persistente:

bash
# Create a systemd unit file
sudo tee /etc/systemd/system/prx-sd-dns.service << 'EOF'
[Unit]
Description=PRX-SD DNS Proxy
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/sd dns-proxy --listen 127.0.0.1:53 --upstream 8.8.8.8:53 --log-path /var/log/prx-sd/dns-queries.jsonl
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target
EOF

# Enable and start
sudo systemctl daemon-reload
sudo systemctl enable --now prx-sd-dns

TIP

Para una experiencia en segundo plano completamente gestionada, considera usar sd daemon en su lugar, que combina el monitoreo de archivos en tiempo real, actualizaciones automáticas de firmas y puede extenderse para incluir la funcionalidad del proxy DNS.

Próximos Pasos ​

Released under the Apache-2.0 License.