网络使用中常常面临广告泛滥、国内网速慢、DNS泄漏及污染等问题。通过软路由部署MosDNS和AdGuardHome,并结合OpenClash,可以有效解决这些困扰,实现全屋广告拦截、国内直连加速以及国外访问的DNS零泄漏。
前置条件与准备
在开始配置之前,需要确保已完成以下准备工作:
- 已刷入ImmortalWRT系统的软路由一台。
- OpenClash已安装并能正常访问Google服务。
- 熟悉终端SSH连接软路由的操作。
软路由正常开机后,通过浏览器访问管理后台(例如192.168.6.1或192.168.1.1)。如果软路由作为副路由,需注意避免IP段冲突,可修改LAN口IP地址。
MosDNS安装与配置
MosDNS主要用于DNS分流。以下是安装和配置步骤:
- 安装MosDNS:
通过SSH连接软路由,运行一键安装脚本,等待显示
Done!即完成安装。 - 配置MosDNS基本选项:
- 在管理后台“服务”->“MosDNS”中,勾选“启用”。
- 取消勾选“DNS转发”,使其只负责分流而不接管所有DNS请求。
- 勾选“自定义国内DNS”,将国内DNS服务器设置为主路由的网关地址(优先使用运营商DNS)或公共DNS(如腾讯云119.29.29.29,阿里云223.5.5.5)。
- 远程DNS服务器填写
127.0.0.1:7874,这是OpenClash的DNS监听端口,用于国外域名解析。 - 点击“保存并应用”。
- 配置MosDNS高级选项:
- 点击“高级选项”标签,勾选“防止DNS泄漏”。
- 取消勾选“启用DNS缓存”,因为缓存将由AdGuardHome处理。
- 点击“保存并应用”。
- 更新MosDNS数据库:
- 点击“更新数据库”标签,勾选“启用自动更新”。
- 点击“检查并更新”。
- 点击“保存并应用”。
此时,DNS链路初步建立,国内域名走指定国内DNS,国外域名请求将转发至OpenClash处理。
AdGuardHome安装与配置
AdGuardHome主要负责广告拦截和DNS缓存。
- 下载和安装AdGuardHome:
- 从GitHub仓库下载AdGuardHome安装包。
- 使用
scp命令将安装包传输到软路由。 - 通过SSH进入软路由,执行安装命令。首次启动会自动创建配置文件,
AdGuardHome.yaml: No such file or directory警告可忽略。
- 启用并更新核心:
- 在管理后台“服务”->“AdGuardHome”中,勾选“启用”。
- 点击“更新核心版本”。
- 点击“保存并应用”。
- AdGuardHome初始化配置:
- 点击“AdGuardHome Web:3000”按钮进入管理后台欢迎页面,点击“开始配置”。
- 设置网页管理界面端口为
3000,DNS服务器监听端口为533,然后点击“下一步”。 - 设置管理用户名和密码,建议与软路由后台保持一致。点击“下一步”直到“打开仪表盘”,输入密码登录。
- 设置上游DNS:
- 进入“设置”->“DNS 设置”。
- 上游DNS服务器填写
127.0.0.1:5335,这是MosDNS的监听端口,AdGuardHome会将DNS请求转发给MosDNS进行分流。 - 点击“应用”。
- 启用DNS缓存:
- 继续向下滚动,在DNS缓存配置部分,勾选“启用缓存”,然后点击“保存”。
- 配置广告黑名单:
- 点击“过滤器”->“DNS黑名单”,先点击“检查更新”。
- 点击“添加黑名单”->“从列表中选择”。
- 勾选
CHN: anti-AD(国内社区维护的广告黑名单),然后点击“保存”。
至此,AdGuardHome配置完成,DNS链路变更为:设备 -> AdGuardHome (拦截/缓存) -> MosDNS (分流) -> (国内DNS) 或 (OpenClash)。
串联DNS链路
为了使各个组件协同工作,需要进行最终的链路串联。
- 禁用OpenClash本地DNS劫持:
- 在管理后台“服务”->“OpenClash”->“插件设置”->“DNS 设置”中,将“本地DNS劫持”改为“禁用”。
- 点击“清理DNS缓存”、“保存配置”和“应用配置”。
- 设置AdGuardHome重定向:
- 回到“服务”->“AdGuardHome”的基础设置。
- 在“重定向”选项中,选择“作为dnsmasq的上游服务器”。
- 点击“保存并应用”。此时状态应显示“AdGuardHome 运行中已重定向”。
- 禁用dnsmasq缓存:
- 回到软路由管理后台,点击“网络”->“DHCP/DNS”->“限制”。
- 将“DNS查询缓存大小”设置为
0。 - 点击“保存并应用”。
完整的DNS链路已正式建立:设备 -> dnsmasq -> AdGuardHome -> MosDNS -> 国内DNS / OpenClash。
OpenClash代理规则配置
配置OpenClash以实现国内服务器直连和国外服务器走代理。
- 添加自定义规则:
- 进入“OpenClash”->“覆写设置”->“规则设置”。
- 勾选“自定义规则”。
- 在
rules中添加以下两条规则:
这里的- GEOSITE,CN,DIRECT - GEOIP,CN,DIRECTno-resolve是关键,它使得OpenClash直接根据连接的原始IP查询GeoIP库来判断是否为国内IP,避免了不必要的DNS解析。非国内IP或无法识别的IP(如Fake-IP)将匹配到最后的MATCH规则走代理。确保MATCH后的代理组名与proxy-groups中的name一致。 - 点击“保存配置”。
- 精简配置文件:
- 点击“OpenClash”->“配置管理”。
- 修改左侧的配置文件,在
rules部分只保留一条MATCH,Proxy规则(Proxy是你的代理组名)。 - 注意:不要开启自动更新配置订阅,否则自定义规则会被覆盖。
- 点击“保存配置”和“应用配置”。
- 确认运行状态:
- 回到OpenClash首页,停用“域名嗅探”。
- 确认运行模式为“Fake-IP增强模式”。
效果验证
完成所有配置后,可以通过以下方式验证效果:
- DNS分流验证:
在终端运行
nslookup baidu.com 192.168.6.1,应解析到真实国内IP。运行nslookup google.com 192.168.6.1,应解析到198.18.x.x这类假IP。 - 广告拦截验证: 访问AdGuardHome仪表盘,查看24小时统计数据,应能看到广告请求被拦截的比例。
- DNS泄漏验证:
访问
https://ipleak.net,检查所有DNS服务器是否均为海外节点,无国内DNS出现。
总结效果
通过以上设置,实现了以下效果:
- 国内直连,国外走代理:国内网站秒开,国外网站通过加密通道安全访问,无DNS泄漏。
- 全屋广告拦截:手机、电脑、游戏主机等所有设备的App内广告和网页广告均被拦截,无需安装额外客户端。
- 自动生效:设备连接WiFi后,自动享受上述优化。
- 无感代理:例如访问Claude Code等服务时,代理自动生效,无需手动管理。
最终的DNS链路实现了四层分工,各司其职:
- dnsmasq:系统自带DNS转发器,接收设备请求。
- AdGuardHome:广告拦截与DNS缓存。
- MosDNS:根据域名分流国内或国外解析。
- OpenClash:通过Fake-IP模式处理国外域名,走代理通道解析。
广告拦截原理是AdGuardHome发现域名在黑名单时直接拦截,导致广告无法加载。DNS泄漏通过MosDNS将国外域名请求全部导向代理通道解决。Fake-IP模式下,OpenClash返回假IP给设备,并在防火墙层拦截,通过代理安全解析原始域名。
常见问题与排错
- OpenClash日志报
nft_tproxy模块未找到:在“系统”->“软件包”中搜openclash,查找并手动安装缺失的依赖包。 - 国内网速仍慢:检查OpenClash是否为Fake-IP增强模式,域名嗅探是否关闭,以及自定义GEOIP规则是否正常生效。
- AdGuardHome向导打不开:端口3000可能被占用,在AdGuardHome基础设置中更换端口(如3001),然后使用新端口访问。
- 广告未拦截:检查AdGuardHome重定向是否设置为“运行中已重定向”,以及黑名单是否已启用。
通过细致的配置和排错,一次性解决网络中的主要痛点,享受 cleaner、faster、safer 的网络体验。