Actualizaciones de BIND y DDNS, para certificados Let's Encrypt

Actualizaciones de BIND y DDNS, para certificados Let's Encrypt

Necesito un certificado TLS para Exim y no un sitio web. Para las personas que no utilizan un servidor web, Let's Encrypt proporciona certificados a través del llamado desafío DNS-01. En realidad, es simple: un script de enlace actualiza dinámicamente la zona de BIND con un RR de desafío TXT que luego Let's Encrypt utiliza para verificar la solicitud de certificado.

Todo funciona hasta una actualización de DDNS en BIND. Tengo la siguiente configuración de zona:

    zone "example.com" IN {
            type master;
            notify yes;
            allow-query { "any"; };
            file "/etc/bind/example.com.zone";
            update-policy {
                grant ddns-key zonesub ANY;
            };
    };

Luego uso dehydratedel cliente para emitir una solicitud de certificado, obtener la firma del certificado, etc. dehydratedUtiliza un script de enlace que agrega dinámicamente un registro TXT con un desafío para un dominio:

% dehydrated -c --domain example.com -t dns-01 -k /myhook.sh

# INFO: Using main config file /etc/dehydrated/config
Processing example.com
 + Signing domains...
 + Generating private key...
 + Generating signing request...
 + Requesting new certificate order from CA...
 + Received 1 authorizations URLs from the CA
 + Handling authorization for example.com
 + 1 pending challenge(s)
 + Deploying challenge tokens...
 + Responding to challenge for example.com authorization...
 + Cleaning challenge tokens...
 + Challenge validation has failed :(
ERROR: Challenge is invalid! (returned: invalid) (result: {
  "type": "dns-01",
  "status": "invalid",
  "error": {
    "type": "urn:ietf:params:acme:error:dns",
    "detail": "DNS problem: NXDOMAIN looking up TXT for _acme-challenge.example.com - check that a DNS record exists for this domain",
    "status": 400
  },
  "url": "https://acme-v02.api.letsencrypt.org/acme/chall-v3/9027433651/.....",
  "token": "g_zU3NXkYwjt2LrRm3Yo33O22BFPLRvl......"
})


El script de gancho se basa enhttps://github.com/dehidrato-io/dehidrato/wiki/example-dns-01-nsupdate-script.

Si verifico la existencia del registro TXT (antes de dehydratedintentar eliminarlo), de hecho no existe:

dig TXT _acme-challenge.example.com @inet.example.com

...NXDOMAIN

En el registro BIND escribe una sola línea relacionada:

02-Dec-2020 20:21:56.089 update: info: client 10.5.1.181#49440/key ddns-key: updating zone 'example.com/IN': adding an RR at '_acme-challenge.example.com' TXT "GLuKNhJkt3MJ4refRS_nkL9BRBbqXSl4a3QytkGfY64"

Eso es todo. No hay nada más, aunque he aumentado el nivel de registro para depurar. No aparece el registro TXT, no hay ningún mensaje de error, nada.

¿Cómo puedo solucionar esto?

SO: Debian 9. Versión BIND: 9.10.

% named -V
BIND 9.10.3-P4-Debian <id:ebd72b3>
built by make with '--prefix=/usr' '--mandir=/usr/share/man' '--libdir=/usr/lib/x86_64-linux-gnu' '--infodir=/usr/share/info' '--sysconfdir=/etc/bind' '--with-python=python3' '--localstatedir=/' '--enable-threads' '--enable-largefile' '--with-libtool' '--enable-shared' '--enable-static' '--with-gost=no' '--with-openssl=/usr' '--with-gssapi=/usr' '--with-gnu-ld' '--with-geoip=/usr' '--with-atf=no' '--enable-ipv6' '--enable-rrl' '--enable-filter-aaaa' '--enable-native-pkcs11' '--with-pkcs11=/usr/lib/x86_64-linux-gnu/softhsm/libsofthsm2.so' '--with-randomdev=/dev/urandom' 'CFLAGS=-g -O2 -fdebug-prefix-map=/build/bind9-3gVwXu/bind9-9.10.3.dfsg.P4=. -fstack-protector-strong -Wformat -Werror=format-security -fno-strict-aliasing -fno-delete-null-pointer-checks -DNO_VERSION_DATE -DDIG_SIGCHASE' 'LDFLAGS=-Wl,-z,relro -Wl,-z,now' 'CPPFLAGS=-Wdate-time -D_FORTIFY_SOURCE=2'
compiled by GCC 6.3.0 20170516
compiled with OpenSSL version: OpenSSL 1.0.2u  20 Dec 2019
linked to OpenSSL version: OpenSSL 1.0.2u  20 Dec 2019
compiled with libxml2 version: 2.9.4
linked to libxml2 version: 20904

ACTUALIZAR

Encontré algo, esto parece estar relacionado con la IP/interfaz desde la que BIND está escuchando. Cuando uso un servidor de nombres visible externamente example.com, obtengo un rechazo con los siguientes nsupdatecomandos:

% nsupdate -k /etc/exim4/ddns.key < /tmp/s
; TSIG error with server: tsig indicates error
update failed: NOTAUTH(BADKEY)

% cat /tmp/s
server inet.example.com
add _acme-challenge.example.com 1010001 in TXT "abc"
send

Sin embargo, no recibo ningún error y el registro TXThaceinsertarse con los siguientes nsupdatecomandos:

server 10.0.0.1
add _acme-challenge.example.com 1010001 in TXT "abc"
send

información relacionada