diff --git a/luci-app-gpsysupgrade/luasrc/model/cbi/gpsysupgrade/sysupgrade.lua b/luci-app-gpsysupgrade/luasrc/model/cbi/gpsysupgrade/sysupgrade.lua
index 2d236d9b0..5b9c22d51 100644
--- a/luci-app-gpsysupgrade/luasrc/model/cbi/gpsysupgrade/sysupgrade.lua
+++ b/luci-app-gpsysupgrade/luasrc/model/cbi/gpsysupgrade/sysupgrade.lua
@@ -41,19 +41,19 @@ function to_check()
elseif model:match(".*R2S.*") then
model = "rockchip_armv8/nanopi-r2s"
check_update()
- download_url = "https://op.supes.top/firmware/" ..model.. "/" ..remote_version.. "-openwrt-rockchip-armv8-nanopi-r2s-squashfs-sysupgrade.img.gz"
+ download_url = "https://op.supes.top/firmware/" ..model.. "/" ..remote_version.. "-openwrt-rockchip-armv8-nanopi-r2s-squashfs-sysupgrade.img.gz"
elseif model:match(".*R4S.*") then
model = "rockchip_armv8/nanopi-r4s"
check_update()
- download_url = "https://op.supes.top/firmware/" ..model.. "/" ..remote_version.. "-openwrt-rockchip-armv8-nanopi-r4s-squashfs-sysupgrade.img.gz"
+ download_url = "https://op.supes.top/firmware/" ..model.. "/" ..remote_version.. "-openwrt-rockchip-armv8-nanopi-r4s-squashfs-sysupgrade.img.gz"
elseif model:match(".*R5S.*") then
model = "rockchip_armv8/nanopi-r5s"
check_update()
- download_url = "https://op.supes.top/firmware/" ..model.. "/" ..remote_version.. "-openwrt-rockchip-armv8-nanopi-r5s_sd.img.gz"
+ download_url = "https://op.supes.top/firmware/" ..model.. "/" ..remote_version.. "-openwrt-rockchip-armv8-nanopi-r5s_sd.img.gz"
elseif model:match(".*R2C.*") then
model = "rockchip_armv8/nanopi-r2c"
check_update()
- download_url = "https://op.supes.top/firmware/" ..model.. "/" ..remote_version.. "-openwrt-rockchip-armv8-nanopi-r2c-squashfs-sysupgrade.img.gz"
+ download_url = "https://op.supes.top/firmware/" ..model.. "/" ..remote_version.. "-openwrt-rockchip-armv8-nanopi-r2c-squashfs-sysupgrade.img.gz"
elseif model:match(".*DoorNet2.*") then
model = "rockchip_armv8/doornet2"
check_update()
@@ -85,15 +85,15 @@ function to_check()
elseif model:match(".*AX6.*") then
model = "ipq807x/redmi-ax6"
check_update()
- download_url = "https://op.supes.top/firmware/ipq807x/" ..model.. "/" ..remote_version.. "-openwrt-ipq807x-generic-redmi_ax6-squashfs-nand-sysupgrade.bin"
+ download_url = "https://op.supes.top/firmware/" ..model.. "/" ..remote_version.. "-openwrt-ipq807x-generic-redmi_ax6-squashfs-nand-sysupgrade.bin"
elseif model:match(".*AX9000.*") then
model = "ipq807x/xiaomi-ax9000"
check_update()
- download_url = "https://op.supes.top/firmware/ipq807x/" ..model.. "/" ..remote_version.. "-openwrt-ipq807x-generic-xiaomi_ax9000-squashfs-nand-sysupgrade.bin"
+ download_url = "https://op.supes.top/firmware/" ..model.. "/" ..remote_version.. "-openwrt-ipq807x-generic-xiaomi_ax9000-squashfs-nand-sysupgrade.bin"
elseif model:match(".*AX3600.*") then
model = "ipq807x/xiaomi-ax3600"
check_update()
- download_url = "https://op.supes.top/firmware/ipq807x/" ..model.. "/" ..remote_version.. "-openwrt-ipq807x-generic-xiaomi_ax3600-squashfs-nand-sysupgrade.bin"
+ download_url = "https://op.supes.top/firmware/" ..model.. "/" ..remote_version.. "-openwrt-ipq807x-generic-xiaomi_ax3600-squashfs-nand-sysupgrade.bin"
elseif model:match(".*XY-C5.*") then
model = "ramips_mt7621/xy-c5"
check_update()
@@ -201,7 +201,7 @@ function to_flash(file,retain)
if not file or file == "" or not fs.access(file) then
return {code = 1, error = i18n.translate("Firmware file is required.")}
end
- sys.call("/sbin/sysupgrade " ..retain.. " " ..file.. "")
+ sys.call(". /etc/profile.d/opkg.sh;opkg save;/sbin/sysupgrade " ..retain.. " " ..file.. "")
return {code = 0}
end
diff --git a/luci-app-gpsysupgrade/root/etc/profile.d/opkg.sh b/luci-app-gpsysupgrade/root/etc/profile.d/opkg.sh
index 447e8c034..c21a8b049 100644
--- a/luci-app-gpsysupgrade/root/etc/profile.d/opkg.sh
+++ b/luci-app-gpsysupgrade/root/etc/profile.d/opkg.sh
@@ -28,7 +28,7 @@ echo "kmod busybox base-files " \
opkg_uci() {
local OPKG_OPT="${1:-${OPKG_UCI}}"
local OPKG_OPT="${OPKG_OPT:-auto}"
-if ! uci -q get opkg > /dev/null
+if ! uci -q get opkg.defaults > /dev/null
then opkg init
fi
uci -q batch << EOI
diff --git a/luci-app-ssr-plus/Makefile b/luci-app-ssr-plus/Makefile
index ec4b2f411..6151ed8db 100644
--- a/luci-app-ssr-plus/Makefile
+++ b/luci-app-ssr-plus/Makefile
@@ -2,15 +2,18 @@ include $(TOPDIR)/rules.mk
PKG_NAME:=luci-app-ssr-plus
PKG_VERSION:=186
-PKG_RELEASE:=3
+PKG_RELEASE:=5
PKG_CONFIG_DEPENDS:= \
+ CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_NONE_V2RAY \
+ CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_V2ray \
+ CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_Xray \
+ CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_SagerNet_Core \
CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_Kcptun \
CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_Hysteria \
CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_IPT2Socks \
CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_NaiveProxy \
CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_Redsocks2 \
- CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_SagerNet_Core \
CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Libev_Client \
CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Libev_Server \
CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Rust_Client \
@@ -28,13 +31,17 @@ LUCI_DEPENDS:= \
+coreutils +coreutils-base64 +dns2socks +dns2tcp +dnsmasq-full +ipset +kmod-ipt-nat \
+ip-full +iptables +iptables-mod-tproxy +lua +libuci-lua +microsocks +tcping \
+resolveip +shadowsocksr-libev-ssr-check +uclient-fetch \
+ +PACKAGE_$(PKG_NAME)_INCLUDE_V2ray:curl \
+ +PACKAGE_$(PKG_NAME)_INCLUDE_V2ray:v2ray-core \
+ +PACKAGE_$(PKG_NAME)_INCLUDE_Xray:curl \
+ +PACKAGE_$(PKG_NAME)_INCLUDE_Xray:xray-core \
+ +PACKAGE_$(PKG_NAME)_INCLUDE_SagerNet_Core:curl \
+ +PACKAGE_$(PKG_NAME)_INCLUDE_SagerNet_Core:sagernet-core \
+PACKAGE_$(PKG_NAME)_INCLUDE_Kcptun:kcptun-client \
+PACKAGE_$(PKG_NAME)_INCLUDE_Hysteria:hysteria \
+PACKAGE_$(PKG_NAME)_INCLUDE_IPT2Socks:ipt2socks \
+PACKAGE_$(PKG_NAME)_INCLUDE_NaiveProxy:naiveproxy \
+PACKAGE_$(PKG_NAME)_INCLUDE_Redsocks2:redsocks2 \
- +PACKAGE_$(PKG_NAME)_INCLUDE_SagerNet_Core:curl \
- +PACKAGE_$(PKG_NAME)_INCLUDE_SagerNet_Core:sagernet-core \
+PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Libev_Client:shadowsocks-libev-ss-local \
+PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Libev_Client:shadowsocks-libev-ss-redir \
+PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Libev_Server:shadowsocks-libev-ss-server \
@@ -50,6 +57,24 @@ LUCI_DEPENDS:= \
define Package/$(PKG_NAME)/config
select PACKAGE_luci-lib-ipkg if PACKAGE_$(PKG_NAME)
+choice
+ prompt "V2ray-core Selection"
+ default PACKAGE_$(PKG_NAME)_INCLUDE_Xray if aarch64||arm||i386||x86_64
+ default PACKAGE_$(PKG_NAME)_INCLUDE_NONE_V2RAY
+
+ config PACKAGE_$(PKG_NAME)_INCLUDE_NONE_V2RAY
+ bool "None"
+
+ config PACKAGE_$(PKG_NAME)_INCLUDE_V2ray
+ bool "Include V2ray-core"
+
+ config PACKAGE_$(PKG_NAME)_INCLUDE_Xray
+ bool "Include Xray-core"
+
+ config PACKAGE_$(PKG_NAME)_INCLUDE_SagerNet_Core
+ bool "Include SagerNet-core (An enhanced edition of v2ray-core)"
+endchoice
+
config PACKAGE_$(PKG_NAME)_INCLUDE_Kcptun
bool "Include Kcptun"
default n
@@ -59,7 +84,7 @@ config PACKAGE_$(PKG_NAME)_INCLUDE_Hysteria
default n
config PACKAGE_$(PKG_NAME)_INCLUDE_IPT2Socks
- bool "Include ipt2socks"
+ bool "Include IPT2Socks"
default n
config PACKAGE_$(PKG_NAME)_INCLUDE_NaiveProxy
@@ -71,10 +96,6 @@ config PACKAGE_$(PKG_NAME)_INCLUDE_Redsocks2
bool "Include Redsocks2"
default n
-config PACKAGE_$(PKG_NAME)_INCLUDE_SagerNet_Core
- bool "Include sagernet-core (An enhanced edition of v2ray-core)"
- default y if aarch64||arm||i386||x86_64
-
config PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Libev_Client
bool "Include Shadowsocks Libev Client"
default y if arm
diff --git a/luci-app-xray/Makefile b/luci-app-xray/Makefile
index 718666ff7..e2884f118 100644
--- a/luci-app-xray/Makefile
+++ b/luci-app-xray/Makefile
@@ -1,7 +1,7 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=luci-app-xray
-PKG_VERSION:=1.13.1
+PKG_VERSION:=1.14.0
PKG_RELEASE:=1
PKG_LICENSE:=MPLv2
diff --git a/luci-app-xray/root/usr/share/xray/gen_config.lua b/luci-app-xray/root/usr/share/xray/gen_config.lua
index 3860d79ec..a15056820 100644
--- a/luci-app-xray/root/usr/share/xray/gen_config.lua
+++ b/luci-app-xray/root/usr/share/xray/gen_config.lua
@@ -862,7 +862,20 @@ local function rules()
})
end
if geoip_existence then
- if proxy.geoip_direct_code ~= nil then
+ if proxy.geoip_direct_code == nil or proxy.geoip_direct_code == "upgrade" then
+ if proxy.geoip_direct_code_list ~= nil then
+ local geoip_direct_code_list = {}
+ for _, v in ipairs(proxy.geoip_direct_code_list) do
+ table.insert(geoip_direct_code_list, "geoip:" .. v)
+ end
+ table.insert(result, 1, {
+ type = "field",
+ inboundTag = {"tproxy_tcp_inbound", "tproxy_udp_inbound", "dns_conf_inbound"},
+ outboundTag = "direct",
+ ip = geoip_direct_code_list
+ })
+ end
+ else
table.insert(result, 1, {
type = "field",
inboundTag = {"tproxy_tcp_inbound", "tproxy_udp_inbound", "dns_conf_inbound"},
diff --git a/luci-app-xray/root/www/luci-static/resources/view/xray.js b/luci-app-xray/root/www/luci-static/resources/view/xray.js
index 449d54714..4a71bb67a 100644
--- a/luci-app-xray/root/www/luci-static/resources/view/xray.js
+++ b/luci-app-xray/root/www/luci-static/resources/view/xray.js
@@ -135,6 +135,7 @@ return view.extend({
render: function (load_result) {
const config_data = load_result[0];
+ const geoip_direct_code = uci.get_first(config_data, "general", "geoip_direct_code");
const { geoip_existence, geoip_size, geosite_existence, geosite_size, optional_features } = check_resource_files(load_result[1]);
let asset_file_status = _('WARNING: at least one of asset files (geoip.dat, geosite.dat) is not found under /usr/share/xray. Xray may not work properly. See here for help.')
if (geoip_existence) {
@@ -529,11 +530,21 @@ return view.extend({
s.tab('access_control', _('Transparent Proxy Rules'));
- if (geoip_existence) {
- o = s.taboption('access_control', form.Value, 'geoip_direct_code', _('GeoIP Direct Code'), _("Hosts in this GeoIP set will not be forwarded through Xray. Set to unspecified to forward all non-private hosts."))
+ if (geoip_direct_code === "upgrade" || geoip_direct_code === void 0) {
+ if (geoip_existence) {
+ o = s.taboption('access_control', form.DynamicList, 'geoip_direct_code_list', _('GeoIP Direct Code List'), _("Hosts in these GeoIP sets will not be forwarded through Xray. Remove all items to forward all non-private hosts."))
+ } else {
+ o = s.taboption('access_control', form.DynamicList, 'geoip_direct_code_list', _('GeoIP Direct Code List'), _("Resource file /usr/share/xray/geoip.dat not exist. All network traffic will be forwarded.
Compile your firmware again with data files to use this feature, or
download one (maybe disable transparent proxy first) and upload it to your router."))
+ o.readonly = true
+ }
} else {
- o = s.taboption('access_control', form.Value, 'geoip_direct_code', _('GeoIP Direct Code'), _("Resource file /usr/share/xray/geoip.dat not exist. All network traffic will be forwarded.
Compile your firmware again with data files to use this feature, or
download one (maybe disable transparent proxy first) and upload it to your router."))
- o.readonly = true
+ if (geoip_existence) {
+ o = s.taboption('access_control', form.Value, 'geoip_direct_code', _('GeoIP Direct Code'), _("Hosts in this GeoIP set will not be forwarded through Xray. Set to unspecified to forward all non-private hosts.
Switching to new format (by selecting 'Upgrade configuration...') is recommended for multiple GeoIP options here."))
+ } else {
+ o = s.taboption('access_control', form.Value, 'geoip_direct_code', _('GeoIP Direct Code'), _("Resource file /usr/share/xray/geoip.dat not exist. All network traffic will be forwarded.
Compile your firmware again with data files to use this feature, or
download one (maybe disable transparent proxy first) and upload it to your router."))
+ o.readonly = true
+ }
+ o.value("upgrade", "Upgrade configuration...")
}
o.value("cn", "cn")
o.value("telegram", "telegram")