域名知识 SEO优化 网站建设 云服务器 IT互联网

自己搭建DNS服务器怎么做,私人DNS搭建教程

不少人遇到过这类网络故障,网页加载转圈很久,最后弹出广告页面,和想要访问的网站完全无关。或是网络连通正常,但部分网站打不开,切换网络环境又恢复访问。很多时候这类问题和带宽无关,根源是DNS查询过程被劫持篡改。

运营商自带DNS服务器,解析速度不一定理想,部分地区还会在解析结果中插入广告。输入正确网址,返回的却是错误页面或者推广页面。自建DNS服务器,可以拿回解析控制权,同时实现广告屏蔽、加密查询,还能管控家里孩子的上网内容。下面梳理几种主流方案的实操要点。

先想清楚你要什么

自建DNS不是只有单一方案。如果目标只是规避运营商劫持、提升解析速度,搭建递归解析器就足够,直接查询根服务器,不经过第三方转发。想要附带广告和追踪域名拦截,就需要选择带过滤能力的程序。多设备统一管控的场景,优先挑选自带Web管理面板的方案。

自己搭建DNS服务器怎么做,私人DNS搭建教程

AdGuard Home和Pi-hole是目前两款主流带过滤功能的DNS服务软件,都支持Docker部署,自带Web管理界面。BIND9属于传统DNS服务程序,功能强大,没有Web界面,全部配置依靠修改文本文件,适合有Linux操作基础的用户。

方案一:AdGuard Home,新手最省心的选择

AdGuard Home自带网页配置面板,内置广告过滤,支持DoH、DoT加密查询,还集成家长控制功能。部署完成后浏览器直接访问管理页面,不用手动修改配置文件。

部署的前提条件:一台Linux服务器,Ubuntu 24.04使用比较广泛。提前安装Docker和Docker Compose。打算公网访问管理后台,还需要域名解析指向服务器公网IP。

最容易卡住的一步是53端口。Ubuntu系统默认运行systemd-resolved服务,会占用53端口。AdGuard Home需要占用53端口接收DNS请求,所以要关闭系统自带这项服务。操作步骤简单:停止服务、关闭开机自启,删除旧的/etc/resolv.conf文件,新建配置文件,让服务器自身DNS查询使用公共DNS,例如1.1.1.1,保证服务器可以正常联网下载资源。

然后是Docker部署。新建工作目录,创建.env文件,填写域名、邮箱、时区信息。编写docker-compose.yml,定义AdGuard Home镜像、端口映射与数据卷。53端口需要同时映射TCP、UDP协议;80、443端口用于Web管理后台;3000端口仅初始化向导阶段使用,配置完成后可以关闭。

执行docker compose up -d启动服务,浏览器访问http://你的服务器IP:3000,打开初始化向导,设置管理员账号密码,AdGuard Home即可投入使用。

上游DNS怎么选。AdGuard Home本身不做递归解析,查询请求转发给上游DNS服务器。重视隐私可以选用加密DoH地址,腾讯https://doh.pub/dns-query或者阿里https://dns.alidns.com/dns-query都可以。Bootstrap DNS填写119.29.29.29与223.5.5.5,用来解析上游DoH服务器域名。

方案二:Pi-hole,生态更成熟

Pi-hole上线时间早于AdGuard Home,社区文档、插件生态积累更丰富。核心能力是局域网层面广告拦截,通过DNS过滤,拦截所有设备的广告请求,手机App、智能电视内的广告,浏览器插件无法拦截的内容,都可以在这里过滤。

Pi-hole的部署路径有两条。第一种,官方一键安装脚本,在兼容的Linux发行版直接运行,脚本交互提问之后自动完成部署。第二种使用Docker,官方提供现成docker-compose.yml模板。

Docker部署的核心配置和AdGuard Home相近:53端口映射TCP、UDP,Web界面默认80、443端口。环境变量设置时区和管理密码,FTLCONF_dns_listeningMode设置为ALL。注意一点,如果不启用Pi-hole的DHCP功能,NET_ADMIN权限可以不添加,添加也不会影响运行。

Pi-hole网页面板功能齐全,可以查看每台设备的DNS查询记录、被拦截域名清单、拦截率。支持分组规则,给孩子平板设置严格过滤策略,工作电脑使用宽松策略。

Pi-hole和AdGuard Home怎么选。两者核心功能高度重合,都是DNS黑洞+广告过滤。多项对比测试显示AdGuard Home部署上手更简单,初始化阶段直接配置网卡和管理员账号,部署完成后无需二次修改配置。Pi-hole优势在于生态完善,和其他工具集成方案更多,如果你正在使用Home Assistant这类自托管平台,Pi-hole的API和社区方案选择更多。

方案三:BIND9,传统但扎实

不需要广告过滤,只想搭建标准、完全自主可控的递归DNS服务器,BIND9是传统可靠的选择。配置文件存放于/etc/bind目录,主配置文件named.conf,全局选项在named.conf.options,自定义域名区域写在named.conf.local。

做缓存服务器是最简单的用法。默认配置本身就是缓存服务器,只需要在named.conf.options添加forwarders字段,填入上游DNS地址,比如1.2.3.4和5.6.7.8,重启服务生效。BIND9缓存查询结果,同一域名二次查询几乎瞬间返回。

BIND9还可以搭建权威服务器,管理自定义域名区域。每个区域单独创建zone文件,填写SOA、NS、A等各类记录。适合自有域名,需要对外提供解析服务的场景。配置复杂度高于AdGuard Home、Pi-hole,但灵活性、可控性更强。

怎么让全网络的设备都用上

DNS服务器部署完成之后,最简单的办法,在路由器DHCP配置内,把DNS地址修改为自建服务器内网IP。所有WiFi接入设备,手机、电脑、智能电视,都会自动采用这套DNS。

不想改动路由器,也可以在每台设备单独配置。手机WiFi详情手动填写DNS,电脑修改网络设置。设备数量多的时候逐台修改很麻烦,路由器层面统一配置效率最高。

容易忽略的细节:Docker部署AdGuard Home或者Pi-hole,容器网络模式会影响DNS监听。Docker默认bridge网络下,FTLCONF_dns_listeningMode必须设置ALL,否则局域网其他设备无法访问DNS端口。

出门在外怎么用

自建DNS局限在家庭局域网。外出使用手机流量,DNS依旧走运营商线路。解决方案是VPN。Pi-hole官方文档专门提到,Pi-hole搭配WireGuard,手机、笔记本在移动流量或者公共WiFi环境,依旧使用家里的DNS,广告拦截保持生效。

没有公网IP,可以用Tailscale这类虚拟组网工具。DNS服务器和手机接入同一个Tailscale网络,手机私有DNS填写Tailscale分配的IP,查询通过加密通道回传至家庭服务器,再转发外网。这套配置调试稍微繁琐,一次性部署后长期稳定运行。

搭建自建DNS,调试过程大概耗时一两个小时。部署完成之后,日常上网体验会干净很多,广告减少,解析速度提升,查询记录仅自己可见。这套方案无法解决全部网络故障,但网站域名解析这件事,控制权掌握在自己手里。

📄 免责声明

本文内容仅供学习参考,不构成任何商业操作指导。域名解析配置请结合自身服务商文档操作,因配置错误造成网站无法访问、业务损失本站不承担责任。文中涉及第三方产品、服务仅供举例,不代表本站推荐。