无副本的 DNS 水平分割

无副本的 DNS 水平分割

我在云中的某个区域有一个权威的 DNS 服务器。

现在需要在内部网络中(仅在那里)传递带有本地地址的该区域的一些记录。我认为经典的水平分割。

有没有一种方法无需复制整个区域即可实现此目的?

这来自网络的旧设置,我对内部视图的需求没有影响。

想法:具有一些记录的内部 DNS 服务器以及:

  • 检查 NXDOMAIN intern 并转发给 extern 的解析器
  • 具有 dnsdist 和“some”规则的内部 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

相关内容