Docker Embedded DNS는 역방향 ns 조회를 수행할 때 잘린 도메인 이름을 반환합니다.

Docker Embedded DNS는 역방향 ns 조회를 수행할 때 잘린 도메인 이름을 반환합니다.

컨테이너 내부에 도메인 이름을 설정하고 내장된 Docker DNS가 해당 설정을 어떻게 처리하는지 확인하려고 했습니다. 그런데 역방향 ns 조회를 할 때 잘린 도메인 이름만 제공되는 것을 보고 놀랐습니다.

fqdn을 다음과 같이 설정했습니다. 컨테이너 내부의 ldec<i>.n18.org 명령이 예상대로 반환되었으며, fqdn이 제대로 해결되면서 ping이 예상대로 작동하고 있습니다.hostname --fqdnldec1.n18.orgping ldec1.n18.org

그러나 와 같이 역방향 ns 조회를 수행하면 항상 대신 과 dig -x <container_ip>같이 잘린 도메인 이름이 반환됩니다 .ldec3.n18ldec3.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

그렇다면 dig가 잘린 도메인 이름을 반환하는 이유는 무엇입니까?

이미지를 구축하려면

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

동일한 네트워크에서 3개의 컨테이너를 시작하려면

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

답변1

내 질문에 답하기 위해 호스트에서 dnsname 플러그인 및 dnsmasq와 함께 Podman V3를 사용하여 테스트했으며 마침내 기대했던 결과를 얻었습니다.

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

따라서 Docker의 내부 DNS에는 역방향 DNS 요청에 응답하는 매우 구체적이고 의견이 있는 방식이 있는 것 같습니다. 보다 일반적인 DNS 동작이 필요한 경우 네트워크 구성 등을 처리하는 가능한 역할을 테스트하려면 Podman V3를 사용하는 것이 더 나을 수 있습니다. 또는 Docker의 내부 DNS를 전환하고 dnsmasq 또는 bin9와 같은 것을 사용하려고 합니다.

다음을 설명하는 SO 관련 스레드도 확인하세요.docker-containers-access-to-a-dnsmasq-local-dns-resolver-on-the-h를 어떻게 제공할 수 있습니까?.

편집2:Docker의 임베디드 DNS

사용자 지정 네트워크 내부 호스트에 대한 역방향 DNS 쿼리는 '특이'하며 Docker에서는 내장된 DNS를 비활성화할 수 없습니다(2017년부터).

따라서 2023년에도 여전히 /etc/resolv 및 /etc/hosts를 사용한 해결 방법이나 ES를 비활성화하는 코드 패치가 남아 있습니다.

관련 정보