1. 为什么你的路由器需要 DoH?从 DNS 泄露说起
你可能觉得,上网就是打开浏览器输入网址,然后网页就出来了。但在这背后,有一个默默无闻的“翻译官”在辛勤工作,它就是 DNS。简单来说,DNS 的作用就是把我们人类能记住的 www.example.com 这样的域名,翻译成计算机能理解的 192.0.2.1 这样的 IP 地址。没有它,互联网寸步难行。
然而,传统的 DNS 查询有一个巨大的问题:它几乎是“裸奔”的。当你向你的网络运营商或者公共 DNS 服务器发起一个查询,比如“www.我的秘密网站.com 的 IP 是多少?”,这个请求通常是以未加密的明文形式,通过 UDP 或 TCP 协议发送的。这意味着,在你和服务器之间的任何一个环节——比如你连接的不安全的公共 Wi-Fi、你的网络服务提供商,甚至是你本地网络里的恶意软件——都能轻易地看到你正在访问哪些网站。这就是所谓的 DNS 泄露,它严重侵犯了你的隐私。
想象一下,你每次想去一个地方,都需要在街上大声喊出目的地,然后等一个陌生人给你指路。不仅所有人都知道你去了哪,指路的人还可能故意给你指错方向(DNS 劫持或污染)。这显然不是我们想要的。
DNS over HTTPS 就是为了解决这个问题而生的。它把 DNS 查询请求,像你浏览一个加密的 HTTPS 网站一样,打包进一个加密的 HTTPS 连接里发送出去。这样一来,中间人只能看到你和某个服务器(比如 Cloudflare 或 Google 的 DoH 服务器)建立了加密连接,但完全无法知道你具体查询了哪个域名。这极大地提升了隐私性和安全性,能有效防止窃听和篡改。
对于 MikroTik RouterOS 用户来说,从 V6.47 版本开始就支持了 DoH 功能。到了 V7.6,这个功能已经相当成熟和稳定。今天,我就手把手带你,在 MikroTik RouterOS V7.6 上,完成从获取证书到最终启用加密 DNS 解析的全过程。我会以国内比较常用的 DNSPod 公共 DoH 服务为例,同时也会穿插讲解使用 Cloudflare 等国际服务的要点,帮你避开我踩过的那些坑。
2. 准备工作:认识你的工具与环境
在开始动手之前,我们得先确保手头的工具和环境是就绪的。这就像修车,你得先知道扳手和螺丝刀放在哪。
首先,确认你的 MikroTik 设备正在运行 RouterOS V7.6 或更高版本。V7 系列相比 V6 在底层和功能上有不少改进,对 DoH 的支持也更完善。怎么查看版本呢?很简单,打开 Winbox,连接到你的路由器,在左侧导航栏找到 System > Packages,这里就能看到当前的 RouterOS 版本。如果不是 V7.6,建议先通过 System > Packages > Check for Updates 进行升级。升级过程一般很平滑,但稳妥起见,操作前最好备份一下配置(Files > Backup)。
接下来是我们的主要操作工具:Winbox。这是一个 MikroTik 官方提供的、非常轻量级但功能强大的图形化管理工具。它比 WebFig(网页版)响应更快,功能也更直接。你可以在 MikroTik 官网的下载页面找到它。如果你还没用过 Winbox,它的连接方式很简单:通常你只需要知道路由器的 IP 地址(比如 192.168.88.1),以及 admin 用户的密码,就能连接上去。界面虽然看起来有点复古,但用习惯了效率非常高。
最后,我们需要选定一个 DoH 服务提供商。原始文章里用的是 DNSPod 的服务,地址是 https://doh.pub/dns-query,这个在国内访问速度和稳定性都不错。你也可以选择其他服务,比如:
- Cloudflare: https://1.1.1.1/dns-query 或 https://cloudflare-dns.com/dns-query
- Google: https://dns.google/dns-query
- Quad9: https://dns.quad9.net/dns-query
选择哪个取决于你的网络环境和对服务商的信任偏好。Cloudflare 的 1.1.1.1 以隐私承诺著称,速度也很快,是全球广泛使用的选择。本文会以 DNSPod 为主线,但原理和步骤是相通的。无论选哪个,关键一步都是要获取并信任该服务商的 TLS 证书,否则加密连接无法建立。
3. 第一步:获取并导入 DoH 服务器的 TLS 证书
这是整个配置中最关键,也是新手最容易出错的一步。DoH 基于 HTTPS,而 HTTPS 依赖 TLS 证书来验证服务器身份并建立加密通道。RouterOS 需要信任给你提供 DoH 服务的那个服务器的证书。
3.1 从浏览器导出证书(以 DNSPod 为例)
最直观的方法就是从浏览器里直接导出。这里以 Google Chrome 浏览器为例。
为什么是根证书,而不是服务器证书? 因为 RouterOS 在验证 DoH 服务器时,需要沿着证书链一直验证到一个它信任的根证书。我们直接导入根证书,是最可靠的方法。如果你导入的是中间证书或服务器证书,很可能因为证书链不完整而导致验证失败,出现“unable to get local issuer certificate”之类的错误。
3.2 通过命令行工具获取证书(更通用的方法)
如果你不想用浏览器,或者服务商没有提供直接的网页,用命令行工具获取证书更通用。这里以 Cloudflare 的 1.1.1.1 为例,演示如何用 openssl 命令获取其根证书。
打开你电脑上的终端(Linux/macOS 的 Terminal,或 Windows 的 PowerShell/CMD,但 Windows 可能需要先安装 OpenSSL)。
openssl s_client -connect 1.1.1.1:443 -showcerts </dev/null 2>/dev/null | openssl x509 -outform PEM > cloudflare_root_ca.pem
这个命令会连接到 1.1.1.1 的 443 端口,获取其展示的证书链,并将根证书以 PEM 格式保存到 cloudflare_root_ca.pem 文件中。PEM 格式(通常是 .pem 或 .crt 后缀,文本格式,以 —–BEGIN CERTIFICATE—– 开头)是 RouterOS 支持的格式。
对于 DNSPod (doh.pub),你也可以用同样的方法获取。或者,如果你知道其证书颁发机构(CA),可以直接从 CA 官网下载根证书。例如,DNSPod 使用的可能是 DigiCert 的证书,你就可以去 DigiCert 官网下载其全球根证书。
3.3 将证书上传并导入到 RouterOS
拿到证书文件后,我们需要把它放到路由器上。
接下来是导入证书,让系统信任它。
至此,证书准备工作就完成了。你可以重复这个过程,导入多个你可能会用到的 DoH 服务商的根证书,以备不时之需。
4. 第二步:在 Winbox 中配置 DoH 服务器
证书就位,现在可以开始配置核心的 DoH 功能了。
配置完成后,点击窗口下方的 Apply 或 OK 保存设置。路由器会立即尝试使用新的 DoH 配置。
5. 避坑指南:解决 IPv4/IPv6 冲突与解析错误
配置保存后,别急着庆祝,我们得验证它是否真的在工作,并解决一些常见的“坑”。
5.1 验证 DoH 是否生效
有几个方法可以检查:
- 查看日志:点击 Winbox 左侧的 Log,在 Topics 里勾选 DNS。如果你看到持续的 “DoH server connection error” 错误,说明配置有问题。如果只有零星的一两条连接信息,之后是安静的,那很可能说明 DoH 连接已经稳定建立,后续的查询都通过这个加密通道进行了。
- 使用 Torch 工具:在 Winbox 中打开 Tools > Torch。选择你的 WAN 口(连接外网的接口),开始捕获流量。然后,在你的电脑上访问几个新网站。在 Torch 的流量显示中,你应该看不到目标端口为 53 (DNS) 的 UDP/TCP 流量大量出现。相反,你可能会看到到你的 DoH 服务器 IP(比如 1.1.1.1 或 DNSPod 服务器的 IP)的 443 端口 (HTTPS) 的 TCP 流量。这说明 DNS 查询已经走了加密的 HTTPS,而不是明文的 53 端口。
- 在线测试:像 Cloudflare 提供了 https://1.1.1.1/help 这样的页面,可以检测你的连接是否使用了 DoH。但注意,这个测试页本身可能被某些网络环境屏蔽。
5.2 攻克“IPv4/IPv6 解析冲突”大坑
这是原始文章特别提到,也是很多朋友会遇到的问题。现象是:配置好 DoH 后,电脑可能能上部分网站,但有些网站打不开,或者 IPv6 测试完全失败。
根本原因:当你在 IP > DNS 设置中,没有勾选 Use Peer DNS(从拨号或 DHCP 客户端获取 DNS),同时 Servers 列表又是空的时候,路由器本机(注意,是路由器自己这个设备)的 DNS 解析能力是不完整的。它虽然有 DoH 配置,但可能因为某些原因(比如缺少静态 DNS 记录)无法正确解析出 DoH 服务器域名或其他一些关键域名。
解决方案(任选其一):
5.3 常见错误与排查
- 错误: DoH server connection error: SSL: handshake failed: unable to get local issuer certificate (6)
- 原因:这是最典型的证书问题。RouterOS 不信任 DoH 服务器的证书。
- 解决:确认你已经正确导入了根证书(Root CA),并且将其标记为 Trusted。重新检查证书导入的步骤。
- 错误: DoH server connection error: resolving error
- 原因:RouterOS 无法解析你填写的 DoH 服务器域名(如 doh.pub)。
- 解决:采用上面“避坑指南”中的方法,要么在 Servers 留一个 DNS,要么添加静态 DNS 记录。
- 错误: DoH server connection error: SSL: ssl: no common version (6)
- 原因(根据网络搜索结果):这可能是 TLS 版本不兼容导致的。有用户报告,某些 DoH 服务器开始要求使用 TLS 1.3,而 RouterOS V7.6 可能默认支持或最高只支持到 TLS 1.2。
- 解决:这个问题比较棘手。首先尝试在 DoH 服务器端(如果你是自己搭建的)调整 TLS 配置,兼容 TLS 1.2。如果用的是公共服务器,你可能需要等待 RouterOS 更新以支持 TLS 1.3,或者暂时换用另一个支持 TLS 1.2 的 DoH 服务商。
- 错误: 间歇性连接超时或断开
- 原因:网络不稳定,或路由器性能不足处理大量加密查询。
- 解决:尝试在 IP > DNS 设置中,适当增加 DOH Max Concurrent Queries 和 DOH Max Server Connections 的值。对于性能较弱的设备(如 hEX S),启用 DoH 可能会增加一些 CPU 负担,这是正常的。如果负担过重,可以考虑换用性能更强的硬件,或者评估是否必须启用 DoH。
6. 高级技巧与防火墙优化
当 DoH 基本工作后,我们可以进一步优化,让网络更安全、更高效。
6.1 强制局域网设备使用路由器的 DoH
仅仅在路由器上配置 DoH,只保护了路由器本身发出的查询。如果你通过 DHCP 给局域网设备下发了路由器自己的 IP 作为 DNS 服务器(这是默认行为),那么这些设备的查询会先发送到路由器,再由路由器通过 DoH 转发出去,从而间接受到保护。但是,有些设备(特别是手机)可能会硬编码使用如 8.8.8.8 这样的公共 DNS,绕过你的设置。
为了确保所有流量都经过加密,你可以在路由器的防火墙中,强制重定向所有出站的 DNS 流量(目标端口 53)到路由器自身。这样,即使设备设置了别的 DNS,查询也会被“劫持”回来,通过你的 DoH 通道发出。
在 Winbox 中,进入 IP > Firewall,在 NAT 选项卡中添加一条规则:
- Chain: dstnat
- Protocol: udp (和 tcp,需要两条规则)
- Dst. Port: 53
- Action: dst-nat
- To Addresses: 192.168.88.1 (你的路由器 LAN 口 IP)
- To Ports: 53
同时,确保你的防火墙 Filter 规则允许路由器自身(In. Interface 为 LAN,Dst. Address 为路由器 IP,Dst. Port 为 53)接收这些 DNS 查询请求。
6.2 优化 DNS 缓存与性能
DoH 查询因为要经历 TLS 握手和 HTTP 封装,理论上比传统 DNS 延迟稍高。良好的缓存可以极大提升体验。
在 IP > DNS 设置中:
- Cache Size: 根据你的设备内存调整,家庭网络设置 2048 KiB 或 4096 KiB 通常足够。
- Cache Max TTL: 设置一个较长时间,例如 1w(一周),让缓存条目留存更久,减少重复查询。
- Max Concurrent Queries: 提高此值(例如 150),允许同时处理更多查询,避免排队。
6.3 防火墙放行 DoH 流量
如果你的防火墙规则非常严格,记得要放行路由器向 DoH 服务器发起的 HTTPS(TCP 443 端口)流量。通常出站(chain=srcnat 或 chain=forward 的 action=accept)规则是允许的,但如果你有出站限制,需要检查。在 IP > Firewall > Filter 规则中,确保有规则允许从路由器本地(src-address 是路由器 WAN 口 IP 或 in-interface 是 LAN bridge 但 connection-state 为 new 的流量)访问外部 TCP 443 端口。
配置完成后,重启一下路由器是个好习惯,可以检验所有配置是否能在启动时自动加载并正常工作。重启后,再次用 Torch 工具和日志来验证 DoH 是否持续稳定运行。
网硕互联帮助中心



评论前必须登录!
注册