xiaorouji / openwrt-passwall

7.06k stars 2.62k forks source link

[Bug]: 多访问控制规则时,访问控制不稳定 #3292

Closed HLdota closed 2 months ago

HLdota commented 3 months ago

描述您遇到的bug

最近2个月出现了,访问控制消失的问题。比如一个访问控制开始是正常的,用了一段时间后有可能会连接不到节点的,或者分流不完全,使用ipip.net whoer.net ipinfo.io分别对网络测试,可能会出现一个网站是真实IP(不是缓存问题我在地址后面加了?的随机参数,主配置是关闭的)然后部分app无法使用比如tiktok。重启访问控制或者路由器可以解决。目前我使用的访问控制有15+个规则,硬件是小米ax9000

复现此Bug的步骤

感觉是访问控制有多了后出现的这个问题

您想要实现的目的

访问控制稳定有效

日志信息

config global option enabled '0' option socks_enabled '0' option tcp_node 'nil' option udp_node 'nil' option tcp_node_socks_port '1070' option filter_proxy_ipv6 '1' option dns_shunt 'chinadns-ng' option dns_mode 'tcp' option remote_dns '1.1.1.1' option use_default_dns 'direct' option chinadns_ng_default_tag 'none' option use_direct_list '1' option use_proxy_list '1' option use_block_list '1' option use_gfw_list '1' option chn_list 'direct' option tcp_proxy_mode 'proxy' option udp_proxy_mode 'proxy' option localhost_proxy '1' option client_proxy '1' option acl_enable '1' option log_tcp '1' option log_udp '1' option loglevel 'error' option trojan_loglevel '4'

config global_haproxy option balancing_enable '0'

config global_delay option auto_on '0' option start_daemon '1' option start_delay '60'

config global_forwarding option tcp_no_redir_ports 'disable' option udp_no_redir_ports 'disable' option tcp_proxy_drop_ports 'disable' option udp_proxy_drop_ports '443' option tcp_redir_ports '22,25,53,143,465,587,853,993,995,80,443' option udp_redir_ports '1:65535' option accept_icmp '0' option use_nft '1' option tcp_proxy_way 'redirect' option ipv6_tproxy '0'

config global_xray option sniffing_override_dest '0'

config global_singbox option sniff_override_destination '0' option geoip_path '/usr/share/singbox/geoip.db' option geoip_url 'https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/geoip.db' option geosite_path '/usr/share/singbox/geosite.db' option geosite_url 'https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/geosite.db'

config global_other option auto_detection_time 'tcping'

config global_rules option auto_update '0' option chnlist_update '1' option chnroute_update '1' option chnroute6_update '1' option gfwlist_update '1' option geosite_update '0' option geoip_update '0' list gfwlist_url 'https://fastly.jsdelivr.net/gh/Loyalsoldier/v2ray-rules-dat@release/gfw.txt' list chnroute_url 'https://ispip.clang.cn/all_cn.txt' list chnroute_url 'https://fastly.jsdelivr.net/gh/gaoyifan/china-operator-ip@ip-lists/china.txt' list chnroute6_url 'https://ispip.clang.cn/all_cn_ipv6.txt' list chnroute6_url 'https://fastly.jsdelivr.net/gh/gaoyifan/china-operator-ip@ip-lists/china6.txt' list chnlist_url 'https://fastly.jsdelivr.net/gh/felixonmars/dnsmasq-china-list/accelerated-domains.china.conf' list chnlist_url 'https://fastly.jsdelivr.net/gh/felixonmars/dnsmasq-china-list/apple.china.conf' option v2ray_location_asset '/usr/share/v2ray/'

config global_app option singbox_file '/usr/bin/sing-box' option xray_file '/usr/bin/xray' option hysteria_file '/usr/bin/hysteria' option chinadns_ng '/usr/bin/chinadns-ng'

config global_subscribe option filter_keyword_mode '1' list filter_discard_list '过期时间' list filter_discard_list '剩余流量' list filter_discard_list 'QQ群' list filter_discard_list '官网'

