dnscrypt-proxy (Español)

From ArchWiki

Estado de la traducción: esta traducción de dnscrypt-proxy fue revisada el 2019-11-06. Si existen cambios puede actualizarla o avisar al equipo de traducción.

dnscrypt-proxy es un proxy DNS con soporte para los protocolos DNS cifrados, DNS sobre HTTPS y DNSCrypt, que se puede utilizar para evitar ataques de intermediario y escuchas ilegales. dnscrypt-proxy es compatible también con DNSSEC.

Instalación

Instale el paquete dnscrypt-proxy.

Configuración

Poner en marcha

El servicio se puede iniciar de dos maneras mutuamente excluyentes (es decir, solo se puede activar uno de los dos):

  • Con el archivo .service.
Nota: la opción listen_addresses debe configurarse (por ejemplo, listen_addresses = ['127.0.0.1:53', '[::1]:53']) en el archivo de configuración cuando se utiliza el archivo .service.
  • Mediante la activación del .socket.
Nota: al utilizar la activación del socket, la opción listen_addresses se debe dejar vacía (es decir, listen_addresses = [ ]) en el archivo de configuración, ya que systemd se ocupa de la configuración del socket.

Seleccionar clientes DNS

Al dejar server_names comentado en el archivo de configuración /etc/dnscrypt-proxy/dnscrypt-proxy.toml, dnscrypt-proxy elegirá el servidor más rápido de entre los ya configurados en [sources] [1]. Las listas de dichos servidores se descargarán, verificarán y actualizarán automáticamente. [2]. Por lo tanto, la configuración de un conjunto específico de servidores es opcional.

Para establecer manualmente qué servidor utilizar, edite /etc/dnscrypt-proxy/dnscrypt-proxy.toml y elimine el comentario de la variable server_names, seleccionando uno o más de los servidores. Por ejemplo, para usar los servidores de Cloudflare:

server_names = ['cloudflare', 'cloudflare-ipv6']

Una lista completa de clientes DNS («resolver») se encuentra en la página upstream o Github. Si dnscrypt-proxy se ejecutó con éxito en el sistema anteriormente, /var/cache/dnscrypt-proxy/public-resolvers.md también contendrá una lista. Mire la descripción de los servidores que validan DNSSEC, sin registro y sin cesura. Estos requisitos se pueden configurar de forma global con las opciones require_dnssec, require_nolog, require_nofilter.

Desactivar cualquier servicio ligado al puerto 53

Sugerencia: si utiliza #Unbound como su caché DNS local, esta sección se puede ignorar, ya que unbound se ejecuta en el puerto 53 de forma predeterminada.

Para ver si algún programa está usando el puerto 53, ejecute:

 $ ss -lp 'sport = :domain'

