xiaorouji / openwrt-passwall

7.21k stars 2.65k forks source link

[Bug]: 4.63以后出现错误,修改为xray分流,添加代理后 #2496

Closed asfly closed 1 year ago

asfly commented 1 year ago

描述您遇到的bug

...sr/lib/lua/luci/model/cbi/passwall/client/global.lua:109: attempt to index local 'n' (a nil value) stack traceback: ...sr/lib/lua/luci/model/cbi/passwall/client/global.lua:109: in function 'func' /usr/lib/lua/luci/cbi.lua:66: in function 'load' /usr/lib/lua/luci/dispatcher.lua:1403: in function '_cbi' /usr/lib/lua/luci/dispatcher.lua:1074: in function 'dispatch' /usr/lib/lua/luci/dispatcher.lua:488: in function </usr/lib/lua/luci/dispatcher.lua:487>

复现此Bug的步骤

1.添加 hysteria 代理后 2.切换分流 3.设置代理 4.保存应用

您想要实现的目的

...sr/lib/lua/luci/model/cbi/passwall/client/global.lua:109: attempt to index local 'n' (a nil value) stack traceback: ...sr/lib/lua/luci/model/cbi/passwall/client/global.lua:109: in function 'func' /usr/lib/lua/luci/cbi.lua:66: in function 'load' /usr/lib/lua/luci/dispatcher.lua:1403: in function '_cbi' /usr/lib/lua/luci/dispatcher.lua:1074: in function 'dispatch' /usr/lib/lua/luci/dispatcher.lua:488: in function </usr/lib/lua/luci/dispatcher.lua:487>

日志信息

...sr/lib/lua/luci/model/cbi/passwall/client/global.lua:109: attempt to index local 'n' (a nil value) stack traceback: ...sr/lib/lua/luci/model/cbi/passwall/client/global.lua:109: in function 'func' /usr/lib/lua/luci/cbi.lua:66: in function 'load' /usr/lib/lua/luci/dispatcher.lua:1403: in function '_cbi' /usr/lib/lua/luci/dispatcher.lua:1074: in function 'dispatch' /usr/lib/lua/luci/dispatcher.lua:488: in function </usr/lib/lua/luci/dispatcher.lua:487>

截图

No response

系统相关信息

-passwall 4.63+

其他信息

No response

nftbty commented 1 year ago

你配置情况都没贴全,不好给你排查啊。从发生错误代码处来看,是开了自动切换,你看看自动切换的配置是什么,贴上来,主要是 当TCP节点为分流节点时,启动切换的逻辑是 切掉它、替换默认节点、替换前置代理节点的哪个。然后是分流的默认节点设置的什么,还有打开/etc/config/passwall,找到分流节点配置块,看里面有没有option main_node。 另外你控制变量测试下,不知道你说的hysteria节点是设的默认节点还是什么,但可以把它换成其他协议的节点,其他设置都不动试试看,是否还会报错。 再就是节点不变,只修改自动切换的配置看看,可以把各个切换逻辑都试试,看是都报错还是只有哪个报错。

asfly commented 1 year ago

好的,我先找下main_node, 我是最近5次更新时报的错,我新建的hysteria节点在passwall2 可以正常使用。我看下,稍后贴出。

asfly commented 1 year ago

你配置情况都没贴全,不好给你排查啊。从发生错误代码处来看,是开了自动切换,你看看自动切换的配置是什么,贴上来,主要是 当TCP节点为分流节点时,启动切换的逻辑是 切掉它、替换默认节点、替换前置代理节点的哪个。然后是分流的默认节点设置的什么,还有打开/etc/config/passwall,找到分流节点配置块,看里面有没有option main_node。 另外你控制变量测试下,不知道你说的hysteria节点是设的默认节点还是什么,但可以把它换成其他协议的节点,其他设置都不动试试看,是否还会报错。 再就是节点不变,只修改自动切换的配置看看,可以把各个切换逻辑都试试,看是都报错还是只有哪个报错。

我的配置里面没有option main_node节点,保存后直接报错!如果不设置分流,那么一切正常

nftbty commented 1 year ago

我的配置里面没有option main_node节点,保存后直接报错!如果不设置分流,那么一切正常

其他的呢,自动切换配置,分流配置,都截个图看看。我上面说了好几条啊。 还有要你控制变量测试的。

asfly commented 1 year ago

我用passwall2 的分流配置覆盖passwall,问题解决了。感谢你的思路,我之前以为是固件版本问题,刷过好几次,都没解决。

一下是出错配置,其他没动,分流节点是我自己添加的。 --- 全局配置 config global option socks_enabled '0' option tcp_node_socks_port '1070' option dns_mode 'dns2tcp' option remote_dns '1.1.1.1' option filter_proxy_ipv6 '1' option chinadns_ng '1' option tcp_proxy_mode 'chnroute' option udp_proxy_mode 'chnroute' option localhost_tcp_proxy_mode 'default' option localhost_udp_proxy_mode 'default' option acl_enable '0' option close_log_tcp '0' option close_log_udp '0' option loglevel 'error' option trojan_loglevel '4' option udp_node 'tcp' option advanced_log_feature '0' option enabled '1' option tcp_node 'd0c5202a2ff94dfebedb84b253fd8add'

