Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fcd7d31b29 | ||
|
|
87faec277a | ||
|
|
d341a782d4 |
@@ -1,8 +1,8 @@
|
|||||||
include $(TOPDIR)/rules.mk
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
PKG_NAME:=clashoo
|
PKG_NAME:=clashoo
|
||||||
PKG_SHORT_SHA:=dca26db
|
PKG_SHORT_SHA:=dc66a8a
|
||||||
PKG_COMMIT_DATE:=2026.09.11
|
PKG_COMMIT_DATE:=2026.09.14
|
||||||
|
|
||||||
PKG_VERSION:=$(PKG_COMMIT_DATE)~$(PKG_SHORT_SHA)
|
PKG_VERSION:=$(PKG_COMMIT_DATE)~$(PKG_SHORT_SHA)
|
||||||
PKG_RELEASE:=1
|
PKG_RELEASE:=1
|
||||||
@@ -11,8 +11,8 @@ PKG_SOURCE:=$(PKG_NAME)-alpha-$(PKG_SHORT_SHA).tar.gz
|
|||||||
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-alpha-$(PKG_SHORT_SHA)
|
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-alpha-$(PKG_SHORT_SHA)
|
||||||
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-alpha-$(PKG_SHORT_SHA)
|
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-alpha-$(PKG_SHORT_SHA)
|
||||||
PKG_SOURCE_URL:=https://github.com/kenzok8/openwrt-clashoo/releases/download/mihomo-src
|
PKG_SOURCE_URL:=https://github.com/kenzok8/openwrt-clashoo/releases/download/mihomo-src
|
||||||
PKG_SOURCE_VERSION:=dca26db017bcde90071f3e16f97b12fafbccfa31
|
PKG_SOURCE_VERSION:=dc66a8a180c0fa1c2b91cf5413426e68dbca320e
|
||||||
PKG_HASH:=593e53b3aeb52bbd3f49ddf4ae7773ce340bf2e984a9d5634a6385fa3041b5a2
|
PKG_HASH:=e7003359dc55a62a6f31b45f9123fc14a0a58f66c8cc4a3514ab15e94f08008b
|
||||||
PKG_BUILD_VERSION:=alpha-$(PKG_SHORT_SHA)
|
PKG_BUILD_VERSION:=alpha-$(PKG_SHORT_SHA)
|
||||||
|
|
||||||
PKG_LICENSE:=GPL3.0+
|
PKG_LICENSE:=GPL3.0+
|
||||||
|
|||||||
@@ -939,6 +939,7 @@ set clashoo_china6 {
|
|||||||
2402:7240::/32,
|
2402:7240::/32,
|
||||||
2402:72a0::/32,
|
2402:72a0::/32,
|
||||||
2402:72c0::/32,
|
2402:72c0::/32,
|
||||||
|
2402:73e0::/32,
|
||||||
2402:7540::/32,
|
2402:7540::/32,
|
||||||
2402:75c0::/32,
|
2402:75c0::/32,
|
||||||
2402:7740::/32,
|
2402:7740::/32,
|
||||||
@@ -1246,11 +1247,12 @@ set clashoo_china6 {
|
|||||||
2403:6280::/32,
|
2403:6280::/32,
|
||||||
2403:62c0::/32,
|
2403:62c0::/32,
|
||||||
2403:6380::/42,
|
2403:6380::/42,
|
||||||
|
2403:6380:41::/48,
|
||||||
2403:6380:43::/48,
|
2403:6380:43::/48,
|
||||||
2403:6380:44::/46,
|
2403:6380:44::/46,
|
||||||
2403:6380:48::/45,
|
2403:6380:48::/45,
|
||||||
2403:6380:50::/44,
|
2403:6380:50::/44,
|
||||||
2403:6380:70::/44,
|
2403:6380:60::/43,
|
||||||
2403:6380:80::/41,
|
2403:6380:80::/41,
|
||||||
2403:6380:100::/40,
|
2403:6380:100::/40,
|
||||||
2403:6380:200::/39,
|
2403:6380:200::/39,
|
||||||
@@ -2036,7 +2038,7 @@ set clashoo_china6 {
|
|||||||
2406:840:a18::/45,
|
2406:840:a18::/45,
|
||||||
2406:840:a20::/44,
|
2406:840:a20::/44,
|
||||||
2406:840:a30::/48,
|
2406:840:a30::/48,
|
||||||
2406:840:a32::/47,
|
2406:840:a33::/48,
|
||||||
2406:840:a34::/46,
|
2406:840:a34::/46,
|
||||||
2406:840:a38::/45,
|
2406:840:a38::/45,
|
||||||
2406:840:a40::/42,
|
2406:840:a40::/42,
|
||||||
@@ -2337,7 +2339,10 @@ set clashoo_china6 {
|
|||||||
2406:840:e57f::/48,
|
2406:840:e57f::/48,
|
||||||
2406:840:e580::/41,
|
2406:840:e580::/41,
|
||||||
2406:840:e610::/44,
|
2406:840:e610::/44,
|
||||||
2406:840:e620::/43,
|
2406:840:e622::/47,
|
||||||
|
2406:840:e624::/46,
|
||||||
|
2406:840:e628::/45,
|
||||||
|
2406:840:e630::/44,
|
||||||
2406:840:e640::/43,
|
2406:840:e640::/43,
|
||||||
2406:840:e660::/46,
|
2406:840:e660::/46,
|
||||||
2406:840:e664::/47,
|
2406:840:e664::/47,
|
||||||
@@ -2448,6 +2453,10 @@ set clashoo_china6 {
|
|||||||
2406:840:f600::/42,
|
2406:840:f600::/42,
|
||||||
2406:840:f640::/43,
|
2406:840:f640::/43,
|
||||||
2406:840:f670::/44,
|
2406:840:f670::/44,
|
||||||
|
2406:840:f680::/47,
|
||||||
|
2406:840:f682::/48,
|
||||||
|
2406:840:f684::/46,
|
||||||
|
2406:840:f688::/45,
|
||||||
2406:840:f690::/44,
|
2406:840:f690::/44,
|
||||||
2406:840:f6a0::/43,
|
2406:840:f6a0::/43,
|
||||||
2406:840:f6c0::/42,
|
2406:840:f6c0::/42,
|
||||||
@@ -3039,7 +3048,6 @@ set clashoo_china6 {
|
|||||||
2408:4008::/29,
|
2408:4008::/29,
|
||||||
2408:4010::/30,
|
2408:4010::/30,
|
||||||
2408:4014::/31,
|
2408:4014::/31,
|
||||||
2408:4016:1::/48,
|
|
||||||
2408:4016:2::/47,
|
2408:4016:2::/47,
|
||||||
2408:4016:4::/46,
|
2408:4016:4::/46,
|
||||||
2408:4016:8::/45,
|
2408:4016:8::/45,
|
||||||
|
|||||||
@@ -920,7 +920,9 @@ set clashoo_china {
|
|||||||
59.153.136.0/22,
|
59.153.136.0/22,
|
||||||
59.153.152.0/22,
|
59.153.152.0/22,
|
||||||
59.153.164.0/22,
|
59.153.164.0/22,
|
||||||
59.153.168.0/21,
|
59.153.168.0/22,
|
||||||
|
59.153.173.0/24,
|
||||||
|
59.153.174.0/23,
|
||||||
59.153.176.0/20,
|
59.153.176.0/20,
|
||||||
59.153.192.0/22,
|
59.153.192.0/22,
|
||||||
59.155.0.0/16,
|
59.155.0.0/16,
|
||||||
@@ -951,6 +953,7 @@ set clashoo_china {
|
|||||||
61.29.128.0/18,
|
61.29.128.0/18,
|
||||||
61.29.192.0/19,
|
61.29.192.0/19,
|
||||||
61.29.224.0/20,
|
61.29.224.0/20,
|
||||||
|
61.29.251.0/24,
|
||||||
61.45.128.0/18,
|
61.45.128.0/18,
|
||||||
61.45.224.0/20,
|
61.45.224.0/20,
|
||||||
61.47.128.0/18,
|
61.47.128.0/18,
|
||||||
@@ -2186,6 +2189,7 @@ set clashoo_china {
|
|||||||
103.143.132.0/22,
|
103.143.132.0/22,
|
||||||
103.143.174.0/23,
|
103.143.174.0/23,
|
||||||
103.143.228.0/23,
|
103.143.228.0/23,
|
||||||
|
103.144.41.0/24,
|
||||||
103.144.66.0/23,
|
103.144.66.0/23,
|
||||||
103.144.70.0/23,
|
103.144.70.0/23,
|
||||||
103.144.72.0/23,
|
103.144.72.0/23,
|
||||||
@@ -2341,7 +2345,7 @@ set clashoo_china {
|
|||||||
103.176.244.0/23,
|
103.176.244.0/23,
|
||||||
103.177.28.0/23,
|
103.177.28.0/23,
|
||||||
103.177.44.0/23,
|
103.177.44.0/23,
|
||||||
103.177.70.0/23,
|
103.177.71.0/24,
|
||||||
103.177.162.0/23,
|
103.177.162.0/23,
|
||||||
103.178.240.0/23,
|
103.178.240.0/23,
|
||||||
103.179.76.0/22,
|
103.179.76.0/22,
|
||||||
@@ -2754,6 +2758,7 @@ set clashoo_china {
|
|||||||
103.238.24.0/21,
|
103.238.24.0/21,
|
||||||
103.238.32.0/21,
|
103.238.32.0/21,
|
||||||
103.238.40.0/22,
|
103.238.40.0/22,
|
||||||
|
103.238.46.0/23,
|
||||||
103.238.48.0/21,
|
103.238.48.0/21,
|
||||||
103.238.56.0/22,
|
103.238.56.0/22,
|
||||||
103.238.88.0/21,
|
103.238.88.0/21,
|
||||||
@@ -3224,7 +3229,10 @@ set clashoo_china {
|
|||||||
114.112.228.0/24,
|
114.112.228.0/24,
|
||||||
114.112.230.0/23,
|
114.112.230.0/23,
|
||||||
114.112.234.0/23,
|
114.112.234.0/23,
|
||||||
114.112.240.0/20,
|
114.112.240.0/21,
|
||||||
|
114.112.248.0/22,
|
||||||
|
114.112.252.0/23,
|
||||||
|
114.112.255.0/24,
|
||||||
114.113.0.0/17,
|
114.113.0.0/17,
|
||||||
114.113.128.0/21,
|
114.113.128.0/21,
|
||||||
114.113.140.0/22,
|
114.113.140.0/22,
|
||||||
@@ -3394,7 +3402,9 @@ set clashoo_china {
|
|||||||
117.134.128.0/18,
|
117.134.128.0/18,
|
||||||
117.134.205.0/24,
|
117.134.205.0/24,
|
||||||
117.134.207.0/24,
|
117.134.207.0/24,
|
||||||
117.134.208.0/20,
|
117.134.208.0/23,
|
||||||
|
117.134.212.0/23,
|
||||||
|
117.134.216.0/21,
|
||||||
117.134.232.0/21,
|
117.134.232.0/21,
|
||||||
117.134.240.0/20,
|
117.134.240.0/20,
|
||||||
117.135.0.0/16,
|
117.135.0.0/16,
|
||||||
@@ -3746,7 +3756,6 @@ set clashoo_china {
|
|||||||
123.49.236.0/24,
|
123.49.236.0/24,
|
||||||
123.49.240.0/24,
|
123.49.240.0/24,
|
||||||
123.49.242.0/23,
|
123.49.242.0/23,
|
||||||
123.49.245.0/24,
|
|
||||||
123.49.248.0/21,
|
123.49.248.0/21,
|
||||||
123.50.160.0/19,
|
123.50.160.0/19,
|
||||||
123.52.0.0/14,
|
123.52.0.0/14,
|
||||||
@@ -3981,7 +3990,14 @@ set clashoo_china {
|
|||||||
140.179.0.0/16,
|
140.179.0.0/16,
|
||||||
140.205.0.0/16,
|
140.205.0.0/16,
|
||||||
140.206.0.0/15,
|
140.206.0.0/15,
|
||||||
140.210.0.0/16,
|
140.210.0.0/20,
|
||||||
|
140.210.16.0/21,
|
||||||
|
140.210.24.0/22,
|
||||||
|
140.210.28.0/23,
|
||||||
|
140.210.30.0/24,
|
||||||
|
140.210.32.0/19,
|
||||||
|
140.210.64.0/18,
|
||||||
|
140.210.128.0/17,
|
||||||
140.224.0.0/16,
|
140.224.0.0/16,
|
||||||
140.237.0.0/16,
|
140.237.0.0/16,
|
||||||
140.240.0.0/16,
|
140.240.0.0/16,
|
||||||
@@ -4214,6 +4230,7 @@ set clashoo_china {
|
|||||||
163.47.4.0/22,
|
163.47.4.0/22,
|
||||||
163.52.28.0/23,
|
163.52.28.0/23,
|
||||||
163.52.76.0/23,
|
163.52.76.0/23,
|
||||||
|
163.52.108.0/23,
|
||||||
163.53.0.0/20,
|
163.53.0.0/20,
|
||||||
163.53.36.0/22,
|
163.53.36.0/22,
|
||||||
163.53.40.0/21,
|
163.53.40.0/21,
|
||||||
|
|||||||
@@ -5,13 +5,13 @@
|
|||||||
include $(TOPDIR)/rules.mk
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
PKG_NAME:=dae
|
PKG_NAME:=dae
|
||||||
PKG_VERSION:=2026.09.06
|
PKG_VERSION:=2026.09.12
|
||||||
PKG_RELEASE:=2
|
PKG_RELEASE:=1
|
||||||
|
|
||||||
PKG_SOURCE:=dae-src-2026.09.06-80525dabf966.tar.gz
|
PKG_SOURCE:=dae-src-2026.09.12-187058462a1f.tar.gz
|
||||||
PKG_SOURCE_URL:=https://github.com/kenzok8/openwrt-daede/releases/download/dae-src
|
PKG_SOURCE_URL:=https://github.com/kenzok8/openwrt-daede/releases/download/dae-src
|
||||||
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
|
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
|
||||||
PKG_HASH:=80525dabf966403524f3eac4ca46bb520ae487177b77e4b7b4482d24c2aa923e
|
PKG_HASH:=187058462a1fd9eeb9885f4971ccf4bc81358533e71730d8509bd7968624c1c7
|
||||||
|
|
||||||
PKG_LICENSE:=AGPL-3.0-only
|
PKG_LICENSE:=AGPL-3.0-only
|
||||||
PKG_LICENSE_FILE:=LICENSE
|
PKG_LICENSE_FILE:=LICENSE
|
||||||
|
|||||||
@@ -5,13 +5,13 @@
|
|||||||
include $(TOPDIR)/rules.mk
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
PKG_NAME:=daed
|
PKG_NAME:=daed
|
||||||
PKG_VERSION:=2026.09.06
|
PKG_VERSION:=2026.09.12
|
||||||
PKG_RELEASE:=3
|
PKG_RELEASE:=1
|
||||||
|
|
||||||
PKG_SOURCE:=daed-src-2026.09.06-62f2e24ac52a.tar.gz
|
PKG_SOURCE:=daed-src-2026.09.12-a0181f729855.tar.gz
|
||||||
PKG_SOURCE_URL:=https://github.com/kenzok8/openwrt-daede/releases/download/daed-src
|
PKG_SOURCE_URL:=https://github.com/kenzok8/openwrt-daede/releases/download/daed-src
|
||||||
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
|
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
|
||||||
PKG_HASH:=62f2e24ac52a6897633d0a0ed43d5a2419164ae43fa26e5c6fe11b5fe973fa61
|
PKG_HASH:=a0181f7298552497ed193e683a54b1df77f2d5441524d61989f3e3e3cf6eac51
|
||||||
|
|
||||||
PKG_LICENSE:=AGPL-3.0-only MIT
|
PKG_LICENSE:=AGPL-3.0-only MIT
|
||||||
PKG_LICENSE_FILES:=LICENSE wing/LICENSE
|
PKG_LICENSE_FILES:=LICENSE wing/LICENSE
|
||||||
|
|||||||
|
After Width: | Height: | Size: 91 KiB |
|
After Width: | Height: | Size: 319 KiB |
|
After Width: | Height: | Size: 389 KiB |
|
Before Width: | Height: | Size: 640 KiB |
|
Before Width: | Height: | Size: 550 KiB |
|
Before Width: | Height: | Size: 547 KiB |
|
Before Width: | Height: | Size: 659 KiB |
|
Before Width: | Height: | Size: 650 KiB |
@@ -612,21 +612,46 @@ o:value("info", "Info")
|
|||||||
o:value("warn", "Warning")
|
o:value("warn", "Warning")
|
||||||
o:value("error", "Error")
|
o:value("error", "Error")
|
||||||
|
|
||||||
o = s:taboption("log", Flag, "advanced_log_feature", translate("Advanced log feature"), translate("For professionals only."))
|
o = s:taboption("log", DummyValue, "_node_log", translate("Log File"))
|
||||||
o.default = "0"
|
o.rawhtml = true
|
||||||
o = s:taboption("log", Flag, "sys_log", translate("Logging to system log"), translate("Logging to the system log for more advanced functions. For example, send logs to a dedicated log server."))
|
o.cfgvalue = function(t, n)
|
||||||
o:depends("advanced_log_feature", "1")
|
local log_file = api.TMP_PATH .. "/acl/default/global.log"
|
||||||
o.default = "0"
|
local log_url = api.url("get_redir_log") .. "?id=default"
|
||||||
o = s:taboption("log", Value, "persist_log_path", translate("Persist log file directory"), translate("The path to the directory used to store persist log files, the \"/\" at the end can be omitted. Leave it blank to disable this feature."))
|
local s = "<code>%s</code> " % log_file
|
||||||
o:depends({ ["advanced_log_feature"] = 1, ["sys_log"] = 0 })
|
if api.fs.access(log_file) then
|
||||||
o = s:taboption("log", Value, "log_event_filter", translate("Log Event Filter"), translate("Support regular expression."))
|
local btn = string.format(
|
||||||
o:depends("advanced_log_feature", "1")
|
'<input class="btn cbi-button cbi-button-apply" type="button" value="%s" onclick="window.open(\'%s\', \'_blank\')" />',
|
||||||
o = s:taboption("log", Value, "log_event_cmd", translate("Shell Command"), translate("Shell command to execute, replace log content with %s."))
|
translate("View Log"),
|
||||||
o:depends("advanced_log_feature", "1")
|
log_url
|
||||||
|
)
|
||||||
|
s = s .. btn
|
||||||
|
end
|
||||||
|
return s
|
||||||
|
end
|
||||||
|
o:depends("log_node", "1")
|
||||||
|
|
||||||
o = s:taboption("log", Flag, "log_chinadns_ng", translate("Enable") .. " ChinaDNS-NG " .. translate("Log"))
|
o = s:taboption("log", Flag, "log_chinadns_ng", translate("Enable") .. " ChinaDNS-NG " .. translate("Log"))
|
||||||
o.default = "0"
|
o.default = "0"
|
||||||
o.rmempty = false
|
o.rmempty = false
|
||||||
|
o:depends("dns_shunt", "chinadns-ng")
|
||||||
|
|
||||||
|
o = s:taboption("log", DummyValue, "_chinadns_ng_log", translate("Log File"))
|
||||||
|
o.rawhtml = true
|
||||||
|
o.cfgvalue = function(t, n)
|
||||||
|
local log_file = api.TMP_PATH .. "/acl/default/chinadns_ng.log"
|
||||||
|
local log_url = api.url("get_chinadns_log") .. "?flag=default"
|
||||||
|
local s = "<code>%s</code> " % log_file
|
||||||
|
if api.fs.access(log_file) then
|
||||||
|
local btn = string.format(
|
||||||
|
'<input class="btn cbi-button cbi-button-apply" type="button" value="%s" onclick="window.open(\'%s\', \'_blank\')" />',
|
||||||
|
translate("View Log"),
|
||||||
|
log_url
|
||||||
|
)
|
||||||
|
s = s .. btn
|
||||||
|
end
|
||||||
|
return s
|
||||||
|
end
|
||||||
|
o:depends("log_chinadns_ng", "1")
|
||||||
|
|
||||||
o = s:taboption("log", DummyValue, "_log_tips", " ")
|
o = s:taboption("log", DummyValue, "_log_tips", " ")
|
||||||
o.rawhtml = true
|
o.rawhtml = true
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ local GLOBAL = {
|
|||||||
|
|
||||||
local xray_version = api.get_app_version("xray")
|
local xray_version = api.get_app_version("xray")
|
||||||
|
|
||||||
local xray_min_version = "26.3.27"
|
local xray_min_version = "26.7.11"
|
||||||
|
|
||||||
local function get_domain_excluded()
|
local function get_domain_excluded()
|
||||||
local path = string.format("/usr/share/%s/rules/domains_excluded", api.c_config)
|
local path = string.format("/usr/share/%s/rules/domains_excluded", api.c_config)
|
||||||
@@ -58,7 +58,7 @@ function gen_outbound(flag, node, tag, proxy_table)
|
|||||||
if node.type ~= "Xray" then
|
if node.type ~= "Xray" then
|
||||||
if node.type == "Socks" then
|
if node.type == "Socks" then
|
||||||
node.protocol = "socks"
|
node.protocol = "socks"
|
||||||
node.transport = "tcp"
|
node.transport = "raw"
|
||||||
else
|
else
|
||||||
local new_port
|
local new_port
|
||||||
if run_socks_instance then
|
if run_socks_instance then
|
||||||
@@ -95,7 +95,7 @@ function gen_outbound(flag, node, tag, proxy_table)
|
|||||||
if new_port then
|
if new_port then
|
||||||
node = {}
|
node = {}
|
||||||
node.protocol = "socks"
|
node.protocol = "socks"
|
||||||
node.transport = "tcp"
|
node.transport = "raw"
|
||||||
node.address = "127.0.0.1"
|
node.address = "127.0.0.1"
|
||||||
node.port = new_port
|
node.port = new_port
|
||||||
end
|
end
|
||||||
@@ -172,7 +172,7 @@ function gen_outbound(flag, node, tag, proxy_table)
|
|||||||
} or nil,
|
} or nil,
|
||||||
dialerProxy = dialer_proxy_tag,
|
dialerProxy = dialer_proxy_tag,
|
||||||
},
|
},
|
||||||
[(api.compare_versions(xray_version, "<", "26.7.11")) and "network" or "method"] = node.transport, -- Todo: Remove version check and "network"
|
method = node.transport,
|
||||||
security = node.stream_security,
|
security = node.stream_security,
|
||||||
tlsSettings = (node.stream_security == "tls") and {
|
tlsSettings = (node.stream_security == "tls") and {
|
||||||
serverName = node.tls_serverName,
|
serverName = node.tls_serverName,
|
||||||
@@ -499,7 +499,7 @@ function gen_config_server(node)
|
|||||||
local settings = nil
|
local settings = nil
|
||||||
local routing = nil
|
local routing = nil
|
||||||
local outbounds = {
|
local outbounds = {
|
||||||
{ protocol = "freedom", tag = "direct", settings = { finalRules = {{ action = "allow" }}}}, { protocol = "blackhole", tag = "blocked" }
|
{ protocol = "freedom", tag = "direct", finalRules = {{ action = "allow" }}}, { protocol = "blackhole", tag = "blocked" }
|
||||||
}
|
}
|
||||||
|
|
||||||
local users = node.users or {}
|
local users = node.users or {}
|
||||||
@@ -647,9 +647,7 @@ function gen_config_server(node)
|
|||||||
interface = node.outbound_node_iface
|
interface = node.outbound_node_iface
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
settings = {
|
finalRules = {{ action = "allow" }}
|
||||||
finalRules = {{ action = "allow" }}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
sys.call(string.format("mkdir -p %s && touch %s/%s", api.TMP_IFACE_PATH, api.TMP_IFACE_PATH, node.outbound_node_iface))
|
sys.call(string.format("mkdir -p %s && touch %s/%s", api.TMP_IFACE_PATH, api.TMP_IFACE_PATH, node.outbound_node_iface))
|
||||||
else
|
else
|
||||||
@@ -691,7 +689,7 @@ function gen_config_server(node)
|
|||||||
protocol = node.protocol,
|
protocol = node.protocol,
|
||||||
settings = settings,
|
settings = settings,
|
||||||
streamSettings = {
|
streamSettings = {
|
||||||
[(api.compare_versions(xray_version, "<", "26.7.11")) and "network" or "method"] = node.transport, -- Todo: Remove version check and "network"
|
method = node.transport,
|
||||||
security = "none",
|
security = "none",
|
||||||
tlsSettings = ("1" == node.tls) and {
|
tlsSettings = ("1" == node.tls) and {
|
||||||
disableSystemRoot = false,
|
disableSystemRoot = false,
|
||||||
@@ -873,9 +871,6 @@ function gen_config_server(node)
|
|||||||
config.outbounds[index][k] = nil
|
config.outbounds[index][k] = nil
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
if value.protocol == "freedom" and api.compare_versions(xray_version, "<", "26.5.3") then -- Todo is to remove it
|
|
||||||
value.settings = nil
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
return config
|
return config
|
||||||
@@ -1332,9 +1327,7 @@ function gen_config(var)
|
|||||||
interface = node.iface
|
interface = node.iface
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
settings = (api.compare_versions(xray_version, ">", "26.4.25")) and { -- Todo: Remove version check
|
finalRules = {{ action = "allow" }}
|
||||||
finalRules = {{ action = "allow" }}
|
|
||||||
} or nil
|
|
||||||
}
|
}
|
||||||
sys.call(string.format("mkdir -p %s && touch %s/%s", api.TMP_IFACE_PATH, api.TMP_IFACE_PATH, node.iface))
|
sys.call(string.format("mkdir -p %s && touch %s/%s", api.TMP_IFACE_PATH, api.TMP_IFACE_PATH, node.iface))
|
||||||
end
|
end
|
||||||
@@ -1818,11 +1811,10 @@ function gen_config(var)
|
|||||||
sockopt = { dialerProxy = (dns_outbound_tag ~= "blackhole") and dns_outbound_tag or "direct" }
|
sockopt = { dialerProxy = (dns_outbound_tag ~= "blackhole") and dns_outbound_tag or "direct" }
|
||||||
} or nil,
|
} or nil,
|
||||||
settings = {
|
settings = {
|
||||||
address = (chn_list ~= "proxy") and "8.8.8.8" or "223.5.5.5",
|
rewriteAddress = (chn_list ~= "proxy") and "8.8.8.8" or "223.5.5.5",
|
||||||
port = 53,
|
rewritePort = 53,
|
||||||
network = "tcp",
|
rewriteNetwork = "tcp",
|
||||||
nonIPQuery = (api.compare_versions(xray_version, "<", "26.4.25")) and "reject" or nil, -- Todo is to remove it
|
rules = {}
|
||||||
rules = (api.compare_versions(xray_version, ">", "26.4.17")) and {} or nil
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2046,9 +2038,7 @@ function gen_config(var)
|
|||||||
local direct_outbound = {
|
local direct_outbound = {
|
||||||
protocol = "freedom",
|
protocol = "freedom",
|
||||||
tag = "direct",
|
tag = "direct",
|
||||||
settings = (api.compare_versions(xray_version, ">", "26.4.25")) and { -- Todo: Remove version check
|
finalRules = {{ action = "allow" }},
|
||||||
finalRules = {{ action = "allow" }}
|
|
||||||
} or nil,
|
|
||||||
streamSettings = {
|
streamSettings = {
|
||||||
sockopt = {
|
sockopt = {
|
||||||
mark = 255,
|
mark = 255,
|
||||||
@@ -2152,7 +2142,7 @@ function gen_proto_config(var)
|
|||||||
local outbound = {
|
local outbound = {
|
||||||
protocol = server_proto,
|
protocol = server_proto,
|
||||||
streamSettings = {
|
streamSettings = {
|
||||||
network = "tcp",
|
method = "raw",
|
||||||
security = "none"
|
security = "none"
|
||||||
},
|
},
|
||||||
settings = {
|
settings = {
|
||||||
@@ -2177,10 +2167,10 @@ function gen_proto_config(var)
|
|||||||
table.insert(outbounds, {
|
table.insert(outbounds, {
|
||||||
protocol = "freedom",
|
protocol = "freedom",
|
||||||
tag = "direct",
|
tag = "direct",
|
||||||
settings = (api.compare_versions(xray_version, ">", "26.4.25")) and { -- Todo: Remove version check
|
finalRules = {{ action = "allow" }},
|
||||||
finalRules = {{ action = "allow" }}
|
streamSettings = {
|
||||||
} or nil,
|
sockopt = {mark = 255}
|
||||||
sockopt = {mark = 255}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
local config = {
|
local config = {
|
||||||
@@ -2192,7 +2182,10 @@ function gen_proto_config(var)
|
|||||||
-- 传出连接
|
-- 传出连接
|
||||||
outbounds = outbounds,
|
outbounds = outbounds,
|
||||||
-- 路由
|
-- 路由
|
||||||
routing = routing
|
routing = routing,
|
||||||
|
version = {
|
||||||
|
min = xray_min_version
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return jsonc.stringify(config, 1)
|
return jsonc.stringify(config, 1)
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1643,36 +1643,6 @@ msgstr "启用节点日志"
|
|||||||
msgid "Log Level"
|
msgid "Log Level"
|
||||||
msgstr "日志等级"
|
msgstr "日志等级"
|
||||||
|
|
||||||
msgid "Advanced log feature"
|
|
||||||
msgstr "高级日志功能"
|
|
||||||
|
|
||||||
msgid "For professionals only."
|
|
||||||
msgstr "仅限专业人士使用。"
|
|
||||||
|
|
||||||
msgid "Persist log file directory"
|
|
||||||
msgstr "持久性日志文件目录"
|
|
||||||
|
|
||||||
msgid "The path to the directory used to store persist log files, the \"/\" at the end can be omitted. Leave it blank to disable this feature."
|
|
||||||
msgstr "用来存储持久性日志文件的目录路径,末尾的 “/” 可以省略。留空以禁用此功能。"
|
|
||||||
|
|
||||||
msgid "Logging to system log"
|
|
||||||
msgstr "记录到系统日志"
|
|
||||||
|
|
||||||
msgid "Logging to the system log for more advanced functions. For example, send logs to a dedicated log server."
|
|
||||||
msgstr "将日志记录到系统日志,以实现更加高级的功能。例如,把日志发送到专门的日志服务器。"
|
|
||||||
|
|
||||||
msgid "Log Event Filter"
|
|
||||||
msgstr "日志事件过滤器"
|
|
||||||
|
|
||||||
msgid "Support regular expression."
|
|
||||||
msgstr "支持正则表达式。"
|
|
||||||
|
|
||||||
msgid "Shell Command"
|
|
||||||
msgstr "Shell 命令"
|
|
||||||
|
|
||||||
msgid "Shell command to execute, replace log content with %s."
|
|
||||||
msgstr "要执行的 Shell 命令,用 %s 代替日志内容。"
|
|
||||||
|
|
||||||
msgid "Not enabled log"
|
msgid "Not enabled log"
|
||||||
msgstr "未启用日志"
|
msgstr "未启用日志"
|
||||||
|
|
||||||
|
|||||||
@@ -1,17 +1,12 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
# Devices without a hardware RTC boot with a wrong system clock: sysfixtime can
|
[ "$ACTION" = "step" ] || exit 0
|
||||||
# only restore the mtime of the newest file under /etc, so the clock is usually
|
|
||||||
# hours behind after a cold boot. passwall is then started by
|
|
||||||
# /etc/hotplug.d/iface/98-passwall on ifup, which typically happens before NTP
|
|
||||||
# has corrected the time, and time-sensitive handshakes (VMess AEAD, TLS) fail.
|
|
||||||
#
|
|
||||||
# Nothing restarts passwall once the clock is corrected, so it stays broken
|
|
||||||
# until the user restarts it manually. Restart once when ntpd reports that the
|
|
||||||
# time is valid -- the same approach dnsmasq uses for DNSSEC in
|
|
||||||
# /etc/hotplug.d/ntp/25-dnsmasqsec.
|
|
||||||
|
|
||||||
[ "$ACTION" = "stratum" ] || exit 0
|
offset=${offset#-}
|
||||||
|
offset=${offset%.*}
|
||||||
|
|
||||||
|
# Skip service restart if the time adjustment is less than 120 seconds.
|
||||||
|
[ "$offset" -lt 120 ] && exit 0
|
||||||
|
|
||||||
. /usr/share/passwall/utils.sh
|
. /usr/share/passwall/utils.sh
|
||||||
|
|
||||||
@@ -23,5 +18,5 @@ NTP_LOCK_FILE="${LOCK_PATH}/${CONFIG}_ntp.lock"
|
|||||||
echo $$ > ${NTP_LOCK_FILE}
|
echo $$ > ${NTP_LOCK_FILE}
|
||||||
|
|
||||||
/etc/init.d/${CONFIG} restart >/dev/null 2>&1 &
|
/etc/init.d/${CONFIG} restart >/dev/null 2>&1 &
|
||||||
logger -p notice -t network -s "${CONFIG}: restart after NTP time became valid"
|
logger -p notice -t network -s "${CONFIG}: restart after NTP time step (${offset}s)"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -183,8 +183,6 @@ test_auto_switch() {
|
|||||||
start() {
|
start() {
|
||||||
id=$1
|
id=$1
|
||||||
LOCK_FILE=${LOCK_PATH}/${CONFIG}_socks_auto_switch_${id}.lock
|
LOCK_FILE=${LOCK_PATH}/${CONFIG}_socks_auto_switch_${id}.lock
|
||||||
LOG_EVENT_FILTER=$(uci -q get "${CONFIG}.global[0].log_event_filter" 2>/dev/null)
|
|
||||||
LOG_EVENT_CMD=$(uci -q get "${CONFIG}.global[0].log_event_cmd" 2>/dev/null)
|
|
||||||
main_node=$(config_n_get $id node)
|
main_node=$(config_n_get $id node)
|
||||||
socks_port=$(config_n_get $id port 0)
|
socks_port=$(config_n_get $id port 0)
|
||||||
delay=$(config_n_get $id autoswitch_testing_time 30)
|
delay=$(config_n_get $id autoswitch_testing_time 30)
|
||||||
|
|||||||
@@ -480,25 +480,9 @@ ln_run() {
|
|||||||
echolog " - 找不到 ${ln_name},无法启动..."
|
echolog " - 找不到 ${ln_name},无法启动..."
|
||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
[ "${output}" != "/dev/null" ] && [ -n "$(echo "${output}" | grep -E "default|socks_")" ] && [ "${ln_name}" != "chinadns-ng" ] && {
|
|
||||||
local persist_log_path=$(config_n_get @global[0] persist_log_path)
|
${file_func:-echolog " - ${ln_name}"} "$@" >${output} 2>&1 &
|
||||||
local sys_log=$(config_n_get @global[0] sys_log "0")
|
|
||||||
}
|
|
||||||
if [ -z "$persist_log_path" ] && [ "$sys_log" != "1" ]; then
|
|
||||||
${file_func:-echolog " - ${ln_name}"} "$@" >${output} 2>&1 &
|
|
||||||
else
|
|
||||||
if [ -n "${persist_log_path}" ]; then
|
|
||||||
mkdir -p ${persist_log_path}
|
|
||||||
local log_file=${persist_log_path}/passwall_global_${ln_name}_$(date '+%F').log
|
|
||||||
echolog "记录到持久性日志文件:${log_file}"
|
|
||||||
${file_func:-echolog " - ${ln_name}"} "$@" >> ${log_file} 2>&1 &
|
|
||||||
sys_log=0
|
|
||||||
fi
|
|
||||||
if [ "${sys_log}" = "1" ]; then
|
|
||||||
echolog "记录 ${ln_name}_global 到系统日志"
|
|
||||||
${file_func:-echolog " - ${ln_name}"} "$@" 2>&1 | logger -t PASSWALL_global_${ln_name} &
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
[ "$NO_REC_PROCESS" = "1" ] && return
|
[ "$NO_REC_PROCESS" = "1" ] && return
|
||||||
process_count=$(ls $TMP_SCRIPT_FUNC_PATH | wc -l)
|
process_count=$(ls $TMP_SCRIPT_FUNC_PATH | wc -l)
|
||||||
process_count=$((process_count + 1))
|
process_count=$((process_count + 1))
|
||||||
|
|||||||
@@ -80,7 +80,7 @@ export function load_profile() {
|
|||||||
let result = {};
|
let result = {};
|
||||||
const process = popen('yq -M -p yaml -o json /etc/nikki/run/config.yaml');
|
const process = popen('yq -M -p yaml -o json /etc/nikki/run/config.yaml');
|
||||||
if (process) {
|
if (process) {
|
||||||
result = json(process);
|
result = json(process.read('all'));
|
||||||
process.close();
|
process.close();
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ define Download/geosite
|
|||||||
HASH:=35ed26a24cafa1256bd7261414224b7bcef5c944cea7760e172b030a8b266450
|
HASH:=35ed26a24cafa1256bd7261414224b7bcef5c944cea7760e172b030a8b266450
|
||||||
endef
|
endef
|
||||||
|
|
||||||
GEOSITE_IRAN_VER:=202609070121
|
GEOSITE_IRAN_VER:=202609140147
|
||||||
GEOSITE_IRAN_FILE:=iran.dat.$(GEOSITE_IRAN_VER)
|
GEOSITE_IRAN_FILE:=iran.dat.$(GEOSITE_IRAN_VER)
|
||||||
define Download/geosite-ir
|
define Download/geosite-ir
|
||||||
URL:=https://github.com/bootmortis/iran-hosted-domains/releases/download/$(GEOSITE_IRAN_VER)/
|
URL:=https://github.com/bootmortis/iran-hosted-domains/releases/download/$(GEOSITE_IRAN_VER)/
|
||||||
|
|||||||