我在云中的某个区域有一个权威的 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