过去几天我一直在思考如何实现这一点。我喜欢 OpenNIC 及其所做的一切,但有时 DNS 服务器并不总是适合日常使用。虽然这通常不是问题,但却很麻烦。
我想知道如何设置本地 DNS 中继,以便对特定 TLD 使用 if/else 逻辑。
例如:如果 tld = *.geek、*.o、*.bbs、*.bit(等)则使用 OpenNIC DNS,否则使用 Cloudflare(或 google 或 openDNS 等)。
我还没能找到一种简单的方法来做到这一点。有谁知道有什么基于 GUI 的工具可以做到这一点?我在一些地方读到过我可以使用 Bind9 来做到这一点,但我也没能找到关于这一点的直接答案。我也想过设置一个 dns 代理,但也找不到太多相关信息。
如能提供任何与此相关的提示、资源、教程或知识,我们将不胜感激。
答案1
从技术上讲,你的要求当然是完全可行的,例如,多功能dnsmasq
工具已经支持--server=/domain/nameserver
选项:
S, --local, --server=[/[<domain>]/[domain/]][<server>[#<port>]][@<interface>][@<source-ip>[#<port>]]
直接指定上游服务器。设置此标志不会禁止读取/etc/resolv.conf
,使用--no-resolv
来执行此操作。
如果给出了一个或多个可选域,则该服务器仅用于这些域,并且仅使用指定的服务器查询它们。
这适用于私有名称服务器:如果您的网络上有一个名称服务器,它处理 形式的名称,xxx.internal.thekelleys.org.uk
那么192.168.1.1
给出标志--server=/internal.thekelleys.org.uk/192.168.1.1
会将所有对内部机器的查询发送到该名称服务器,其他所有内容都将发送到 中的服务器/etc/resolv.conf
。
因此,请将您的默认 DNS 服务器设置为/etc/resolv.conf
#/etc/resolv.conf
server 8.8.8.8
如果您的 OpenNIC 服务器 IP 地址例如是 192.0.2.2,请启动 dnsmasq 并选择通过 OpenNIC--server=/.geek/192.0.2.2 --server=/.bit/192.0.2.2
解析所有.geek
域名。.bit