Docker Embedded DNS gibt bei der umgekehrten ns-Suche einen gekürzten Domänennamen zurück

Docker Embedded DNS gibt bei der umgekehrten ns-Suche einen gekürzten Domänennamen zurück

Ich habe versucht, einen Domänennamen in einem Container einzurichten und zu prüfen, wie das eingebettete Docker-DNS mit diesen Einstellungen umgeht. Aber ich war überrascht, dass mir beim Reverse-NS-Lookup nur ein verkürzter Domänenname zugewiesen wurde.

Ich habe den FQDN wie folgt eingestellt: ldec<i>.n18.org Der Befehl hostname --fqdnim Container wurde mir ldec1.n18.orgwie erwartet zurückgegeben, der Ping ping ldec1.n18.orgfunktioniert wie erwartet mit ordnungsgemäß aufgelöstem FQDN.

Wenn ich jedoch eine umgekehrte ns-Suche wie durchführe dig -x <container_ip>, wird mir immer ein verkürzter Domänenname wie ldec3.n18anstelle von zurückgegeben 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

Warum gibt Dig mir einen verkürzten Domänennamen zurück?

So erstellen Sie das Image

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

So starten Sie die 3 Container im selben Netzwerk

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

Antwort1

Um meine eigene Frage zu beantworten, habe ich mit Podman V3 zusammen mit dem DNSName-Plugin und mit DNSMasQ auf dem Host getestet und endlich das bekommen, was ich erwartet hatte

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

Es scheint also, dass Dockers interner DNS eine sehr spezifische/eigensinnige Art hat, auf Reverse-DNS-Anfragen zu antworten. Wenn Sie ein konventionelleres DNS-Verhalten benötigen, um Ihre Ansible-Rollen im Umgang mit Netzwerkkonfigurationen usw. zu testen, sind Sie möglicherweise mit Podman V3 besser bedient oder versuchen, Dockers internen DNS zu umgehen und etwas wie dnsmasq oder bind9 zu verwenden.

Sehen Sie sich auch diesen zugehörigen Thread auf SO an, der Folgendes erklärt:wie-kann-ich-Docker-Containern-Zugriff-auf-einen-lokalen-DNS-Resolver-auf-dem-H-erteilen.

EDIT2:Eingebettetes DNS von Docker

Reverse-DNS-Abfragen auf Hosts innerhalb eines benutzerdefinierten Netzwerks sind „eigenartig“ und Docker lässt Sie deren eingebetteten DNS nicht deaktivieren (stammt aus dem Jahr 2017):

Im Jahr 2023 bleiben Ihnen also immer noch Workarounds mit /etc/resolv und /etc/hosts oder das Patchen des Codes, um ES zu deaktivieren.

verwandte Informationen