通知 欢迎关注我的店铺天天软件圆

OpenWrt保姆级教程:AdGuardHome+NIKKI 实现DNS劫持、去广告与精准流量控制

2025-04-14
0评论
/
阅读
爱搜啊

当OpenWrt遇上NIKKI+AdGuardHome:一套丝滑的DNS劫持与去广告组合拳

一、为什么要折腾这套组合?

在家庭网络或小型办公环境中,我们常希望实现设备流量统计、应用访问控制和广告拦截三件套。但传统方案往往需要多个插件配合,容易引发冲突。今天介绍的这套基于OpenWrt 23.05的NIKKI+AdGuardHome方案,通过DNS流量智能调度,实现了:

- 精准设备识别:通过NIKKI的客户端统计

- 灵活管控:用AdGuardHome过滤广告+自定义规则

- 零冲突架构:DNS监听与劫持分离设计

- 高性能处理:nftables替代iptables更高效

AdGuardHome+NIKKI 实现DNS劫持、去广告与精准流量控制

二、为什么要这样部署?

Q1:为什么需要劫持53端口?  

很多IoT设备(如智能电视、摄像头)会硬编码使用本地DNS,通过劫持53端口能强制它们走过滤通道。

Q2:为什么用nftables而不是iptables?  

OpenWrt 23.05+默认使用Firewall4(基于nftables),新内核下性能更好,规则管理更清晰。

Q3:为什么选择5335→1053端口转发?  

这是典型的"前店后厂"设计:AdGuardHome(5335)在前端过滤广告,NIKKI(1053)在后端处理DNS解析,各司其职互不干扰。

三、配置实操手册

1. NIKKI设置(重点参数说明)

代理配置 → 透明代理:

☑️ 关闭IPv4劫持

☑️ 关闭IPv6劫持

绕过配置 → 绕过资源组:

☑️ 勾选adg(自定义的绕过组)

避坑指南:这里的"绕过"是指允许特定流量跳过AdGuardHome处理,比如需要直连的网银类站点建议加入adg组。

2. AdGuardHome调教

关键文件:/etc/AdGuardHome.yaml

dns:
  bind_hosts:
    - 0.0.0.0  # 监听所有接口
  port: 5335    # 与后续劫持端口对应
  upstream_dns:
    - 127.0.0.1:1053  # 指向NIKKI的DNS监听

重启技巧:  

/etc/init.d/adguardhome restart
# 观察日志确认无报错
tail -f /var/log/adguardhome.log

3. nftables劫持的黑科技

配置文件:/etc/nftables.conf

table inet adguardhome {
  chain prerouting {
    type nat hook prerouting priority -110; 
    # 劫持所有TCP/UDP的53端口请求
    meta nfproto { ipv4, ipv6 } udp dport 53 counter redirect to :5335
    meta nfproto { ipv4, ipv6 } tcp dport 53 counter redirect to :5335
  }
}

调试技巧:  

# 实时查看流量统计
nft list table inet adguardhome -a
# 预期输出应包含packet计数

四、效果验证操作

场景1:检测广告过滤  

在手机端访问优酷视频,观察是否还有60秒片头广告。

场景2:深度检测DNS路径  

# 在OpenWrt执行
tcpdump -i br-lan port 53
# 同时另开窗口执行
dig @192.168.1.1 www.taobao.com
# 应看到流量被重定向到5335端口

场景3:强制刷新DNS缓存  

# Windows系统
ipconfig /flushdns
# Android系统
adb shell killall -HUP netd

五、可能遇到的问题

诡异现象1:劫持规则重启后消失  

解法:检查/etc/rc.local权限是否为755,建议追加sleep命令:

sleep 5  # 等待网络初始化
nft -f /etc/nftables.conf

诡异现象2:某些APP无法连接  

解法:在AdGuardHome的`过滤器 → 自定义规则`中添加:

@@||appdomain.com^$important

诡异现象3:IPv6地址泄露  

解法:在AdGuardHome的DNS设置中启用:

block_echain: true

六、进阶玩法推荐

玩法1:设备级控制  

在AdGuardHome的`客户端设置`中,基于MAC地址设置不同过滤策略。

玩法2:DNS-over-HTTPS  

在NIKKI的上游DNS配置中填入:

tls://1.1.1.1:853

玩法3:流量可视化  

部署Prometheus+Grafana,通过AdGuardHome的/metrics接口生成实时流量看板。

七、总结

1. 关掉NIKKI的DNS劫持 → 让出53端口  

2. 把AdGuardHome推到前线(5335端口)→ 专职过滤  

3. 用nftables做流量调度员 → 强制所有设备走过滤通道  

4. NIKKI退居二线(1053端口)→ 专注协议解析  

这套架构的精妙之处在于:既利用了AdGuardHome强大的过滤能力,又保留了NIKKI的协议识别特性,两者通过端口转发形成完美闭环。遇到问题记得多查 系统日志 和 nftables计数 ,祝各位折腾愉快!


点击链接加入群聊四群:722808830
点击链接加入群聊三群:751529538(已满)
点击链接加入群聊二群:376877156(已满)
点击链接加入群聊一群:622891808(已满)

饿了么红包
饿了么红包


本站附件分享,如果附件失效,可以去找找看

诚通网盘附件百度网盘附件

于2025-04-14发布