Docker Embedded DNS devuelve un nombre de dominio truncado al realizar una búsqueda inversa de ns

Docker Embedded DNS devuelve un nombre de dominio truncado al realizar una búsqueda inversa de ns

He estado intentando configurar el nombre de dominio dentro de un contenedor y comprobar cómo el DNS de Docker integrado maneja esas configuraciones. Pero me sorprendió ver que solo recibí un nombre de dominio truncado al realizar una búsqueda inversa de ns.

Configuré el fqdn para que fuera como ldec<i>.n18.org El comando hostname --fqdndentro del contenedor me devolvió ldec1.n18.orgcomo se esperaba, el ping ping ldec1.n18.orgfunciona como se esperaba con fqdn resuelto correctamente.

Pero si hago una búsqueda ns inversa como dig -x <container_ip>, siempre obtengo un nombre de dominio truncado como ldec3.n18en lugar de ldec3.n18.org.

root@ldec3:/# dig -x 172.18.0.4

; <<>> DiG 9.16.37-Debian <<>> -x 172.18.0.4 
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 21081
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;4.0.18.172.in-addr.arpa.       IN      PTR

;; ANSWER SECTION:
4.0.18.172.in-addr.arpa. 600    IN      PTR     ldec3.n18.

;; Query time: 0 msec
;; SERVER: 127.0.0.11#53(127.0.0.11)
;; WHEN: Mon Apr 17 18:59:38 UTC 2023
;; MSG SIZE  rcvd: 87

Entonces, ¿por qué dig me devuelve un nombre de dominio truncado?

Para construir la imagen

docker build --tag=debian:11-lde - <<EOF
FROM debian:11

ARG DEBIAN_FRONTEND=noninteractive 

ENV APT_CMD="apt-get install -y --no-install-recommends"
# SHELL ["/bin/bash", "-x", "-c"]

RUN echo "===> Add tools..."  \
  && apt-get update  \
  && apt-get install -y --no-install-recommends \
    iputils-ping bind9-dnsutils lsof \
    openssh-*   \
    wget curl  \
    iptables whois iproute2 net-tools \
    vim less sudo bash-completion patch \
    ca-certificates \
  && apt-get autoremove -y \
  && echo OK
EOF

Para iniciar los 3 contenedores en la misma red

docker network create --driver=bridge n18 --subnet=172.18.0.0/24 || true

for i in $(seq 1 1 3)
do
  docker rm -f "ldec${i}" || true
  declare domain="n18.org"
  docker run --interactive --tty --detach --rm --name "ldec${i}" \
            --network=n18 --hostname="ldec${i}.${domain}" \
            --dns="8.8.8.8" \
            debian:11-lde
done

Respuesta1

Para responder a mi propia pregunta, probé con Podman V3 junto con el complemento dnsname y con dnsmasq en el host y finalmente obtuve lo que esperaba.

...
;; QUESTION SECTION:
;4.0.5.192.in-addr.arpa.                IN      PTR

;; ANSWER SECTION:
4.0.5.192.in-addr.arpa. 0       IN      PTR     ldec3.newnet.podman.
...

Entonces, parece que el DNS interno de Docker tiene una forma muy específica/obstinada de responder solicitudes de DNS inversas y si necesita un comportamiento de DNS más convencional, para probar sus roles ansibles relacionados con configuraciones de red, etc., sería mejor que usara Podman V3. o intentar desviar el DNS interno de Docker y usar algo como dnsmasq o bind9.

Consulte también este hilo relacionado en SO que explica:¿Cómo-puedo-dar-acceso-a-los-contenedores-docker-a-un-dnsmasq-local-dns-resolver-en-el-h?.

EDITAR2:DNS integrado de Docker

Las consultas de DNS inversas en hosts dentro de redes personalizadas son "peculiares" y Docker no le permitirá deshabilitar su DNS integrado (se remonta a 2017):

Entonces, en 2023, todavía le quedan soluciones alternativas con /etc/resolv y /etc/hosts o parchear el código para deshabilitar ES.

información relacionada