config nodes 'myshunt' option remarks '分流总节点' option type 'Xray' option protocol '_shunt' option DirectGame '_direct' option ProxyGame '_default' option Proxy '_default' option Netflix '_default' option OpenAI '_default' option Direct '_direct' option default_node 'nil' option domainStrategy 'IPOnDemand'

config shunt_rules 'DirectGame' option remarks 'DirectGame' option domain_list 'api.steampowered.com regexp:.cm.steampowered.com$ regexp:.steamserver.net$ geosite:category-games@cn' option ip_list '103.10.124.0/24 103.10.125.0/24 103.28.54.0/24 146.66.152.0/24 146.66.155.0/24 153.254.86.0/24 155.133.224.0/23 155.133.226.0/24 155.133.227.0/24 155.133.230.0/24 155.133.232.0/24 155.133.233.0/24 155.133.234.0/24 155.133.236.0/23 155.133.238.0/24 155.133.239.0/24 155.133.240.0/23 155.133.245.0/24 155.133.246.0/24 155.133.248.0/24 155.133.249.0/24 155.133.250.0/24 155.133.251.0/24 155.133.252.0/24 155.133.253.0/24 155.133.254.0/24 155.133.255.0/24 162.254.192.0/24 162.254.193.0/24 162.254.194.0/23 162.254.195.0/24 162.254.196.0/24 162.254.197.0/24 162.254.198.0/24 162.254.199.0/24 185.25.182.0/24 185.25.183.0/24 190.217.33.0/24 192.69.96.0/22 205.185.194.0/24 205.196.6.0/24 208.64.200.0/24 208.64.201.0/24 208.64.202.0/24 208.64.203.0/24 208.78.164.0/22'

config shunt_rules 'ProxyGame' option remarks 'ProxyGame' option domain_list 'geosite:category-games domain:store.steampowered.com'

config shunt_rules 'OpenAI' option remarks 'OpenAI' option domain_list 'geosite:openai'

config shunt_rules 'Proxy' option remarks 'Proxy' option domain_list 'geosite:geolocation-!cn' option ip_list '149.154.160.0/20 91.108.4.0/22 91.108.56.0/24 109.239.140.0/24 67.198.55.0/24 8.8.4.4 8.8.8.8 208.67.222.222 208.67.220.220 1.1.1.1 1.1.1.2 1.0.0.1 9.9.9.9 149.112.112.112 2001:67c:4e8::/48 2001:b28:f23c::/48 2001:b28:f23d::/48 2001:b28:f23f::/48 2001:b28:f242::/48 2001:4860:4860::8888 2001:4860:4860::8844 2606:4700:4700::1111 2606:4700:4700::1001'

config shunt_rules 'Netflix' option remarks 'Netflix' option domain_list 'geosite:netflix'

config shunt_rules 'Direct' option remarks 'Direct' option domain_list 'geosite:cn' option ip_list '223.5.5.5/32 223.6.6.6/32 119.29.29.29/32 180.76.76.76/32 114.114.114.114/32 114.114.115.115/32 1.12.12.12/32 120.53.53.53/32 geoip:cn geoip:private'

config acl_rule option enabled '1' option remarks '02' option sources '192.168.52.0/24' option tcp_no_redir_ports 'disable' option udp_no_redir_ports 'disable' option use_global_config '0' option tcp_node '23uZfcwE' option udp_node '23uZfcwE' option tcp_proxy_drop_ports 'disable' option udp_proxy_drop_ports 'disable' option tcp_redir_ports '1:65535' option udp_redir_ports '1:65535' option use_gfw_list '0' option chn_list '0' option tcp_proxy_mode 'proxy' option udp_proxy_mode 'proxy' option dns_shunt 'dnsmasq' option dns_mode 'dns2socks' option remote_dns '1.1.1.1'

