dnscrypt-proxy (Español) - ArchWiki

Jump to content
From ArchWiki

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"

Categories:

- Domain Name System (Español)
- Encryption (Español)