--- 分流配置 config nodes 'd0c5202a2ff94dfebedb84b253fd8add' option type 'Xray' option protocol '_shunt' option preproxy_enabled '1' option main_node 'cd99d1a6cbae4e30a6c6b8a3a09bbefc' option STEAM 'nil' option AD 'nil' option BT 'nil' option Proxy 'cd99d1a6cbae4e30a6c6b8a3a09bbefc' option Proxy_proxy_tag 'main' option OpenAI 'nil' option Direct 'nil' option default_node '_direct' option domainStrategy 'IPOnDemand' option domainMatcher 'hybrid' option remarks '.........' option Netflix 'cd99d1a6cbae4e30a6c6b8a3a09bbefc' option Netflix_proxy_tag 'main'

以下是可以正常使用的分流配置 config nodes 'myshunt' option remarks '...............' option type 'Xray' option protocol '_shunt' option STEAM '_direct' option Direct '_direct' option AD 'nil' option BT '_direct' option Netflix 'nil' option OpenAI 'nil' option TVB 'nil' option China '_direct' option QUIC '_blackhole' option UDP 'nil' option domainStrategy 'IPOnDemand' option domainMatcher 'hybrid' option Proxy '8d6d7db800544f9a80ba1e9ab52ea985' option default_node '_direct' option main_node '8d6d7db800544f9a80ba1e9ab52ea985' option preproxy_enabled '1'

nftbty commented 1 year ago

这个issue可以继续开着,之前会会出现那种错误,说明代码哪个地方还是有异常没有考虑到,还是需要定位并修复的。 我看你贴的之前的出错的配置开了前置代理,ProxyNetflix这两个启用了前置代理,但是这两个规则本身使用的节点和前置代理是同一个,实际上前置代理是不生效的。但是这种情况我有考虑到,做了处理,所以也不影响。但是没用前置代理的话,可以把前置代理总开关关掉。 你的自动切换应该是开着的吧?不知道你自动切换的这个选项是选的哪个。根据你的分流配置,应该是应用于前置代理节点才有可能出错,你看是不是 image

asfly commented 1 year ago

这个issue可以继续开着,之前会会出现那种错误,说明代码哪个地方还是有异常没有考虑到,还是需要定位并修复的。 我看你贴的之前的出错的配置开了前置代理,ProxyNetflix这两个启用了前置代理,但是这两个规则本身使用的节点和前置代理是同一个,实际上前置代理是不生效的。但是这种情况我有考虑到,做了处理,所以也不影响。但是没用前置代理的话,可以把前置代理总开关关掉。 你的自动切换应该是开着的吧?不知道你自动切换的这个选项是选的哪个。根据你的分流配置,应该是应用于前置代理节点才有可能出错,你看是不是 image

应用于默认,则直接报错,选择切掉他,保存可以正常。

nftbty commented 1 year ago

应用于默认,则直接报错,选择切掉他,保存可以正常。

你的默认节点是选的直连是吧?另外,你开始看的时候,这个选项的值是什么,就是应用到默认节点吗?

asfly commented 1 year ago

应用于默认,则直接报错,选择切掉他,保存可以正常。

你的默认节点是选的直连是吧?另外,你开始看的时候,这个选项的值是什么,就是应用到默认节点吗?

我重置固件后,这里默认值是“应用到默认节点”

nftbty commented 1 year ago

@xiaorouji https://github.com/xiaorouji/openwrt-passwall/blob/535249b90c31918387e55ed228333a2a15b8e909/luci-app-passwall/luasrc/model/cbi/passwall/client/global.lua#L94-L109 这里如果是分流模式,默认节点选的 直连黑洞,104行 n会变成nil。 另外看了下app.sh,节点切换也没考虑 直连黑洞 的情况,如果默认节点选的这两个之一,就可能被切掉。感觉这2个特殊选项是不是单独考虑下好一些。

asfly commented 1 year ago

@xiaorouji

https://github.com/xiaorouji/openwrt-passwall/blob/535249b90c31918387e55ed228333a2a15b8e909/luci-app-passwall/luasrc/model/cbi/passwall/client/global.lua#L94-L109

这里如果是分流模式,默认节点选的 直连黑洞,104行 n会变成nil。 另外看了下app.sh,节点切换也没考虑 直连黑洞 的情况,如果默认节点选的这两个之一,就可能被切掉。感觉这2个特殊选项是不是单独考虑下好一些。

主要是在切换哪里,选择应用于默认,就会出现nil,其他两选项正常

nftbty commented 1 year ago

主要是在切换哪里,选择应用于默认,就会出现nil,其他两选项正常

主要是分流默认节点选直连黑洞的情况,自动切换选默认就有问题,新版应该修复了,你再试试。