Si el resultado contiene más de una línea a parte de los nombres de las columnas, debe desactivar cualquier servicio que esté utilizando el puerto 53. Un servicio común que lo utiliza es systemd-resolved.service, (NetworkManager#Unit dbus-org.freedesktop.resolve1.service not found), pero otros administradores de red pueden tener componentes análogos. Puede continuar una vez que la orden anterior imprima solo la siguiente línea:

 Netid               State                 Recv-Q                Send-Q                                 Local Address:Port                                   Peer Address:Port

Modificar resolv.conf

Modifique el archivo resolv.conf y reemplace el conjunto vigente de direcciones de resolución con la dirección para localhost y las opciones [3]:

nameserver ::1
nameserver 127.0.0.1
options edns0 single-request-reopen

Otros programas pueden sobrescribir esta configuración; consulte resolv.conf#Overwriting of /etc/resolv.conf para obtener más detalles.

Iniciar el servicio de systemd

Finalmente, inicie/active la unidad dnscrypt-proxy.service o dnscrypt-proxy.socket, dependiendo del método que elija.

Consejos y trucos

Configuración de la caché DNS local

Sugerencia: dnscrypt-proxy puede almacenar en caché las entradas sin depender de otro programa. Esta función está activada de manera predeterminada con la línea cache = true en el archivo de configuración dnscrypt-proxy

Se recomienda ejecutar dnscrypt-proxy como un reenviador a una caché de DNS local, si no se utiliza la función caché de dnscrypt-proxy; de lo contrario, cada consulta hará un viaje de ida y vuelta al servidor de resolución ascendente. Cualquier programa de almacenamiento DNS local debería funcionar. Además de configurar dnscrypt-proxy, debe configurar su programa de caché de DNS local.

Cambiar el puerto

Para reenviar consultas desde una caché del DNS local, dnscrypt-proxy debe escuchar en un puerto diferente del predeterminado 53, ya que la caché DNS necesita escuchar en el puerto 53 y la consulta de dnscrypt-proxy debe hacerse sobre un puerto diferente. El número de puerto 53000 se usa como ejemplo en esta sección. En este ejemplo, el número de puerto es mayor que 1024 por lo que no es necesario que dnscrypt-proxy sea ejecutado por root.

Hay dos métodos para cambiar el puerto predeterminado:

Método socket

Modifique dnscrypt-proxy.socket con los siguientes contenidos:

[Socket]
ListenStream=
ListenDatagram=
ListenStream=127.0.0.1:53000
ListenStream=[::1]:53000
ListenDatagram=127.0.0.1:53000
ListenDatagram=[::1]:53000

Cuando las consultas se reenvían desde la caché del DNS local al puerto 53000, dnscrypt-proxy.socket iniciará dnscrypt-proxy.service.

Método service

Modifique la opción listen_addresses en /etc/dnscrypt-proxy/dnscrypt-proxy.toml con lo siguiente:

listen_addresses = ['127.0.0.1:53000', '[::1]:53000']

Ejemplo de configuraciones para una caché DNS local

Las siguientes configuraciones deberían funcionar con dnscrypt-proxy y asumir que está escuchando en el puerto 53000.

Unbound

Configure Unbound a su gusto (en particular, consulte Unbound#Local DNS server) y añada las siguientes líneas al final de la sección server en /etc/unbound/unbound.conf:

  do-not-query-localhost: no
forward-zone:
  name: "."
  forward-addr: ::1@53000
  forward-addr: 127.0.0.1@53000
Sugerencia: si está configurando un servidor, añada interface: 0.0.0.0@53 y access-control: red/máscara-de-subred allow en la sección server: para que los otros equipos puedan conectarse al servidor. Un cliente debe configurarse con nameserver dirección-de-su-servidor en /etc/resolv.conf.

Reinicie unbound.service para aplicar los cambios.

dnsmasq

Configure dnsmasq como un caché DNS local. La configuración básica para trabajar con dnscrypt-proxy es:

/etc/dnsmasq.conf
no-resolv
server=::1#53000
server=127.0.0.1#53000
listen-address=::1,127.0.0.1

Si configuró dnscrypt-proxy para usarlo como un «resolver» con la validación DNSSEC, asegúrese de activarla también en dnsmasq:

/etc/dnsmasq.conf
conf-file=/usr/share/dnsmasq/trust-anchors.conf
dnssec
dnssec-check-unsigned

Reinicie dnsmasq.service para aplicar los cambios.

pdnsd

Instale pdnsd. Una configuración básica para trabajar con dnscrypt-proxy es:

/etc/pdnsd.conf
global {
    perm_cache = 1024;
    cache_dir = "/var/cache/pdnsd";
    run_as = "pdnsd";
    server_ip = 127.0.0.1;
    status_ctl = on;
    query_method = udp_tcp;
    min_ttl = 15m;       # Retain cached entries at least 15 minutes.
    max_ttl = 1w;        # One week.
    timeout = 10;        # Global timeout option (10 seconds).
    neg_domain_pol = on;
    udpbufsize = 1024;   # Upper limit on the size of UDP messages.
}

server {
    label = "dnscrypt-proxy";
    ip = 127.0.0.1;
    port = 53000;
    timeout = 4;
    proxy_only = on;
}

source {
    owner = localhost;
    file = "/etc/hosts";
}

Reinicie pdnsd.service para aplicar los cambios.

Sandboxing

Nota: (del traductor): el «sandboxing» o aislamiento de procesos es un mecanismo para ejecutar programas con seguridad y de manera separada, en este caso el servicio «dnscrypt-proxy.service».

Edite dnscrypt-proxy.service para incluir las siguientes líneas:

[Service]
CapabilityBoundingSet=CAP_IPC_LOCK CAP_SETGID CAP_SETUID CAP_NET_BIND_SERVICE
ProtectSystem=strict
ProtectHome=true
ProtectKernelTunables=true
ProtectKernelModules=true
ProtectControlGroups=true
PrivateTmp=true
PrivateDevices=true
MemoryDenyWriteExecute=true
NoNewPrivileges=true
RestrictRealtime=true
RestrictAddressFamilies=AF_INET AF_INET6
SystemCallArchitectures=native
SystemCallFilter=~@clock @cpu-emulation @debug @keyring @ipc @module @mount @obsolete @raw-io

Consulte systemd.exec(5) y Systemd (Español)#Entornos seguros para probar aplicaciones para obtener más información.

Activar EDNS0

Los mecanismos de extensión de DNS permiten, entre otras cosas, que un cliente especifique cuán grande puede ser una respuesta a través de UDP.

Añada la siguiente línea a /etc/resolv.conf:

options edns0

También es posible que desee agregar el siguiente argumento a /etc/dnscrypt-proxy.conf:

EDNSPayloadSize <bytes>

Donde <bytes> es un número, El tamaño por defecto comienza en 1252, con valores de hasta 4096 bytes siguen siendo, supuestamente, seguros. Un valor por debajo o igual a 512 bytes desactivará este mecanismo, a menos que un cliente envíe un paquete con una sección OPT, proporcionando un tamaño de carga útil.

Test de EDNS0

Haga uso del DNS Reply Size Test Server, utilizando la herramienta de línea de órdenes drill para emitir una consulta TXT para el nombre rs.dns-oarc.net:

$ drill rs.dns-oarc.net TXT

Con EDNS0 funcionando, la salida de la «answer section» debe ser similar a esta:

rst.x3827.rs.dns-oarc.net.
rst.x4049.x3827.rs.dns-oarc.net.
rst.x4055.x4049.x3827.rs.dns-oarc.net.
"2a00:d880:3:1::a6c1:2e89 DNS reply size limit is at least 4055 bytes"
"2a00:d880:3:1::a6c1:2e89 sent EDNS buffer size 4096"