![복제본이 없는 DNS 분할 지평선](https://linux55.com/image/211759/%EB%B3%B5%EC%A0%9C%EB%B3%B8%EC%9D%B4%20%EC%97%86%EB%8A%94%20DNS%20%EB%B6%84%ED%95%A0%20%EC%A7%80%ED%8F%89%EC%84%A0.png)
클라우드의 특정 지역에 권한 있는 DNS 서버가 있습니다.
이제 내부 네트워크(그리고 그곳에서만)의 로컬 주소를 사용하여 이 영역의 일부 레코드를 전달해야 합니다. 나는 고전적인 분할 지평선을 생각합니다.
전체 영역을 복사하지 않고 이를 달성할 수 있는 방법이 있습니까?
이는 이전 네트워크 설정에서 나온 것이며 내부 보기에 대한 요구 사항은 영향을 미치지 않습니다.
아이디어: 일부 레코드가 포함된 내부 DNS 서버:
- NXDOMAIN 인턴을 확인하고 외부로 전달하는 파서
- dnsdist 및 "일부" 규칙이 있는 내부 DNS 서버
답변1
대답은 CoreDNS와 대체 플러그인(https://coredns.io/explugins/alternate/).
간단한 Docker 컨테이너가 모든 문제를 해결했습니다.
FROM golang:1.18 AS corednsbuilder
RUN git clone https://github.com/coredns/coredns.git /git
WORKDIR /git
RUN (echo "alternate:github.com/coredns/alternate" && cat /git/plugin.cfg) > /git/plugin.cfg.tmp && mv plugin.cfg.tmp plugin.cfg
RUN cd /git; make
FROM debian:stable-slim AS certs
SHELL [ "/bin/sh", "-ec" ]
RUN export DEBCONF_NONINTERACTIVE_SEEN=true \
DEBIAN_FRONTEND=noninteractive \
DEBIAN_PRIORITY=critical \
TERM=linux ; \
apt-get -qq update ; \
apt-get -yyqq upgrade ; \
apt-get -yyqq install ca-certificates ; \
apt-get clean
FROM scratch
COPY --from=certs /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
COPY --from=corednsbuilder /git/coredns /coredns
EXPOSE 53 53/udp
ENTRYPOINT ["/coredns"]
구성은 다음과 같습니다.
. {
forward . 192.168.1.254
alternate original NXDOMAIN,SERVFAIL,REFUSED . 1.1.1.1:53
log
}
이렇게 하면 192.168.1.254가 항상 요청되며 NXDOMAIN, SERVFAIL, REFUSED 중 하나를 반환하면 요청이 1.1.1.1:53으로 전달됩니다(영향을 받지 않음).