diff --git a/alist/Makefile b/alist/Makefile index 9ce61e14b..4291bdb10 100644 --- a/alist/Makefile +++ b/alist/Makefile @@ -7,13 +7,13 @@ include $(TOPDIR)/rules.mk PKG_NAME:=alist -PKG_VERSION:=3.30.0 +PKG_VERSION:=3.31.0 PKG_WEB_VERSION:=3.30.0 PKG_RELEASE:=2 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=https://codeload.github.com/alist-org/alist/tar.gz/v$(PKG_VERSION)? -PKG_HASH:=68831d5177cdbae3ab294ce4263b4221c0ff687a72dd48a844d533ccb13c3efb +PKG_HASH:=a51a33cb314f9b1a5f5247a9d71feaee24ce49ee4cb4168c3089e2a3e6099936 PKG_LICENSE:=GPL-3.0 PKG_LICENSE_FILE:=LICENSE diff --git a/luci-app-passwall/Makefile b/luci-app-passwall/Makefile index aef0d8c21..7c5aba415 100644 --- a/luci-app-passwall/Makefile +++ b/luci-app-passwall/Makefile @@ -6,7 +6,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=luci-app-passwall -PKG_VERSION:=4.74-2 +PKG_VERSION:=4.74-3 PKG_RELEASE:= PKG_CONFIG_DEPENDS:= \ diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/client/type/ray.lua b/luci-app-passwall/luasrc/model/cbi/passwall/client/type/ray.lua index 84096b07f..7d113d768 100644 --- a/luci-app-passwall/luasrc/model/cbi/passwall/client/type/ray.lua +++ b/luci-app-passwall/luasrc/model/cbi/passwall/client/type/ray.lua @@ -255,6 +255,7 @@ o = s:option(Flag, option_name("tls"), translate("TLS")) o.default = 0 o:depends({ [option_name("protocol")] = "vmess" }) o:depends({ [option_name("protocol")] = "vless" }) +o:depends({ [option_name("protocol")] = "http" }) o:depends({ [option_name("protocol")] = "socks" }) o:depends({ [option_name("protocol")] = "trojan" }) o:depends({ [option_name("protocol")] = "shadowsocks" }) diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/client/type/sing-box.lua b/luci-app-passwall/luasrc/model/cbi/passwall/client/type/sing-box.lua index 1f484a638..4edaffa56 100644 --- a/luci-app-passwall/luasrc/model/cbi/passwall/client/type/sing-box.lua +++ b/luci-app-passwall/luasrc/model/cbi/passwall/client/type/sing-box.lua @@ -352,9 +352,8 @@ o = s:option(Flag, option_name("tls"), translate("TLS")) o.default = 0 o:depends({ [option_name("protocol")] = "vmess" }) o:depends({ [option_name("protocol")] = "vless" }) -o:depends({ [option_name("protocol")] = "socks" }) +o:depends({ [option_name("protocol")] = "http" }) o:depends({ [option_name("protocol")] = "trojan" }) -o:depends({ [option_name("protocol")] = "shadowsocks" }) o = s:option(ListValue, option_name("alpn"), translate("alpn")) o.default = "default" diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/server/type/ray.lua b/luci-app-passwall/luasrc/model/cbi/passwall/server/type/ray.lua index 69a459b06..6f6ce0bce 100644 --- a/luci-app-passwall/luasrc/model/cbi/passwall/server/type/ray.lua +++ b/luci-app-passwall/luasrc/model/cbi/passwall/server/type/ray.lua @@ -129,6 +129,7 @@ o.validate = function(self, value, t) end o:depends({ [option_name("protocol")] = "vmess" }) o:depends({ [option_name("protocol")] = "vless" }) +o:depends({ [option_name("protocol")] = "http" }) o:depends({ [option_name("protocol")] = "socks" }) o:depends({ [option_name("protocol")] = "shadowsocks" }) o:depends({ [option_name("protocol")] = "trojan" }) diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/server/type/sing-box.lua b/luci-app-passwall/luasrc/model/cbi/passwall/server/type/sing-box.lua index 50a084286..d7c9398fb 100644 --- a/luci-app-passwall/luasrc/model/cbi/passwall/server/type/sing-box.lua +++ b/luci-app-passwall/luasrc/model/cbi/passwall/server/type/sing-box.lua @@ -215,7 +215,6 @@ o.validate = function(self, value, t) end end o:depends({ [option_name("protocol")] = "http" }) -o:depends({ [option_name("protocol")] = "shadowsocks" }) o:depends({ [option_name("protocol")] = "vmess" }) o:depends({ [option_name("protocol")] = "vless" }) o:depends({ [option_name("protocol")] = "trojan" }) @@ -224,10 +223,9 @@ if singbox_tags:find("with_reality_server") then -- [[ REALITY部分 ]] -- o = s:option(Flag, option_name("reality"), translate("REALITY")) o.default = 0 - o:depends({ [option_name("protocol")] = "vless", [option_name("tls")] = true }) - o:depends({ [option_name("protocol")] = "vmess", [option_name("tls")] = true }) - o:depends({ [option_name("protocol")] = "shadowsocks", [option_name("tls")] = true }) o:depends({ [option_name("protocol")] = "http", [option_name("tls")] = true }) + o:depends({ [option_name("protocol")] = "vmess", [option_name("tls")] = true }) + o:depends({ [option_name("protocol")] = "vless", [option_name("tls")] = true }) o:depends({ [option_name("protocol")] = "trojan", [option_name("tls")] = true }) o = s:option(Value, option_name("reality_private_key"), translate("Private Key")) diff --git a/luci-app-passwall/root/usr/share/passwall/app.sh b/luci-app-passwall/root/usr/share/passwall/app.sh index 5843cf99d..396527ffe 100755 --- a/luci-app-passwall/root/usr/share/passwall/app.sh +++ b/luci-app-passwall/root/usr/share/passwall/app.sh @@ -799,24 +799,29 @@ run_redir() { _args="${_args} udp_redir_port=${UDP_REDIR_PORT}" config_file=$(echo $config_file | sed "s/TCP/TCP_UDP/g") } + local v2ray_dns_mode=$(config_t_get global v2ray_dns_mode tcp) + [ "${DNS_MODE}" != "sing-box" ] && [ "${DNS_MODE}" != "udp" ] && { + DNS_MODE="sing-box" + v2ray_dns_mode="tcp" + } [ "${DNS_MODE}" = "sing-box" ] && { resolve_dns=1 config_file=$(echo $config_file | sed "s/.json/_DNS.json/g") _args="${_args} remote_dns_query_strategy=${DNS_QUERY_STRATEGY}" + FILTER_PROXY_IPV6=0 [ "${DNS_CACHE}" == "0" ] && _args="${_args} dns_cache=0" - local v2ray_dns_mode=$(config_t_get global v2ray_dns_mode tcp) _args="${_args} remote_dns_protocol=${v2ray_dns_mode}" _args="${_args} dns_listen_port=${dns_listen_port}" local logout="" case "$v2ray_dns_mode" in tcp) _args="${_args} remote_dns_tcp_server=${REMOTE_DNS}" - logout=" - 域名解析 DNS Over TCP" + logout=" - 域名解析 DNS Over TCP (${REMOTE_DNS})" ;; doh) remote_dns_doh=$(config_t_get global remote_dns_doh "https://1.1.1.1/dns-query") _args="${_args} remote_dns_doh=${remote_dns_doh}" - logout=" - 域名解析 DNS Over HTTPS" + logout=" - 域名解析 DNS Over HTTPS (${remote_dns_doh})" ;; esac local remote_fakedns=$(config_t_get global remote_fakedns 0) @@ -849,16 +854,21 @@ run_redir() { _args="${_args} udp_redir_port=${UDP_REDIR_PORT}" config_file=$(echo $config_file | sed "s/TCP/TCP_UDP/g") } + local v2ray_dns_mode=$(config_t_get global v2ray_dns_mode tcp) + [ "${DNS_MODE}" != "xray" ] && [ "${DNS_MODE}" != "udp" ] && { + DNS_MODE="xray" + v2ray_dns_mode="tcp" + } [ "${DNS_MODE}" = "xray" ] && { resolve_dns=1 config_file=$(echo $config_file | sed "s/.json/_DNS.json/g") _args="${_args} dns_query_strategy=${DNS_QUERY_STRATEGY}" + FILTER_PROXY_IPV6=0 local _dns_client_ip=$(config_t_get global dns_client_ip) [ -n "${_dns_client_ip}" ] && _args="${_args} dns_client_ip=${_dns_client_ip}" [ "${DNS_CACHE}" == "0" ] && _args="${_args} dns_cache=0" _args="${_args} dns_listen_port=${dns_listen_port}" _args="${_args} remote_dns_tcp_server=${REMOTE_DNS}" - local v2ray_dns_mode=$(config_t_get global v2ray_dns_mode tcp) [ "$v2ray_dns_mode" = "tcp+doh" ] && { remote_dns_doh=$(config_t_get global remote_dns_doh "https://1.1.1.1/dns-query") _args="${_args} remote_dns_doh=${remote_dns_doh}" @@ -1183,6 +1193,7 @@ start_dns() { local _args="type=$DNS_MODE config_file=$config_file log_file=$log_file" [ "${DNS_CACHE}" == "0" ] && _args="${_args} dns_cache=0" _args="${_args} remote_dns_query_strategy=${DNS_QUERY_STRATEGY}" + FILTER_PROXY_IPV6=0 use_tcp_node_resolve_dns=1 local v2ray_dns_mode=$(config_t_get global v2ray_dns_mode tcp) _args="${_args} dns_listen_port=${dns_listen_port}" @@ -1190,7 +1201,7 @@ start_dns() { case "$v2ray_dns_mode" in tcp) _args="${_args} remote_dns_tcp_server=${REMOTE_DNS}" - echolog " - 域名解析 DNS Over TCP..." + echolog " - 域名解析 DNS Over TCP (${REMOTE_DNS})" ;; doh) remote_dns_doh=$(config_t_get global remote_dns_doh "https://1.1.1.1/dns-query") @@ -1206,7 +1217,7 @@ start_dns() { [ "${_is_ip}" = "true" ] && _doh_bootstrap=${_doh_host} [ -n "${_doh_bootstrap}" ] && REMOTE_DNS=${_doh_bootstrap}:${_doh_port} unset _doh_url _doh_host_port _doh_host _is_ip _doh_port _doh_bootstrap - echolog " - 域名解析 DNS Over HTTPS..." + echolog " - 域名解析 DNS Over HTTPS (${remote_dns_doh})" ;; esac _args="${_args} dns_socks_address=127.0.0.1 dns_socks_port=${tcp_node_socks_port}" @@ -1221,6 +1232,7 @@ start_dns() { local _args="type=$DNS_MODE config_file=$config_file log_file=$log_file" [ "${DNS_CACHE}" == "0" ] && _args="${_args} dns_cache=0" _args="${_args} dns_query_strategy=${DNS_QUERY_STRATEGY}" + FILTER_PROXY_IPV6=0 local _dns_client_ip=$(config_t_get global dns_client_ip) [ -n "${_dns_client_ip}" ] && _args="${_args} dns_client_ip=${_dns_client_ip}" use_tcp_node_resolve_dns=1 @@ -1253,6 +1265,7 @@ start_dns() { [ "$CHINADNS_NG" = "1" ] && [ -n "$(first_type chinadns-ng)" ] && ([ "${CHN_LIST}" = "direct" ] || [ "${USE_GFW_LIST}" = "1" ]) && { [ "$FILTER_PROXY_IPV6" = "1" ] && { local _no_ipv6_rules="gt" + FILTER_PROXY_IPV6=0 } local china_ng_listen_port=$(expr $dns_listen_port + 1) local china_ng_listen="127.0.0.1#${china_ng_listen_port}" @@ -1406,6 +1419,7 @@ acl_app() { [ "$dns_mode" = "xray" ] && [ "$v2ray_dns_mode" = "tcp+doh" ] && remote_dns_doh=${remote_dns_doh:-https://1.1.1.1/dns-query} local type=${dns_mode} [ "${dns_mode}" = "sing-box" ] && type="singbox" + filter_proxy_ipv6=0 run_${type} flag=acl_${sid} type=$dns_mode dns_socks_address=127.0.0.1 dns_socks_port=$socks_port dns_listen_port=${_dns_port} remote_dns_protocol=${v2ray_dns_mode} remote_dns_tcp_server=${remote_dns} remote_dns_doh="${remote_dns_doh}" remote_dns_query_strategy=${DNS_QUERY_STRATEGY} dns_client_ip=${dns_client_ip} dns_query_strategy=${DNS_QUERY_STRATEGY} config_file=$config_file fi eval node_${tcp_node}_$(echo -n "${remote_dns}" | md5sum | cut -d " " -f1)=${_dns_port} @@ -1414,6 +1428,7 @@ acl_app() { [ "$chinadns_ng" = "1" ] && [ -n "$(first_type chinadns-ng)" ] && ([ "${chn_list}" = "direct" ] || [ "${use_gfw_list}" = "1" ]) && { [ "$filter_proxy_ipv6" = "1" ] && { local _no_ipv6_rules="gt" + filter_proxy_ipv6=0 } chinadns_port=$(expr $chinadns_port + 1) _china_ng_listen="127.0.0.1#${chinadns_port}" @@ -1450,7 +1465,7 @@ acl_app() { } lua $APP_PATH/helper_dnsmasq_add.lua -FLAG ${sid} -TMP_DNSMASQ_PATH $TMP_ACL_PATH/$sid/dnsmasq.d \ -DNSMASQ_CONF_FILE $TMP_ACL_PATH/$sid/dnsmasq.conf -DEFAULT_DNS $DEFAULT_DNS -LOCAL_DNS $LOCAL_DNS \ - -USE_DIRECT_LIST "${use_direct_list}" -USE_PROXY_LIST "${use_proxy_list}" -USE_BLOCK_LIST "${use_block_list}" -USE_GFW_LIST "${use_gfw_list}" -CHN_LIST "${CHN_LIST}" \ + -USE_DIRECT_LIST "${use_direct_list}" -USE_PROXY_LIST "${use_proxy_list}" -USE_BLOCK_LIST "${use_block_list}" -USE_GFW_LIST "${use_gfw_list}" -CHN_LIST "${chn_list}" \ -TUN_DNS "127.0.0.1#${_dns_port}" -REMOTE_FAKEDNS 0 -USE_DEFAULT_DNS "${use_default_dns:-direct}" -CHINADNS_DNS ${_china_ng_listen:-0} \ -TCP_NODE $tcp_node -DEFAULT_PROXY_MODE ${tcp_proxy_mode} -NO_PROXY_IPV6 ${filter_proxy_ipv6:-0} -NFTFLAG ${nftflag:-0} \ -NO_LOGIC_LOG 1 @@ -1485,6 +1500,7 @@ acl_app() { _dns_port=$dns_port config_file=$(echo $config_file | sed "s/TCP_/DNS_${_dns_port}_TCP_/g") remote_dns_doh=${remote_dns} + filter_proxy_ipv6=0 [ "$dns_mode" = "xray" ] && [ "$v2ray_dns_mode" = "tcp+doh" ] && remote_dns_doh=${remote_dns_doh:-https://1.1.1.1/dns-query} _extra_param="dns_listen_port=${_dns_port} remote_dns_protocol=${v2ray_dns_mode} remote_dns_tcp_server=${remote_dns} remote_dns_doh=${remote_dns_doh} remote_dns_query_strategy=${DNS_QUERY_STRATEGY} dns_client_ip=${dns_client_ip} dns_query_strategy=${DNS_QUERY_STRATEGY}" fi diff --git a/luci-app-passwall/root/usr/share/passwall/iptables.sh b/luci-app-passwall/root/usr/share/passwall/iptables.sh index d6a2a4713..f11269f03 100755 --- a/luci-app-passwall/root/usr/share/passwall/iptables.sh +++ b/luci-app-passwall/root/usr/share/passwall/iptables.sh @@ -1037,7 +1037,7 @@ add_firewall_rule() { $ipt_m -A PSW_OUTPUT -p udp $(factor $UDP_REDIR_PORTS "-m multiport --dport") $(dst $IPSET_SHUNTLIST) -j PSW_RULE [ "${USE_PROXY_LIST}" = "1" ] && $ipt_m -A PSW_OUTPUT -p udp $(factor $UDP_REDIR_PORTS "-m multiport --dport") $(dst $IPSET_BLACKLIST) -j PSW_RULE [ "${USE_GFW_LIST}" = "1" ] && $ipt_m -A PSW_OUTPUT -p udp $(factor $UDP_REDIR_PORTS "-m multiport --dport") $(dst $IPSET_GFW) -j PSW_RULE - [ "${CHN_LIST}" != "0" ] && $ipt_m -A PSW_OUTPUT -p udp $(factor $UDP_REDIR_PORTS "-m multiport --dport") $(dst $IPSET_CHN)$(get_jump_ipt ${CHN_LIST} "-j PSW_RULE") + [ "${CHN_LIST}" != "0" ] && $ipt_m -A PSW_OUTPUT -p udp $(factor $UDP_REDIR_PORTS "-m multiport --dport") $(dst $IPSET_CHN) $(get_jump_ipt ${CHN_LIST} "-j PSW_RULE") [ "${LOCALHOST_UDP_PROXY_MODE}" != "disable" ] && $ipt_m -A PSW_OUTPUT -p udp $(factor $UDP_REDIR_PORTS "-m multiport --dport") -j PSW_RULE $ipt_m -A PSW $(comment "本机") -p udp -i lo $(REDIRECT $UDP_REDIR_PORT TPROXY) } diff --git a/luci-app-passwall/root/usr/share/passwall/subscribe.lua b/luci-app-passwall/root/usr/share/passwall/subscribe.lua index bb28e713d..3be410bc3 100755 --- a/luci-app-passwall/root/usr/share/passwall/subscribe.lua +++ b/luci-app-passwall/root/usr/share/passwall/subscribe.lua @@ -1135,33 +1135,38 @@ local function parse_link(raw, add_mode, add_from) for _, v in ipairs(nodes) do if v then - local result - if szType == 'ssd' then - result = processData(szType, v, add_mode, add_from) - elseif not szType then - local node = trim(v) - local dat = split(node, "://") - if dat and dat[1] and dat[2] then - if dat[1] == 'ss' or dat[1] == 'trojan' then - result = processData(dat[1], dat[2], add_mode, add_from) + xpcall(function () + local result + if szType == 'ssd' then + result = processData(szType, v, add_mode, add_from) + elseif not szType then + local node = trim(v) + local dat = split(node, "://") + if dat and dat[1] and dat[2] then + if dat[1] == 'ss' or dat[1] == 'trojan' then + result = processData(dat[1], dat[2], add_mode, add_from) + else + result = processData(dat[1], base64Decode(dat[2]), add_mode, add_from) + end + end + else + log('跳过未知类型: ' .. szType) + end + -- log(result) + if result then + if not result.type then + log('丢弃节点:' .. result.remarks .. ",找不到可使用二进制.") + elseif (add_mode == "2" and is_filter_keyword(result.remarks)) or not result.address or result.remarks == "NULL" or result.address == "127.0.0.1" or + (not datatypes.hostname(result.address) and not (api.is_ip(result.address))) then + log('丢弃过滤节点: ' .. result.type .. ' 节点, ' .. result.remarks) else - result = processData(dat[1], base64Decode(dat[2]), add_mode, add_from) + tinsert(node_list, result) end end - else - log('跳过未知类型: ' .. szType) - end - -- log(result) - if result then - if not result.type then - log('丢弃节点:' .. result.remarks .. ",找不到可使用二进制.") - elseif (add_mode == "2" and is_filter_keyword(result.remarks)) or not result.address or result.remarks == "NULL" or result.address == "127.0.0.1" or - (not datatypes.hostname(result.address) and not (api.is_ip(result.address))) then - log('丢弃过滤节点: ' .. result.type .. ' 节点, ' .. result.remarks) - else - tinsert(node_list, result) - end + end, function () + log(v, "解析错误,跳过此节点。") end + ) end end if #node_list > 0 then diff --git a/sunpanel/Makefile b/sunpanel/Makefile index 98800aa43..244bfe7df 100644 --- a/sunpanel/Makefile +++ b/sunpanel/Makefile @@ -11,7 +11,7 @@ PKG_ARCH_sunpanel:=$(ARCH) PKG_NAME:=sunpanel PKG_VERSION:=1.3.1 -PKG_RELEASE:=3 +PKG_RELEASE:=6 PKG_SOURCE:=$(PKG_NAME)-binary-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=https://github.com/linkease/istore-packages/releases/download/prebuilt/ PKG_HASH:=3ce70530fad9788c4ce0a2969cffc5b80f010406c7a0185b9a40616e3e67f201 @@ -40,6 +40,13 @@ define Package/$(PKG_NAME)/conffiles /etc/config/sunpanel endef +define Package/$(PKG_NAME)/postinst +#!/bin/sh +if [ -z "$${IPKG_INSTROOT}" ]; then + [ -f /etc/uci-defaults/sunpanel ] && /etc/uci-defaults/sunpanel && rm -f /etc/uci-defaults/sunpanel +fi +endef + define Build/Configure endef @@ -47,12 +54,13 @@ define Build/Compile endef define Package/$(PKG_NAME)/install - $(INSTALL_DIR) $(1)/usr/sbin $(1)/etc/init.d $(1)/etc/config $(1)/usr/libexec/istorec $(1)/usr/share/sunpanel + $(INSTALL_DIR) $(1)/usr/sbin $(1)/etc/init.d $(1)/etc/config $(1)/usr/libexec/istorec $(1)/usr/share/sunpanel $(1)/etc/uci-defaults $(INSTALL_BIN) $(PKG_BUILD_DIR)/sunpanelbin.$(PKG_ARCH_sunpanel) $(1)/usr/sbin/sunpanelbin $(INSTALL_BIN) ./files/sunpanel.init $(1)/etc/init.d/sunpanel $(CP) ./files/sunpanel_conf.lua $(1)/usr/libexec/istorec/ $(CP) ./files/conf.temp $(1)/usr/share/sunpanel/ $(INSTALL_CONF) ./files/sunpanel.config $(1)/etc/config/sunpanel + $(INSTALL_BIN) ./files/sunpanel.uci-default $(1)/etc/uci-defaults/sunpanel endef $(eval $(call BuildPackage,$(PKG_NAME))) diff --git a/sunpanel/files/sunpanel.init b/sunpanel/files/sunpanel.init index 6bef946fe..5991f6b85 100755 --- a/sunpanel/files/sunpanel.init +++ b/sunpanel/files/sunpanel.init @@ -6,7 +6,6 @@ NAME=sunpanel get_config() { config_get_bool enabled $1 enabled 0 - config_get port $1 config_path config_get config_path $1 config_path } @@ -14,28 +13,18 @@ start_service() { config_load "$NAME" config_foreach get_config "$NAME" [ $enabled != 1 ] && return 1 - [ -z $config_path ] && return 1 - [ ! -d $config_path ] && return 1 + mkdir -p "$config_path" lua /usr/libexec/istorec/sunpanel_conf.lua $NAME /usr/share/$NAME/conf.temp $config_path/conf.ini - procd_open_instance - procd_set_param command /usr/sbin/sunpanelbin -cfgPath $config_path - procd_set_param stderr 1 - procd_set_param respawn - procd_close_instance + procd_open_instance + procd_set_param file $config_path/conf.ini + procd_set_param command /usr/sbin/sunpanelbin -cfgPath $config_path + procd_set_param stderr 1 + procd_set_param respawn + procd_close_instance } service_triggers() { procd_add_reload_trigger "$NAME" } -reload_service() { - restart -} - -restart() { - stop - sleep 2 - start -} - diff --git a/sunpanel/files/sunpanel.uci-default b/sunpanel/files/sunpanel.uci-default new file mode 100644 index 000000000..a6eef6877 --- /dev/null +++ b/sunpanel/files/sunpanel.uci-default @@ -0,0 +1,13 @@ +#!/bin/sh + +uci -q batch <<-EOF >/dev/null + delete ucitrack.@sunpanel[-1] + add ucitrack sunpanel + set ucitrack.@sunpanel[-1].init=sunpanel + commit ucitrack +EOF + +/etc/init.d/sunpanel enable + +exit 0 +