nslookup은 구성된 로컬 DNS에서 SERVFAIL 오류를 출력합니다.

nslookup은 구성된 로컬 DNS에서 SERVFAIL 오류를 출력합니다.

Nginx 및 로컬 DNS 설정 구성에 대한 YouTube 튜토리얼을 보고 있습니다. Ubuntu 22.04 호스트에서 작업하는 동안 튜토리얼 지침에 따라 Docker를 사용하여 설정한 DNS 서버에 문제가 발생했습니다. 입력한 도메인 이름을 확인하려고 하면 Docker DNS 서버가 이를 확인할 수 없습니다.

nslookup ns.main.com

;; Got SERVFAIL reply from 127.0.0.1, trying next server
Server:         192.168.1.1
Address:        192.168.1.1#53

** server can't find ns.main.com: NXDOMAIN

제가 직면한 첫 번째 문제는 docker-compose를 사용하여 Docker 컨테이너를 성공적으로 빌드할 수 있었지만 docker-compose up을 사용하여 시작하려고 하면 오류가 발생한다는 것이었습니다. 오류는 내 Ubuntu 호스트에서 systemd-resolved가 포트 53을 이미 사용하고 있음을 나타냅니다. 이 충돌을 해결하고 다음에 설명된 단계에 따라 컨테이너를 실행할 수 있었습니다.Ubuntu: systemd-resolved에서 사용되는 포트 53을 해제하는 방법이는 systemd-resolved에서 포트 53을 해제하는 데 도움이 됩니다.

/etc/resolv.conf

nameserver 127.0.0.1
nameserver 192.168.1.1
nameserver fe80::1%3
search .

sudo lsof -i :53

COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
com.docke 4079 juan  372u  IPv6 116841      0t0  UDP *:domain

DNS 확인 문제에 대한 해결책을 온라인에서 찾고 있지만 여전히 올바른 접근 방식을 확신할 수 없습니다. 일부 정보에서는 IPv6가 문제를 일으킬 수 있으므로 사용을 피해야 한다고 제안하지만 이것이 올바른 조치인지는 모르겠습니다. DNS 문제의 근본 원인이 IPv6 호환성 문제인지, 잘못된 구성인지, 아니면 다른 것인지 잘 모르겠습니다.

docker-compose.yml

services:
  nginx:
    build:
      context: ./nginx/
    ports:
      - 80:80
    volumes:
      - ./nginx/html/:/usr/share/nginx/html/
      - ./nginx/conf.d/:/etc/nginx/conf.d/
  dns:
    build:
      context: ./dns/
    restart: always
    ports:
      - 53:53
      - 53:53/udp
    volumes:
      - ./dns/named.conf:/etc/bind/named.conf
      - ./dns/zone/:/etc/bind/zone/
    command: named -c /etc/bind/named.conf -g -u named

DNS/도커파일

FROM alpine:latest
RUN apk add bind openrc
RUN rc-update -u named

DNS/named.conf

options {
    directory "var/bind";
    allow-transfer { "none"; };
    allow-query { any; };
    listen-on { any; };
};

zone "main.com" IN {
    type master;
    file "/etc/bind/zone/main.com";
};

DNS/zone/main.com

$ttl 86400
@       IN      SOA ns.main.com.    hostmaster.main.com.(
                    202 ; Serial
                    600 ; Refresh
                    3600 ; Retry
                    12378237) ; Expire

@       IN      NS  ns.main.com.
ns      IN      A   127.0.0.1

nginx/conf.d/default.conf

server {
    listen 80;
    server_name ns.main.com;

    location / {
        root /usr/share/nginx/html/main;
        index index.html;
    }
}

nginx/도커파일

FROM nginx:latest
COPY ./html /usr/share/nginx/html
RUN apt-get update && apt-get install -y procps

관련 정보