muink / luci-app-homeproxy

A homeproxy fork with clash api, selector/urltest node, subscribes grouping & ruleset support (stable version) (updates stopped indefinitely)
https://github.com/muink/homeproxy
GNU General Public License v2.0
56 stars 16 forks source link

如何配搭adgurd home 实现全局拦截广告 #10

Closed Copox closed 3 months ago

Copox commented 3 months ago

不久前 @onlyfirer提供homeproxy+adguardhome+mosdns 去广告思路 adguadhome监听53端口 Dnsmasq随便改个非53端口 mosdns监听5335 并 将 Dnsmasq 域名解析请求转发到 MosDNS 服务器 adguadhome 上游dns指向mosdns 的 5335 homeproxy 这边是自定义路由模式 并内置一堆封锁广告规则,默认dns服务器为国内dns

问题来的,照搬以上思路,结果adguadhome这边完全没法监控所有连接,于是乎adguadhome的广告规则均不命中,毕竟都没监控到 举个例子,假如访问某个网站A,A命中了adguadhome封锁规则,结果应该是没法访问才对,查询adguadhome日志发现请求记录压根就没有A网站.结果顺利访问到A网站.adguadhome沦为摆设

那么到底该如何配搭adguadhome实现全局拦截广告呢?

本人做了以下改动 把adguadhome作为Dnsmasq的上游服务器,Dnsmasq改回53端口,homeproxy这边的广告规则停用,完全依赖adguadhome 这样adguadhome就能顺利处理所有dns请求(才怪),查询日志有命中规则的记录,于是乎nslookup A网站,结果是封锁的,也就是说adguadhome有干活的.奇怪的事情来了,不知道什么原因该封锁跟没封一样,A网站还是能够访问.

homeproxy 自定义路由模式的DNS机制不是很懂, 该如何在homeproxy前处理dns广告拦截请求呢?

muink commented 3 months ago
  1. dnsmasq 保持默认配置
  2. /var/dnsmasq.d/ 目录下建立 adguadhome.conf (其他名字也行, 但要保证名字在目录里的首位) 内容填入
    no-poll
    no-resolv
    server=127.0.0.1#<adguadhome的dns端口>
  3. 然后重启 dnsmasq 这样 dnsmasq 自身无法解答的所有 dns 请求都会转发给 adguadhome
  4. adguadhome 上游指定 127.0.0.1:
  5. mosdns 的可信上游指定为 127.0.0.1: 和 其他(hp 停止时使用)

另外 SB-1.10.0 支持直接使用 adguad 规则生成 rule-set

Copox commented 3 months ago
  1. dnsmasq 保持默认配置
  2. /var/dnsmasq.d/ 目录下建立 adguadhome.conf (其他名字也行, 但要保证名字在目录里的首位) 内容填入
no-poll
no-resolv
server=127.0.0.1#<adguadhome的dns端口>
  1. 然后重启 dnsmasq 这样 dnsmasq 自身无法解答的所有 dns 请求都会转发给 adguadhome
  2. adguadhome 上游指定 127.0.0.1:
  3. mosdns 的可信上游指定为 127.0.0.1: 和 其他(hp 停止时使用)

另外 SB-1.10.0 支持直接使用 adguad 规则生成 rule-set

感谢大佬解答. 按照上述配置,问题依旧,adguadhome明面上是命中规则,但是实际上是没拦截 h,omeproxy成功启动后会在 /var/dnsmasq.d/ 目录生成 dnsmasq-homeproxy.conf 文件 及 一个dnsmasq-homeproxy.d的文件夹 该文件夹里头有个redirect-dns.conf 内容如下

no-poll
no-resolv
server=127.0.0.1#5333

1.此外 /var/dnsmasq.d/ 目录每次路由器重启里面的内容就会清空,也包括adguadhome.conf 2.adguadhome出现一个现象,初次建立DNS请求时,命中拦截规则,网站没被拦截,继续请求,adguadhome却只记录/处理首次的请求? 举个例子,A网站的请求命中规则,adguadhome拦截有记录,没拦截成功,再按F5刷新A网站,adguadhome却没收到再次请求,A网站依旧没拦截成功,整个过程只记录到第一次请求.狂按A网站F5也不见得adguadhome日志刷新新的请求.而且所有的请求都是类似的现象,不止命中规则那些,直白点说就是你疯狂浏览某个网站,adguadhome也没处理记录 我的目的是无论国内外流量全都交给adguadhome处理拦截 3.modns 2024-08-03 204920 4.homeproxy 2024-08-03 205030 2024-08-03 205104 5.adguadhome

2024-08-03 203401

muink commented 3 months ago

需要补充一点的是 如果应用程式不是向上级网关发起 dns 请求, 而是向公网 dns 服务器发起请求 这种类似 dns 投毒的方式就不起作用, 需要在网关上劫持所有 dns 流量, 这点 hp 已经做到了 (标准 53 端口)

刚刚看你又发了新内容 待我看看再回复你

muink commented 3 months ago

因为我不使用 adguadhome 和 modns 没法推断你那是什么情况

但我还是能给你些自测的方法: