dnscrypt-proxy (Español)
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
.
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
.
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
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
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
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
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"