不少朋友给华硕路由器刷了梅林固件之后,第一件事就是想改DNS。原因五花八门:有人嫌运营商DNS劫持严重,网页弹广告;有人想指定公共DNS提升解析速度;还有人是配合内网设备做域名分流。但梅林固件的设置项比原厂固件多一些,DNS相关的配置分散在WAN口、LAN口和DHCP几个地方,不少人改了一处发现没生效,或者干脆把网络改断了。这篇文章把梅林固件下DNS设置的几个关键位置和常见坑一次性讲清楚。

梅林固件里DNS相关的几个设置位置
先明确一点:梅林固件(包括原版梅林和asuswrt-merlin.ng)里,DNS设置至少涉及三个地方,分别是WAN口的DNS服务器、LAN口的DNS和DHCP下发的DNS。这三处的作用完全不同,搞混了就会出现“我明明改了为什么没用”的情况。
WAN口的DNS设置在“外部网络(WAN) - Internet连接”页面里,这个设置决定的是路由器自己用什么DNS去解析域名,也就是路由器本身访问外网时使用的DNS。而LAN口DHCP下发的DNS,决定的是连接到路由器的设备使用什么DNS。默认情况下,梅林固件会把路由器自身设为DNS服务器(网关地址)下发给设备,由路由器上的dnsmasq统一转发。
所以实际链路是这样的:设备把DNS请求发给路由器,路由器上的dnsmasq再转发到WAN口配置的上游DNS。理解了这个链路,就知道只改设备上的DNS而不改WAN口,请求最终还是会经过路由器转发;反过来只改WAN口,设备层面通常也就跟着变了。
手动配置公共DNS的具体步骤
先说最常见的需求:把上游DNS换成公共DNS。操作路径是“外部网络(WAN) - Internet连接”,找到“DNS服务器1”和“DNS服务器2”,把“自动连接至DNS服务器”设为“否”,然后手动填入地址,比如首选填223.5.5.5(阿里DNS),备用填119.29.29.29(腾讯DNS)。保存并应用之后,在“系统日志 - DNS查询”里可以看到当前生效的解析服务器。
如果你希望局域网设备绕过路由器直接使用指定DNS,可以到“内部网络(LAN) - DHCP服务器”页面,把“DNS服务器1”和“DNS服务器2”手动填写。这样DHCP下发给设备的DNS就不再是网关地址,设备会直接向这两个DNS发起请求。这种做法的好处是解析路径更短,坏处是失去了路由器层面的统一管理能力,比如分流、去广告都会失效。
这里有个高频翻车点需要提醒:如果你开了VPN或者某些插件,部分流量可能走隧道,DNS也会跟着走隧道内的配置,这时候WAN口的DNS设置对这部分流量不起作用。排查时可以分别在设备上用nslookup测试:
# 在电脑命令行测试当前使用的DNS nslookup www.ipipp.com # 指定DNS服务器测试对比 nslookup www.ipipp.com 223.5.5.5
对比两次返回的结果,如果指定223.5.5.5解析正常、默认解析异常,那问题基本出在路由器侧的DNS配置或转发逻辑上。
开启DNS严格模式防止污染
梅林固件的一个隐藏优势是自带“DNS严格模式”(DNS over TLS的严格校验)。入口在“外部网络(WAN) - Internet连接”里,先把“WAN DNS设置”切换到手动,填好上游DNS后,会多出“DNS over TLS”相关选项。将“DNS-over-TLS(DoT)隐私协议”设为“严格”,并在“DNS-over-TLS主机名”里填写对应服务商的证书主机名,比如阿里的dns.alidns.com。
开启严格模式后,路由器与上游DNS之间的查询全程加密,中间链路上的设备既看不到查询内容,也无法返回伪造的解析结果,这是应对DNS污染比较彻底的方案。非严格模式下,路由器只验证服务器证书但不强制加密主机名匹配,安全性打折扣,一般建议直接用严格模式。
需要注意DoT走的是853端口,某些运营商会拦截这个端口。如果开启后解析全部失败,可以换一个支持DoT的服务商试试,或者降级回普通模式。验证DoT是否生效,可以访问一些DNS检测站点,查看出口解析服务器是否变成了阿里的地址。
进阶玩法:用Entware配合dnsmasq做分流
如果需求更复杂,比如国内域名走国内DNS、国外域名走可信DNS,可以在梅林固件上安装Entware,再配置dnsmasq的分流规则。核心思路是给dnsmasq写server规则,让它根据域名后缀把请求转发到不同的上游。
具体做法是先通过USB或JFFS分区启用Entware,然后编辑自定义dnsmasq配置。梅林固件支持通过/jffs/configs/dnsmasq.conf.add文件追加自定义规则,不会因固件升级丢失:
# /jffs/configs/dnsmasq.conf.add # 国内域名走阿里DNS server=/cn/223.5.5.5 server=/qq.com/119.29.29.29 server=/taobao.com/223.5.5.5 # 其余域名走指定的可信DNS server=1.1.1.1
写完保存后,在SSH里执行service restart_dnsmasq重启dnsmasq服务即可生效。如果你有现成的分流列表,也可以用conf-dir或者大批量的server=/域名/上游DNS规则来做更精细的划分。这个方案的好处是所有设备零配置,路由器统一完成分流,代价是维护域名列表需要花点心思。
常见失败原因和排查思路
最后整理几个最常见的翻车场景。第一个是改了DNS不生效,多半是因为设备缓存了旧的DHCP配置,把设备断开重连WiFi或者重启网卡即可;电脑上也可以用ipconfig /flushdns清缓存。第二个是IPv6环境下的优先级问题,如果网络支持IPv6而设备拿到了IPv6的DNS,IPv4的设置会被绕过,此时需要到“外部网络(WAN) - IPv6”里检查是否禁用了“自动获取DNS”,或者在LAN的DHCP相关设置里统一处理。
第三个是ISP层面的干扰,个别地区运营商会强制劫持53端口的明文DNS查询,这时无论怎么换公共DNS都可能被污染,解决方案就是前面说的DoT严格模式,直接把查询加密。第四个是插件冲突,某些去广告或科学上网插件会接管dnsmasq配置,手动写的规则可能被覆盖或顺序错乱,排查时可以先停用插件,确认基础DNS工作正常后再逐个启用。
总体来说,梅林固件的DNS设置就是“先分清WAN口和LAN口,再按需选择明文、DoT或分流方案”这么一条主线。普通家用建议WAN口手动填国内公共DNS并开启DoT严格模式,兼顾速度和抗污染;有折腾需求的再上Entware做分流。配置完成后多设备测试几轮,确认解析结果稳定,这套DNS方案就算落地了。