MikroTik RouterOS 防 DNS 劫持实操:DoH 配置避坑指南
运营商DNS劫持导致网页跳转广告怎么办?通过MikroTik RouterOS配置DNS over HTTPS彻底解决,内含NTP同步、防火墙规则、静态缓存四步完整方案与常见避坑要点。
在日常运维中,最让人头疼的问题之一就是运营商的DNS劫持。明明访问的是正常网站,却莫名其妙跳转到了广告页面;或者是某些网站解析到了错误的IP地址,完全无法访问。这类问题在中小型企业和家庭网络中尤为常见。
很多人在遇到DNS劫持时,第一反应是更换DNS服务器,比如换成114.114.114.114或者8.8.8.8。但换了之后发现问题依然存在——这是因为运营商在出口路由上做了UDP 53端口的强制重定向,不管你本机设置的是什么DNS,请求包到了运营商的设备上都会被截获并转发到他们自己的DNS服务器上。
要彻底解决这个问题,关键在于让DNS查询流量绕开运营商的劫持设备。在MikroTik RouterOS上,我们可以通过配置DNS over HTTPS(DoH)来实现这个目标。
首先,确保RouterOS版本在6.47以上,因为DoH功能是从这个版本开始支持的。执行以下命令开启DoH:
```
/ip dns set servers= use-doh-server=https://dns.alidns.com/dns-query verify-doh-cert=yes
```
这里选用了阿里云的DoH服务,国内访问延迟较低。如果需要更高的隐私保护,也可以换成Cloudflare的DoH地址 `https://cloudflare-dns.com/dns-query`。
有一个常见的坑需要注意:光配置DoH还不够,还需要在防火墙上阻止UDP 53端口的普通DNS流量,强制所有设备使用路由器的DoH服务。否则设备可能会绕过路由器直接用UDP DNS查询,结果照样被运营商劫持。添加以下防火墙规则:
```
/ip firewall nat add chain=dstnat protocol=udp dst-port=53 action=redirect to-ports=53
/ip firewall filter add chain=input protocol=udp dst-port=53 in-interface=!bridge action=drop
```
第一条规则将所有内网设备的DNS请求重定向到路由器自身处理;第二条规则阻止从外网接口进入的DNS应答,防止伪造的DNS响应注入网络。
另一个容易踩坑的地方是DoH证书验证。如果路由器的时间不准确,证书验证会失败,导致所有域名解析都出问题。务必配置NTP时间同步:
```
/system ntp client set enabled=yes server-dns-names=ntp.aliyun.com,ntp.tencent.com
```
验证NTP同步状态可以使用 `/system ntp client print` 查看,确认status为 `synchronized` 后再进行后续配置。
还有一个小技巧值得分享:在 `/ip dns` 中启用静态缓存条目。把公司内部常用服务的域名做静态解析,不仅能避免公网DNS解析带来的延迟,还能防止内部域名信息泄露到公网DNS服务器上。例如:
```
/ip dns static add name=nas.internal.local address=192.168.1.100
```
配置全部完成后,可以通过以下命令验证DoH是否真正生效。先清空DNS缓存:
```
/ip dns cache flush
```
然后找一个之前没访问过的网站测试访问,再查看DNS缓存中新增的记录。正常情况应该能看到通过DoH解析得到的记录。在终端上使用 `nslookup` 或 `dig` 工具也能交叉验证解析结果的准确性。
总结一下这条完整的DNS防护链路:NTP时间同步保障证书验证→DoH加密查询绕过运营商劫持→防火墙规则劫持内网所有DNS流量走路由器→静态缓存加速内部域名解析。四步环环相扣,运营商的DNS劫持基本就对你无效了。这套方案在我维护的多个中小企业网络中已稳定运行超过一年,效果非常可靠。
最后提醒一点:如果网络中有需要直连外部DNS的服务器(比如邮件服务器的SPF反查),记得在防火墙规则中添加例外匹配,避免影响正常业务。