VPS 访问提速与防污染:部署 AdGuard Home、Unbound 与 SmartDNS 优化解析

VPS 默认用 8.8.8.8 访问国内或本地服务常常很慢还容易被污染?本文手把手讲清如何部署 AdGuard Home 拦截广告与提供加密 DNS、用 SmartDNS 自动选最快 IP、用 Unbound 做本地递归缓存,并给出组合搭建思路与避坑清单。

延伸阅读

更多相关攻略推荐:泛域名 SSL 证书自动化避坑:Acme.sh + DNS API BGP 是互联网的"高德地图":打开网页时,数据是这样找路的【优化线路 02】BGP / AS4837 常规线路年付 10 美元高级玩家玩出花:如何在 VPS 上广播自己的 IP 地址?BYOIP计算机科学两大难题之一:缓存失效与 CDN 瞬时刷新奥秘

一、为什么 VPS 上默认 DNS 这么慢还容易污染

你刚开一台国外 VPS,第一件事可能是改 /etc/resolv.conf,把 nameserver 写成 8.8.8.8 或 1.1.1.1,觉得"用大厂的公共 DNS 总没错"。但很快你会发现:访问某些服务时第一次连接要等好几秒,甚至偶尔解析到错误 IP。这不是你 VPS 性能差,而是 DNS 这一步就卡住了。

原因有两层。第一是距离:8.8.8.8 的节点可能离你的 VPS 物理距离很远,每次解析都要跨半个地球往返,单次查询几十毫秒很正常,频繁解析时就积少成多。第二是路由:公共 DNS 的回程路径未必最优,甚至在某些网络环境下会被中间设备篡改或投毒,把域名解析到错的地址,表现为"能连通但打开的是奇怪页面"或直接连不上。

更隐蔽的是:很多程序默认只用一个上游 DNS,而且不测速、不缓存、不加密。于是同一天里成千上万次对 api.xxx.com 的重复解析,每一次都老老实实发到国外去问一遍。这既慢又浪费,还把你的查询内容明晃晃地暴露给链路上的每一双眼睛。

二、AdGuard Home:一个 DNS 服务器顺手把广告拦了

AdGuard Home(简称 AGH)是开源的"全网级"广告与追踪拦截 DNS 服务器。它的工作方式是:把自己变成你网络里的 DNS 服务器,所有设备的解析请求先打到它这里,它对照广告和追踪域名清单,命中了就返回"黑洞"地址,设备自然就连不到那些服务器。好处是你不用在每台手机电脑上装客户端,一个 AGH 管全屋。

部署简单到有点离谱。在 Linux 上用官方一键脚本装好,浏览器打开 http://你的IP:3000 走初始化向导,设置监听端口(默认 53),再填上"上游 DNS 服务器"就能用了。它内置了 AdGuard DNS Filter、HaGeZi 等常见规则,开箱就能拦掉一大批广告和 telemetry 域名。社区里有人实测,普通家庭网络开一周能拦掉两三成甚至更多的请求,既干净又省带宽。

AGH 还自带一个很好用的"DNS 重写"(DNS rewrite)功能:你可以把某个内网域名(比如 adguard.home)直接指向某台机器 IP,等于一个迷你本地 DNS。折腾 VPS 时,用它把常用服务名固定到内网地址,比每次手敲 IP 舒服多了。

三、DoH 与 DoT:把 DNS 查询本身也加密了

默认 DNS 是明文跑在 53 端口的,链路上的任何人都看得清你查了什么域名。AdGuard Home 支持两种加密协议来堵这个洞:DNS over HTTPS(DoH,走 443 端口)和 DNS over TLS(DoT,走 853 端口)。在 AGH 的"加密设置"里填好你的域名和证书,它就会自动在 443 提供 DoH、在 853 提供 DoT,对外是一个加密的 DNS 服务器,对内把查询转发给上游。

配置上游时,建议优先填加密上游,比如 https://dns.cloudflare.com/dns-query、https://dns.quad9.net/dns-query,或者 tls://1.1.1.1。再配上 fallback(兜底)和 bootstrap(用来解析上游域名本身的解析器)。还有个实用开关叫"并行请求"(Parallel requests),开启后 AGH 会同时问多个上游、取最先回来的结果,速度更稳。对隐私敏感的用户,这一步把"谁在偷看我查了什么"的问题基本解决了。

四、SmartDNS:谁快用谁,自动选最优 IP

如果说 AGH 强在"拦截和加密",那 SmartDNS 的强项是"快"和"准"。它的核心机制很聪明:收到一个解析请求时,同时向你配置的多家上游 DNS(可以国内国外、可以 UDP/TCP/TLS/HTTPS 混合)发出查询,然后对返回的各个 IP 做测速,把延迟最低的那个 IP 交还给请求方。对 VPS 来说,这意味着访问 github.com 之类站点时,它帮你挑了当前最快的那个 CDN 节点 IP,而不是随便返回一个可能绕半天的地址。