config acl_rule option enabled '1' option remarks '03' option sources '192.168.53.0/24' option tcp_no_redir_ports 'disable' option udp_no_redir_ports 'disable' option use_global_config '0' option tcp_node 'a2xjFa5A' option tcp_proxy_drop_ports 'disable' option udp_proxy_drop_ports 'disable' option tcp_redir_ports '1:65535' option udp_redir_ports '1:65535' option use_gfw_list '0' option chn_list '0' option tcp_proxy_mode 'proxy' option dns_shunt 'dnsmasq' option dns_mode 'dns2socks' option remote_dns '1.1.1.1' option udp_node 'a2xjFa5A' option udp_proxy_mode 'proxy'

config acl_rule option enabled '1' option remarks '04' option sources '192.168.54.0/24' option tcp_no_redir_ports 'disable' option udp_no_redir_ports 'disable' option use_global_config '0' option tcp_node 'dZkcjzBP' option tcp_proxy_drop_ports 'disable' option udp_proxy_drop_ports 'disable' option tcp_redir_ports '1:65535' option udp_redir_ports '1:65535' option use_gfw_list '0' option chn_list '0' option tcp_proxy_mode 'proxy' option dns_shunt 'dnsmasq' option dns_mode 'dns2socks' option remote_dns '1.1.1.1' option udp_node 'dZkcjzBP' option udp_proxy_mode 'proxy'

config acl_rule option enabled '1' option remarks '05' option sources '192.168.55.0/24' option tcp_no_redir_ports 'disable' option udp_no_redir_ports 'disable' option use_global_config '0' option tcp_node 'uWAfpDGY' option tcp_proxy_drop_ports 'disable' option udp_proxy_drop_ports 'disable' option tcp_redir_ports '1:65535' option udp_redir_ports '1:65535' option use_gfw_list '0' option chn_list '0' option tcp_proxy_mode 'proxy' option dns_shunt 'dnsmasq' option dns_mode 'dns2socks' option remote_dns '1.1.1.1' option udp_node 'uWAfpDGY' option udp_proxy_mode 'proxy'

config acl_rule option enabled '1' option remarks '06' option sources '192.168.56.0/24' option tcp_no_redir_ports 'disable' option udp_no_redir_ports 'disable' option use_global_config '0' option tcp_node '6wgzVrXY' option tcp_proxy_drop_ports 'disable' option udp_proxy_drop_ports 'disable' option tcp_redir_ports '1:65535' option udp_redir_ports '1:65535' option use_gfw_list '0' option chn_list '0' option tcp_proxy_mode 'proxy' option dns_shunt 'dnsmasq' option dns_mode 'dns2socks' option remote_dns '1.1.1.1' option udp_node '6wgzVrXY' option udp_proxy_mode 'proxy'

config acl_rule option enabled '1' option remarks '07' option sources '192.168.57.0/24' option tcp_no_redir_ports 'disable' option udp_no_redir_ports 'disable' option use_global_config '0' option tcp_node 'xrMHUXpJ' option tcp_proxy_drop_ports 'disable' option udp_proxy_drop_ports 'disable' option tcp_redir_ports '1:65535' option udp_redir_ports '1:65535' option use_gfw_list '0' option chn_list '0' option tcp_proxy_mode 'proxy' option dns_shunt 'dnsmasq' option dns_mode 'dns2socks' option remote_dns '1.1.1.1' option udp_node 'xrMHUXpJ' option udp_proxy_mode 'proxy'

config acl_rule option enabled '1' option remarks '08' option sources '192.168.58.0/24' option tcp_no_redir_ports 'disable' option udp_no_redir_ports 'disable' option use_global_config '0' option tcp_node 'nWq3Guzs' option tcp_proxy_drop_ports 'disable' option udp_proxy_drop_ports 'disable' option tcp_redir_ports '1:65535' option udp_redir_ports '1:65535' option use_gfw_list '0' option chn_list '0' option tcp_proxy_mode 'proxy' option dns_shunt 'dnsmasq' option dns_mode 'dns2socks' option remote_dns '1.1.1.1'

