vernesong / OpenClash

A Clash Client For OpenWrt
MIT License
16.8k stars 3.1k forks source link

[Feature] 针对0.45.87-beta版与AdGuardHome(已用FW4劫持53)配合的改进建议 #3001

Closed swirly0p closed 1 year ago

swirly0p commented 1 year ago

Verify Steps

Describe the Feature

环境描述: 我使用x86_64 openwrt,安装AdGuardHome作为主DNS插件(已用FW4劫持53,命令如下),将127.0.0.1:53作为唯一NameSever,同时安装luci-app-unblockneteasemusic。

config_get configpath $CONFIGURATION configpath "/etc/AdGuardHome.yaml"
AdGuardHome_PORT=$(config_editor "dns.port" "" "$configpath" "1")
nft 'add chain inet fw4 AdGuardHome_dns_redirect' 2>/dev/null
nft add rule inet fw4 dstnat position 0 udp dport 53 counter jump AdGuardHome_dns_redirect 2>/dev/null
nft add rule inet fw4 dstnat position 0 tcp dport 53 counter jump AdGuardHome_dns_redirect 2>/dev/null
nft add rule inet fw4 AdGuardHome_dns_redirect tcp dport 53 counter redirect to "$AdGuardHome_PORT" comment \"AdGuardHome DNS Hijack\" 2>/dev/null
nft add rule inet fw4 AdGuardHome_dns_redirect udp dport 53 counter redirect to "$AdGuardHome_PORT" comment \"AdGuardHome DNS Hijack\" 2>/dev/null

问题描述:

  1. 在更新0.45.87-beta后,使用Redir-Host(兼容)模式、并开启实验性:绕过中国大陆 IP路由本机代理,同时关闭本地DNS劫持。启动openclash后,发现设置中绕过中国大陆 IPv4 黑名单列表不存在,linkedin.com被绕过,变成linkedin.cn,无法正确连接。
  2. 设置本地DNS劫持DNSMASQ转发,后可见绕过中国大陆 IPv4 黑名单,可以正常打开linkedin.com,但影响AdGuardHome。
  3. 如果关闭实验性:绕过中国大陆 IP,可以正常打开linkedin.com,但无法解锁网易云。

进行以下确认操作:

  1. 确认linkedin已在自定义规则中,并开启自定规则选项 - DOMAIN-KEYWORD,linkedin,🐟 漏网之鱼
  2. 确认openclash_custom_chnroute_pass.list中包含linkedin.com

判断问题原因: 查看代码后发现,经过此commitvernesong/OpenClash@7757e1927dda8ad805b5cadd8977fef9ce84a448,只有当"$enable_redirect_dns" = "1"时,防火墙才能有china_ip_route_pass集合,以及绕过中国大陆 IPv4 黑名单列表 https://github.com/vernesong/OpenClash/blob/85f066f2f8b9e5d586970b27c3034f98762a1835/luci-app-openclash/root/etc/init.d/openclash#L1264-L1272 https://github.com/vernesong/OpenClash/blob/85f066f2f8b9e5d586970b27c3034f98762a1835/luci-app-openclash/luasrc/model/cbi/openclash/settings.lua#L668-L673

Describe the Solution

能否增加"$enable_redirect_dns" = "3"(与其他DNS插件配合)的情况 https://github.com/vernesong/OpenClash/blob/85f066f2f8b9e5d586970b27c3034f98762a1835/luci-app-openclash/luasrc/model/cbi/openclash/settings.lua#L245-L250

  1. 兼顾AdGuardHome和luci-app-unblockneteasemusic

  2. 保留绕过中国大陆 IPv4 黑名单功能,可以实现linkedin.com的连接

    修改内容: (只考虑了fw4、IPV4、开启实验性:绕过中国大陆 IP路由本机代理情况)将127.0.0.1:53作为唯一NameSever 相应位置修改为if [ "$enable_redirect_dns" = "1" ] || [ "$enable_redirect_dns" = "3" ] ; then

  3. L1264行处 https://github.com/vernesong/OpenClash/blob/85f066f2f8b9e5d586970b27c3034f98762a1835/luci-app-openclash/root/etc/init.d/openclash#L1264-L1272

  4. L1458行处 https://github.com/vernesong/OpenClash/blob/85f066f2f8b9e5d586970b27c3034f98762a1835/luci-app-openclash/root/etc/init.d/openclash#L1457-L1462

  5. L1548行处 https://github.com/vernesong/OpenClash/blob/85f066f2f8b9e5d586970b27c3034f98762a1835/luci-app-openclash/root/etc/init.d/openclash#L1547-L1552

  6. L1663行处 https://github.com/vernesong/OpenClash/blob/85f066f2f8b9e5d586970b27c3034f98762a1835/luci-app-openclash/root/etc/init.d/openclash#L1662-L1667

Describe Alternatives

No response

Additional Context

No response

gitcook commented 1 year ago

最新版本如何开启 绕过大陆 IP

swirly0p commented 1 year ago

最新版本如何开启 绕过大陆 IP

  1. Redir-Host直接能看到
  2. fake-ip需要设置本地 DNS 劫持使用DNSMASQ转发
vernesong commented 1 year ago

第三种模式就是旧版的逻辑呗

swirly0p commented 1 year ago

第三种模式就是旧版的逻辑呗

差不多,可能会有点区别,代码我还没有全部看完

elonj commented 1 year ago

同期待能像v0.45.78-beta及之前的版本那样,可以兼顾AdGuardHome和有局域网访问控制模式白名单模式。在v0.45.87-beta版本中,一旦”本地 DNS 劫持“使用“防火墙转发”,白名单中走代理的ip 就不经过AdGuardHome了。

277383761 commented 1 year ago

如果是为了去广告,openclash用带去广告规则的模板即可实现,如果是为了dns的话,openclash也自带了丰富的dns并支持同时并发.完全想不到使用AdGuardHome的理由

swirly0p commented 1 year ago

如果是为了去广告,openclash用带去广告规则的模板即可实现,如果是为了dns的话,openclash也自带了丰富的dns并支持同时并发.完全想不到使用AdGuardHome的理由

比如能够记录和监控各客户端的域名连接情况,以及监控具体屏蔽的广告域名,临时对某域名解除屏蔽,等等。

paladin4fan commented 1 year ago

如果是为了去广告,openclash用带去广告规则的模板即可实现,如果是为了dns的话,openclash也自带了丰富的dns并支持同时并发.完全想不到使用AdGuardHome的理由

DNSmasq似乎并不能做到针对一个域名仅解析IPv6结果