我现在通过 VPN 使用公共 DNS,以避免中国的一些 DNS 污染。但这也带来了一个代价,那就是我无法利用 CDN。
有没有办法配置 dnsmasq 并让它查询两个 DNS 服务器(公共服务器和 ISP 服务器),并返回具有较低指标的 IP?
我知道可以使用server=/domain/server
指令为某个域分配 DNS 服务器,但问题是有数百个。所以我必须想出一个通用的方法。
提前致谢。
答案1
DNSmasq 无法为您完成此操作。但是,具有管道后端的 Powerdns 可以,因为您可以编写自己的代码来进行解析。我会使用 python pydns 作为后端,因为它可以轻松查询任意名称服务器。
答案2
有没有办法配置 dnsmasq 并让它查询两个 DNS 服务器(公共服务器和 ISP 服务器),并返回具有较低指标的 IP?
dnsmasq 提供选项 --all-servers
--所有服务器
默认情况下,当 dnsmasq 有多个上游服务器可用时,它将只向一个服务器发送查询。设置此标志将强制 dnsmasq 将所有查询发送到所有可用的服务器。最先回答的服务器的回复将返回给原始请求者。
这个选项确实回答了你的问题
答案3
我不认为 dnsmasq 会给你这个功能。不过,bind 可以解决这个问题。我知道他们说设置 bind 有点过头了,但对于你正在尝试做的事情来说,这还不算太糟糕。
options {
forwarders {
x.x.x.x; //ISP dns ip address
y.y.y.y; //Public dns ip address
}
}
关键是转发器是按照从上到下的顺序进行查询的。因此,将首先查询 ISP(这很可能也会给出较低的度量值),如果失败,则将查询公共转发器。