config acl_rule option enabled '1' option remarks '09' option sources '192.168.59.0/24' option tcp_no_redir_ports 'disable' option udp_no_redir_ports 'disable' option use_global_config '0' option tcp_node 'Vaim90Vd' option tcp_proxy_drop_ports 'disable' option udp_proxy_drop_ports 'disable' option tcp_redir_ports '1:65535' option udp_redir_ports '1:65535' option use_gfw_list '0' option chn_list '0' option tcp_proxy_mode 'proxy' option dns_shunt 'dnsmasq' option dns_mode 'dns2socks' option remote_dns '1.1.1.1' option udp_node 'Vaim90Vd' option udp_proxy_mode 'proxy'

config acl_rule option enabled '1' option remarks '10' option sources '192.168.60.0/24' option tcp_no_redir_ports 'disable' option udp_no_redir_ports 'disable' option use_global_config '0' option tcp_node 'QIOxWU3Z' option tcp_proxy_drop_ports 'disable' option udp_proxy_drop_ports 'disable' option tcp_redir_ports '1:65535' option udp_redir_ports '1:65535' option use_gfw_list '0' option chn_list '0' option tcp_proxy_mode 'proxy' option dns_shunt 'dnsmasq' option dns_mode 'dns2socks' option remote_dns '1.1.1.1' option udp_node 'QIOxWU3Z' option udp_proxy_mode 'proxy'

config acl_rule option enabled '1' option remarks '11' option sources '192.168.61.0/24' option tcp_no_redir_ports 'disable' option udp_no_redir_ports 'disable' option use_global_config '0' option tcp_node 'gIZy2MFg' option tcp_proxy_drop_ports 'disable' option udp_proxy_drop_ports 'disable' option tcp_redir_ports '1:65535' option udp_redir_ports '1:65535' option use_gfw_list '0' option chn_list '0' option tcp_proxy_mode 'proxy' option dns_shunt 'dnsmasq' option dns_mode 'dns2socks' option remote_dns '1.1.1.1' option udp_node 'gIZy2MFg' option udp_proxy_mode 'proxy'

config acl_rule option enabled '1' option remarks '12' option sources '192.168.62.0/24' option tcp_no_redir_ports 'disable' option udp_no_redir_ports 'disable' option use_global_config '0' option tcp_node 'ZMqXnnkJ' option tcp_proxy_drop_ports 'disable' option udp_proxy_drop_ports 'disable' option tcp_redir_ports '1:65535' option udp_redir_ports '1:65535' option use_gfw_list '0' option chn_list '0' option tcp_proxy_mode 'proxy' option dns_shunt 'dnsmasq' option dns_mode 'dns2socks' option remote_dns '1.1.1.1' option udp_node 'ZMqXnnkJ' option udp_proxy_mode 'proxy'

config acl_rule option enabled '1' option remarks '13' option sources '192.168.63.0/24' option tcp_no_redir_ports 'disable' option udp_no_redir_ports 'disable' option use_global_config '0' option tcp_node 'iiLpwAqz' option tcp_proxy_drop_ports 'disable' option udp_proxy_drop_ports 'disable' option tcp_redir_ports '1:65535' option udp_redir_ports '1:65535' option use_gfw_list '0' option chn_list '0' option tcp_proxy_mode 'proxy' option dns_shunt 'dnsmasq' option dns_mode 'dns2socks' option remote_dns '1.1.1.1' option udp_node 'iiLpwAqz' option udp_proxy_mode 'proxy'

config acl_rule option enabled '1' option remarks '14' option sources '192.168.64.0/24' option tcp_no_redir_ports 'disable' option udp_no_redir_ports 'disable' option use_global_config '0' option tcp_node 'uZaLGvsV' option tcp_proxy_drop_ports 'disable' option udp_proxy_drop_ports 'disable' option tcp_redir_ports '1:65535' option udp_redir_ports '1:65535' option use_gfw_list '0' option chn_list '0' option tcp_proxy_mode 'proxy' option dns_shunt 'dnsmasq' option dns_mode 'dns2socks' option remote_dns '1.1.1.1' option udp_node 'uZaLGvsV' option udp_proxy_mode 'proxy'

