我需要的
转发 DNS 服务器作为另一个 DNS 服务器的中介,该 DNS 服务器提供过期记录并在稍后更新其缓存。
问题
我尝试使用它unbound
,因为我发现它是唯一具有此服务过期功能的软件。
但是我的设置存在一个问题unbound
,即它会发送多个查询并执行一些奇怪的操作,使其自身比到上游服务器的简单dig
或nslookup
(~100ms)慢(~几百毫秒)(假设它的地址是22.22.22.22
)。我能做些什么让 unbound 的行为比这更简单吗?:
/etc/unbound/unbound.conf:
include-toplevel: "/etc/unbound/unbound.conf.d/*.conf"
server:
chroot: ""
logfile: /var/log/unbound.log
verbosity: 2
log-queries: yes
port: 53
cache-min-ttl: 600
rrset-cache-size: 400m
msg-cache-size: 200m
prefetch: yes
serve-expired: yes
serve-expired-ttl: 172800 # :)
do-not-query-localhost: no
tcp-upstream: no
outgoing-num-tcp: 4000
incoming-num-tcp: 4000
access-control: ... # a few access-control lines
so-reuseport: yes
tcp-idle-timeout: 10000
edns-tcp-keepalive: yes
remote-control:
control-enable: yes
forward-zone:
name: "ir"
forward-addr: 46.224.1.42
forward-addr: 8.8.4.4
forward-zone:
name: "."
forward-addr: 22.22.22.22 # Upstream server
答案1
对于我的目的(缓存和提供过期/陈旧的记录)来说,CoreDNS 似乎工作得更好,采用以下配置:
. {
bind lo
forward . 22.22.22.22
log
cache {
success 20000 3600 600
denial 10000 1800 600
prefetch 5000
serve_stale 172800s immediate
}
}
其中 22.22.22.22 是上游服务器的地址,serve_stale 172800s immediate
模仿serve-expired
的功能unbound
。因此,当响应过期时,它们被视为在 172800 秒内是新鲜的,并立即发送给客户端,而无需等待上游。(https://coredns.io/plugins/cache/)