云计算百科
云计算领域专业知识百科平台

MikroTik RouterOS V7.6 配置 DoH 服务器实战指南:从证书导入到 DNS 加密解析

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 浏览器为例。

  • 在你的电脑上,用 Chrome 浏览器打开 DNSPod 的 DoH 服务地址:https://doh.pub/dns-query。你会看到一个简单的 JSON 响应,这很正常,说明服务是通的。
  • 注意看浏览器地址栏的左侧,应该有一个锁形图标。点击这个锁形图标。
  • 在弹出的菜单中,点击“连接是安全的”这句话。
  • 在接下来弹出的浮窗中,点击“证书是有效的”。
  • 这会打开系统的证书查看窗口。切换到“证书路径”选项卡。你会看到一个证书链,通常最上面是根证书,中间是中间证书,最下面才是服务器证书(doh.pub)。
  • 我们需要的是最顶层的根证书(Root CA)。选中它,然后点击“查看证书”。
  • 在新弹出的证书详情窗口中,切换到“详细信息”选项卡,点击底部的“复制到文件…”。
  • 这会启动证书导出向导。点击“下一步”,选择“Base64 编码的 X.509 (.CER)”格式,再点击“下一步”。
  • 为证书文件选择一个保存位置和名字,比如 DigiCertGlobalRootCA.cer,然后完成导出。
  • 为什么是根证书,而不是服务器证书? 因为 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

    拿到证书文件后,我们需要把它放到路由器上。

  • 在 Winbox 中,点击左侧导航栏的 Files。这里就像路由器的文件管理器。
  • 点击上方工具栏的 Upload(上传)按钮,在弹出的窗口中找到你刚才保存的证书文件(比如 DigiCertGlobalRootCA.cer 或 cloudflare_root_ca.pem),选中并上传。
  • 上传成功后,你会在文件列表里看到它。
  • 接下来是导入证书,让系统信任它。

  • 点击左侧导航栏的 System > Certificates。
  • 在证书管理界面,点击上方菜单栏的 Import(导入)按钮。
  • 一个文件选择窗口会弹出,里面列出了 /files/ 目录下的文件。找到你刚刚上传的证书文件,选中它。
  • 关键一步:Passphrase(密码)栏通常留空,除非你的证书文件有密码保护。
  • 点击 Import。如果导入成功,你会在证书列表中看到新导入的证书,其 Issued To 和 Issued By 通常是同一个名字(因为是根证书,自己给自己签名),并且 Trusted 这一列会显示一个灰色的“X”或空白,这没关系,我们下一步来设置信任。
  • 选中你刚刚导入的证书,然后点击菜单栏的 Trusted 下拉框,选择 yes 或 apply(不同版本界面略有差异)。将其标记为受信任。完成后,该证书的 Trusted 列应该会有一个勾选标记。
  • 至此,证书准备工作就完成了。你可以重复这个过程,导入多个你可能会用到的 DoH 服务商的根证书,以备不时之需。

    4. 第二步:在 Winbox 中配置 DoH 服务器

    证书就位,现在可以开始配置核心的 DoH 功能了。

  • 在 Winbox 左侧导航栏,找到 IP > DNS 并点击。这里管理着路由器所有的 DNS 设置。
  • 打开 DNS 设置窗口后,你会看到几个重要的配置项。我们先关注 Servers 这一栏。这里原本可能填写着你从运营商自动获取的 DNS 服务器地址(比如 192.168.1.1 或 8.8.8.8)。
  • 一个重要的决策点:你是否需要保留传统的 DNS 服务器地址?我建议先保留一个。为什么?因为 RouterOS 在初始建立 DoH 连接时,它自己需要先解析出 DoH 服务器的域名(例如 doh.pub 或 cloudflare-dns.com)对应的 IP 地址。如果 Servers 列表完全为空,而你又没有手动为这个域名指定 IP,路由器自己都不知道该连接到哪里去启用 DoH,就会陷入“先有鸡还是先有蛋”的死循环。所以,在 Servers 里留一个可靠的、快速的公共 DNS IP(比如 119.29.29.29 或 8.8.8.8)是稳妥的做法。等 DoH 完全正常工作后,你可以再尝试清空它。
  • 接下来是重头戏:找到 Use DoH Server 这个输入框。在这里填入你选择的 DoH 服务地址。对于 DNSPod,就填入 https://doh.pub/dns-query。注意,必须是完整的 https:// 开头,只填域名或 IP 是不行的。
  • 填入地址后,务必勾选它下方的 Verify DoH Certificate(验证 DoH 证书)复选框。这个选项就是告诉 RouterOS:“连接 DoH 服务器时,请用我们刚刚导入的受信任证书去校验对方的身份,确保我不是在连接一个假冒的服务器。” 这是保证安全性的核心一步。如果不勾选,虽然连接可能也能建立,但失去了防中间人攻击的意义,隐私保护大打折扣。
  • 其他参数可以暂时保持默认,比如 Max Concurrent Queries(最大并发查询数)、Cache Size(缓存大小)等。如果你的网络设备很多,可以适当调大这些值。
  • 配置完成后,点击窗口下方的 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 服务器域名或其他一些关键域名。

    解决方案(任选其一):

  • (推荐)在 Servers 中保留一个备用 DNS:就像前面提到的,在 Servers 里填写一个可靠的 IPv4 DNS 服务器地址。这样路由器在启动时,或者 DoH 连接临时中断时,有一个后备解析手段。这个备用 DNS 只用于路由器自身解析少数几个域名(主要是 DoH 服务器的域名),一旦 DoH 连接建立,用户设备的所有查询都会走 DoH,备用 DNS 不会被用于常规查询,隐私影响很小。
  • (根治)添加静态 DNS 记录:在 IP > DNS > Static 选项卡中,手动添加一条静态记录。例如,如果你用的是 https://doh.pub/dns-query,那么你需要让路由器知道 doh.pub 这个域名对应什么 IP。你需要查询(可以用你电脑的 nslookup doh.pub)到 doh.pub 的 IPv4 地址(假设是 X.X.X.X),然后添加一条静态记录:Address 填 X.X.X.X,Name 填 doh.pub,TTL 可以设置长一些比如 1d。这样路由器无需查询就知道如何连接 DoH 服务器了。对于 IPv6 同理,如果 DoH 服务器支持 IPv6,也需要添加对应的 AAAA 记录静态条目。
  • 检查并合理配置 IPv6:如果你的网络有 IPv6,确保 IPv6 > ND 和 DHCP Client 中的 DNS 获取设置是合理的。有时 IPv6 自动获取的 DNS 会与你的 DoH 设置冲突。一个简单的做法是,在 IPv6 > DNS 设置中,也启用 DoH(如果支持),或者将 DNS 服务器设置为 ::(空)并依赖 IPv4 侧的 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 是否持续稳定运行。

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » MikroTik RouterOS V7.6 配置 DoH 服务器实战指南:从证书导入到 DNS 加密解析
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!