config acl_rule option enabled '1' option remarks '20' option sources '192.168.70.0/24' option tcp_no_redir_ports 'disable' option udp_no_redir_ports 'disable' option use_global_config '0' option tcp_node 'jtfMPbaX' option tcp_proxy_drop_ports 'disable' option udp_proxy_drop_ports 'disable' option tcp_redir_ports '1:65535' option udp_redir_ports '1:65535' option use_gfw_list '0' option chn_list '0' option tcp_proxy_mode 'proxy' option dns_shunt 'dnsmasq' option dns_mode 'dns2socks' option remote_dns '1.1.1.1' option udp_node 'jtfMPbaX' option udp_proxy_mode 'proxy'

config acl_rule option enabled '1' option remarks '15' option sources '192.168.65.0/24' option tcp_no_redir_ports 'disable' option udp_no_redir_ports 'disable' option use_global_config '0' option tcp_node 'HjTukYFf' option udp_node 'HjTukYFf' option tcp_proxy_drop_ports 'disable' option udp_proxy_drop_ports 'disable' option tcp_redir_ports '1:65535' option udp_redir_ports '1:65535' option use_gfw_list '0' option chn_list '0' option tcp_proxy_mode 'proxy' option udp_proxy_mode 'proxy' option dns_shunt 'dnsmasq' option dns_mode 'dns2socks' option remote_dns '1.1.1.1'

config acl_rule option enabled '1' option remarks '01-yg02' option sources '192.168.51.0/24' option tcp_no_redir_ports 'disable' option udp_no_redir_ports 'disable' option use_global_config '0' option tcp_node 'prgxisA1' option udp_node 'prgxisA1' option tcp_proxy_drop_ports 'disable' option udp_proxy_drop_ports 'disable' option tcp_redir_ports '1:65535' option udp_redir_ports '1:65535' option use_gfw_list '0' option chn_list '0' option tcp_proxy_mode 'proxy' option udp_proxy_mode 'proxy' option dns_shunt 'dnsmasq' option dns_mode 'dns2socks' option remote_dns '1.1.1.1'

(去掉节点信息后的配置文件)passwall版本为4.77-6

截图

No response

系统相关信息

主机名称 OpenWrt
型号 Xiaomi Redmi Router AX6000 (OpenWrt U-Boot layout)
架构 ARMv8 Processor rev 4
目标平台 mediatek/filogic
固件版本 OpenWrt 23.05.3 r23809-234f1a2efa / LuCI openwrt-23.05 branch git-24.073.29889-cd7e519
内核版本 5.15.150

其他信息

No response

5points commented 3 months ago

最新版本也是如此,我是x64的openwrt官方的系统 开启访问控制的时候,很容易在让自己设定的分流失效。 这时候需要按"清空NFTSET"一次或者两次,才恢复正常

lwb1978 commented 3 months ago

透明代理模式重度依赖防火墙,分流规则越多ipset或者nftset就越多,随着访问的次数和时间的推移,ipset表会越来越大,防火墙负担就越来越大,在某种意义上来说可能会产生“溢出”,加上防火墙自身可能有bug也容易被其他软件“污染”,某种情况下分流或者代理就失效了,所以PW才加了一个清空ipset的功能,对ipset/nftset进行清空并重启防火墙,这个也是不得已而为之。 另外,PW只是一个GUI,只是把防火墙、dns、xray、sing-box等等这些插件之间相互配合的设置变成可视化操作,所以每个人在使用时的效果都不一样,这个跟系统的版本、路由器的平台、运行的环境(所安装的其他网络插件)等等有很大的关系。当然PW所扮演的角色也相当一个指挥官,指挥协调个各插件之间如何搭配和配合,所以pw的设计思路也很重要。 在使用过程中,刚开始正常,一段时间后就失效,这种情况更多是中间某个插件,比如防火墙、dns等等“开小差”了,因为pw一旦日志的最后一行跑完(发号施令结束)就不会再参与翻墙的工作了。

wtfr-dot commented 2 months ago

