如何搭建本地DNS/代理,实现OpenNIC专属TLD使用OpenNIC DNS、其余域名使用Cloudflare等公共DNS
如何搭建本地DNS/代理,实现OpenNIC专属TLD使用OpenNIC DNS、其余域名使用Cloudflare等公共DNS
嘿,这个需求我之前也折腾过!刚好有几个靠谱的方案可以分享给你,分GUI工具和手动配置Bind9两种路子,你可以根据自己的偏好选:
一、GUI工具方案(上手快,适合不想碰命令行的人)
我首推用DNSmasq搭配它的GUI前端,不同系统的具体工具推荐:
- Linux上可以直接用NetworkManager自带的DNSmasq插件,图形化界面里就能配置规则;
- Windows用户可以试试Simple DNS Plus,界面直观,支持按TLD分流的配置;
- Mac用户可以用LocalDNS这类第三方工具,或者结合系统原生DNS设置来做。
核心配置逻辑都是一样的:
- 先把默认的公共DNS设为Cloudflare的
1.1.1.1/1.0.0.1(或者你偏好的Google/OpenDNS); - 然后给OpenNIC专属的TLD(比如
.geek、.o、.bbs、.bit)单独加规则,指定这些域名的查询请求转发到OpenNIC的DNS服务器; - 最后把你所有设备的DNS地址改成这个本地DNS服务的IP(一般是
127.0.0.1,如果要给局域网其他设备用,就设成你的电脑局域网IP)。
二、Bind9配置方案(更灵活,适合想深度定制的人)
Bind9完全能实现你的需求,而且是很标准的企业级做法,我给你捋个简单的步骤:
- 首先编辑Bind9的主配置文件(通常在
/etc/bind/named.conf),先定义转发规则:- 先配置默认的公共DNS转发组,指向Cloudflare或者你常用的公共DNS;
- 再给每个OpenNIC专属TLD单独创建转发区域,指定用你选的OpenNIC服务器IP。
- 给你个极简的配置片段参考,你可以直接改了用:
// 全局默认:所有普通域名用Cloudflare DNS zone "." { type forward; forwarders { 1.1.1.1; 1.0.0.1; }; }; // 针对.geek域名:转发到OpenNIC服务器 zone "geek" { type forward; forwarders { 192.168.1.100; }; // 替换成你选的OpenNIC节点IP }; // 针对.o域名:同样转发到OpenNIC服务器 zone "o" { type forward; forwarders { 192.168.1.100; }; }; // 其他如.bbs、.bit等TLD,照着上面的格式复制添加就行 - 配置完之后重启Bind9服务,然后把设备的DNS改成Bind9服务器的IP就大功告成了。
一些实用小Tips
- 选OpenNIC服务器的时候尽量挑延迟低的,找本地或者邻近地区的节点,这样访问专属TLD的速度会快很多;
- 配置完一定要测试:用
nslookup test.geek看看是不是走OpenNIC,再用nslookup google.com验证是不是走公共DNS; - 要是怕Bind9配置出错,可以先备份原配置文件,改坏了直接还原就行。
备注:内容来源于stack exchange,提问作者hexd




