Docker Embedded DNS retorna nome de domínio truncado ao fazer pesquisa reversa de ns

Docker Embedded DNS retorna nome de domínio truncado ao fazer pesquisa reversa de ns

Tenho tentado configurar o nome de domínio dentro de um contêiner e verificar como o DNS do Docker incorporado lida com essas configurações. Mas fiquei surpreso ao ver que só recebi um nome de domínio truncado ao fazer uma pesquisa reversa de ns.

Eu configurei o fqdn para ser assim ldec<i>.n18.org O comando hostname --fqdndentro do contêiner me retornou ldec1.n18.orgconforme o esperado, o ping ping ldec1.n18.orgestá funcionando conforme o esperado com o fqdn devidamente resolvido.

Mas se eu fizer uma pesquisa reversa de ns como dig -x <container_ip>, sempre recebo um nome de domínio truncado como ldec3.n18em vez 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

Então, por que dig me retorna um nome de domínio truncado?

Para construir a imagem

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 os 3 containers na mesma rede

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

Responder1

Para responder minha própria pergunta, testei com Podman V3 junto com o plugin dnsname e com dnsmasq no host e finalmente consegui o que esperava

...
;; 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.
...

Portanto, parece que o DNS interno do Docker tem uma maneira muito específica/opinativa de responder a solicitações de DNS reverso e se você precisar de um comportamento de DNS mais convencional, para testar suas funções ansible que lidam com configurações de rede, etc..., talvez seja melhor usar o Podman V3 ou tentando desviar o DNS interno do Docker e usar algo como dnsmasq ou bind9.

Verifique também este tópico relacionado no SO que explica:como-posso-dar-docker-containers-acesso-a-dnsmasq-local-dns-resolver-on-the-h.

EDITAR2:DNS incorporado do Docker

Consultas reversas de DNS em hosts dentro de redes personalizadas são 'peculiares' e o Docker não permite desativar o DNS incorporado (remonta a 2017):

Portanto, em 2023, você ainda terá soluções alternativas com /etc/resolv e /etc/hosts ou corrigir o código para desativar o ES.

informação relacionada