你这个问题应该跟我这个issue#3288差不多,本质上应该是dns分流出了差错。 我的配置与你不同,我是采用纯dnsmaq分流方案:国内通过6053端口和国外通过6553端口分别向smartdns分组查询,从逻辑上看好像没有问题,但其中有个最大的问题: 诚如@lwb1978所言,dnsmasq靠ipset和iptables规则分流,它没有进入xray等内进行dns规则判断分流,而它又不能处理geosite文件,我们的很多分流严重依靠这个文件,遇到ipset条目和server内的规则外的dns查询时,分流规则就不明确了(我想这应该是pw列了那么多规则表的原因吧,就是用在这些地方的,但条目相对还是欠缺),那这时就按最终默认的dns设置来,比如远程,这时它就会向远程转发查询,目前包括dnsmasq、iptables和pw等相互之间没有完全建立监控联动机制,也就是说dns分流缺少一个真正完全把关的环节,除此之外dnsmasq处理能力和效率相对低,所以我的配置上分流有时就会出现差错,出现同时解析dns的情况而造成污染,也就是这里说的ipset越用越多容易出错的问题,明白这一点后,我现在采用dnsmasq+chinadns-ng方案,但chinadns-ng好像也不能处理geo文件(至少从它的配置文件上看不出来,我对这个没研究),但它的效率和稳定性应该高于dnsmasq,最明显的是内存占用降低了,这对硬路由来说至关重要。 正如前面所述,由于系统内组件没形成完全的联动机制,我发现当我在ui界面修改了dhcp后,比如建立静态ip等,然后就发现dnsmasq会同时向6053和15353转发查询,也就是说dns分流流程又不正常了(不过这比纯dnsmasq应该要好,因为chinadns-ng会进行一次正确的转发,如果能过滤结果那就能避免问题),正常情况下它应该只向15353端口转发查询,然后由chinadns-ng进行判断分流,由于我配置的是不在规则外的应该向远程查询,显然不应该出现向6053和15353同时转发的情况。 正如我使用mwan3的经验一样,如果在ui界面对openwrt进行了某种操作,最好用pw的ipset清空大法,可以解决一些潜在问题。 从某种角度来说,采用smartdns分支方案可能能更进一步减少出错几率,因为pw与它联系得更紧密一些,我其实在smartdns分支出来后就一直用了很长时间这个方案,不过因为当时没太留意也理解不够,印象中有时也会出错,但不知道是否现在这个问题,再加上代码也在不断完善中,因为现在没有使用,所以没有体会,暂时先使用目前这种方案,观察一段时间再说。 还有就是采用singbox方案,它因为劫持dns而且有自己的规则方案可能能解决一些问题,但它与xray等差异较大,可能会有其它问题,我目前只在单机的v2rayN上使用,使用起来还行。

HLdota commented 2 months ago

透明代理模式重度依赖防火墙,分流规则越多ipset或者nftset就越多,随着访问的次数和时间的推移,ipset表会越来越大,防火墙负担就越来越大,在某种意义上来说可能会产生“溢出”,加上防火墙自身可能有bug也容易被其他软件“污染”,某种情况下分流或者代理就失效了,所以PW才加了一个清空ipset的功能,对ipset/nftset进行清空并重启防火墙,这个也是不得已而为之。 另外,PW只是一个GUI,只是把防火墙、dns、xray、sing-box等等这些插件之间相互配合的设置变成可视化操作,所以每个人在使用时的效果都不一样,这个跟系统的版本、路由器的平台、运行的环境(所安装的其他网络插件)等等有很大的关系。当然PW所扮演的角色也相当一个指挥官,指挥协调个各插件之间如何搭配和配合,所以pw的设计思路也很重要。 在使用过程中,刚开始正常,一段时间后就失效,这种情况更多是中间某个插件,比如防火墙、dns等等“开小差”了,因为pw一旦日志的最后一行跑完(发号施令结束)就不会再参与翻墙的工作了。

感谢,清空了ipset后这5天确实很稳定

HLdota commented 2 months ago

已提供解决方法。