配置示例是这样的:bind 监听 53,然后列几个上游,比如 server 223.5.5.5(国内)、server 119.29.29.29、server 8.8.8.8、server 1.1.1.1,再加上 server-tls 和 server-https 形式的加密上游。关键参数是 speed-check-mode,可以组合 ping、tcp:80、tcp:443 等多种测速方式;cache-size 控制缓存条数,prefetch-domain 开启域名预取,让常访站点下次解析近乎瞬时。SmartDNS 官方建议上游总数控制在 10 个左右,兼顾速度和稳定。

更进阶的是"分组"和"按域名分流":你可以让国内域名走国内 DNS 组、海外域名走海外组,既快又避免把隐私一股脑发给单一服务商。它还支持 ECS(EDNS Client Subnet),让 CDN 返回离你更近的节点,对 VPS 拉取资源尤其有用。

五、Unbound:自己当递归解析器,缓存拉满

前面两家本质都是"转发型"——它们把查询转给公共 DNS。Unbound 不一样,它是 NLnet Labs 出品的开源"验证型、递归型、缓存型"解析器。开启递归模式后,它不从公共 DNS 问答案,而是从根服务器开始,一级一级查到权威服务器,自己把答案算出来。好处是你的查询不经过任何第三方 DNS 厂商,没人拿去记日志;而且它内置 DNSSEC 校验,能挡掉一部分 DNS 投毒和中间人篡改。

部署也不复杂。Debian/Ubuntu 上 apt install unbound,编辑 /etc/unbound/unbound.conf,核心是 server 段里设 interface、access-control 允许哪些客户端,再开 prefetch: yes 做临近过期的预取,cache-min-ttl 和 cache-max-ttl 控制缓存时间。现代发行版大多自带 dns-root-data,根提示和 DNSSEC 信任锚开箱即用。想更快还可以加 forward-zone 指向 1.1.1.1、9.9.9.9 作为上游,兼顾递归与速度。Unbound 对频繁重复解析(比如你的程序一天查 api 几千次)能直接命中内存缓存,第二次起几乎零延迟。

六、三件套怎么搭:组合而不是三选一

这三者不是互斥的,常见的高效组合是"AdGuard Home 在最前,SmartDNS 或 Unbound 在身后"。思路:让 AGH 作为全网络的 DNS 入口(负责拦截广告、提供 DoH/DoT 加密),把它的上游设成 SmartDNS 或 Unbound;SmartDNS 负责多上游测速选最快 IP,Unbound 负责隐私递归与缓存。这样你既有广告拦截、又有加密、又有最快 IP、又有本地缓存,四样好处全占。

举个例子:VPS 本机把 /etc/resolv.conf 指向 127.0.0.1,127.0.0.1 跑 AGH(端口 53),AGH 上游填 http://127.0.0.1:SmartDNS端口(或 Unbound 的 5335),SmartDNS/Unbound 再连公共 DNS。层级清晰,各司其职。注意别让两个 DNS 软件抢同一个 53 端口,错开端口即可。

七、缓存加速:API 与爬虫类任务受益最大

很多人忽略的一点:DNS 缓存对"程序频繁发请求"的场景提速最明显。比如你的 VPS 上跑着一个定时任务,每分钟去拉某 API;或者跑爬虫,一天解析几万个域名。如果每查一次都走一趟公网 DNS,光解析延迟就能吃掉不少时间。把 AGH/SmartDNS/Unbound 的缓存开起来后,热门域名第二次起直接命中本地内存,解析从几十毫秒降到亚毫秒级,整体任务能快出一个量级。

具体调优:cache-size 给大一点(几万条不嫌多),prefetch 打开让快过期的条目提前刷新,cache 持久化(cache-persist)可选,重启也能保留热点。对 API 域名还可以用 SmartDNS 的 domain-rules 把它固定到某个低延迟上游组,进一步压低波动。

八、实操清单与避坑

  • 先确认端口没冲突:VPS 上常驻的 systemd-resolved 会占 127.0.0.53:53,装 Unbound/AGH 前先把它关掉或改端口,否则起不来。
  • 别只配一个上游:至少 3 到 5 个不同运营商/区域的 DNS,单点故障时不至于全断。SmartDNS 官方也说建议约 10 个。
  • 加密和明文分开看:对外给客户端用 DoH/DoT,内部转发可以用明文(都在本机回环,安全),别为了全加密把延迟堆高。
  • 缓存别设太狠:cache-min-ttl 不要超过一小时,否则域名换了 IP 你还在用旧地址,踩坑。unbound 官方建议 cache-min-ttl 控制在约 1200 秒以内。
  • 隐私要权衡:SmartDNS 默认会把请求发给所有配置的上游,若担心泄露,优先用 TLS 上游并做分组,别把国内域名也发给海外 DNS。
  • 防火墙放行:如果要对外提供 DoH/DoT,记得在防火墙放开 443 和 853,否则客户端连不上。

把这趟链路理顺之后,你会发现 VPS 的"网速感"肉眼可见地变好了:首次连接不再愣神,广告和追踪少了,解析几乎不拖后腿。DNS 是网络里最被低估的一环,花一小时调好,长期都受益。