mirror of
https://github.com/kiddin9/op-packages.git
synced 2026-10-30 18:55:13 +08:00
🎉 Sync 2026-08-28 01:19:01
This commit is contained in:
1 parent
3ebef8b234
commit
a0bd643038
27 files changed
+202
-141
No files matched your search
+4
-4
@@ -5,10 +5,10 @@
|
|||||||
include $(TOPDIR)/rules.mk
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
PKG_NAME:=dae
|
PKG_NAME:=dae
|
||||||
PKG_VERSION:=2026.08.21
|
PKG_VERSION:=2026.08.26
|
||||||
PKG_RELEASE:=37
|
PKG_RELEASE:=38
|
||||||
|
|
||||||
PKG_SOURCE:=dae-src-2026.08.21-8138f66f2c6d.tar.gz
|
PKG_SOURCE:=dae-src-2026.08.26-936105a87a65.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:=skip
|
PKG_HASH:=skip
|
||||||
@@ -39,7 +39,7 @@ GO_PKG_LDFLAGS:= \
|
|||||||
GO_PKG_LDFLAGS_X:= \
|
GO_PKG_LDFLAGS_X:= \
|
||||||
$(GO_PKG)/cmd.Version=$(PKG_VERSION) \
|
$(GO_PKG)/cmd.Version=$(PKG_VERSION) \
|
||||||
$(GO_PKG)/common/consts.MaxMatchSetLen_=1024
|
$(GO_PKG)/common/consts.MaxMatchSetLen_=1024
|
||||||
GO_PKG_TAGS:=trace
|
GO_PKG_TAGS:=trace,timetzdata
|
||||||
|
|
||||||
include $(INCLUDE_DIR)/package.mk
|
include $(INCLUDE_DIR)/package.mk
|
||||||
include $(INCLUDE_DIR)/bpf.mk
|
include $(INCLUDE_DIR)/bpf.mk
|
||||||
|
|||||||
+1
-1
@@ -27,7 +27,7 @@ start_service() {
|
|||||||
config_get log_maxsize "config" "log_maxsize" "1"
|
config_get log_maxsize "config" "log_maxsize" "1"
|
||||||
|
|
||||||
procd_open_instance "$CONF"
|
procd_open_instance "$CONF"
|
||||||
procd_set_param env DAE_LOCATION_ASSET="/usr/share/v2ray"
|
procd_set_param env DAE_LOCATION_ASSET="/usr/share/v2ray" TZ="$(uci -q get system.@system[0].zonename)"
|
||||||
procd_set_param command "$PROG" run
|
procd_set_param command "$PROG" run
|
||||||
procd_append_param command --config "$config_file"
|
procd_append_param command --config "$config_file"
|
||||||
procd_append_param command --disable-timestamp
|
procd_append_param command --disable-timestamp
|
||||||
|
|||||||
+3
-3
@@ -5,10 +5,10 @@
|
|||||||
include $(TOPDIR)/rules.mk
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
PKG_NAME:=daed
|
PKG_NAME:=daed
|
||||||
PKG_VERSION:=2026.08.21
|
PKG_VERSION:=2026.08.26
|
||||||
PKG_RELEASE:=48
|
PKG_RELEASE:=49
|
||||||
|
|
||||||
PKG_SOURCE:=daed-src-2026.08.21-aeef51da973f.tar.gz
|
PKG_SOURCE:=daed-src-2026.08.26-003da3d0a669.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:=skip
|
PKG_HASH:=skip
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ include $(TOPDIR)/rules.mk
|
|||||||
|
|
||||||
PKG_NAME:=luci-app-daede
|
PKG_NAME:=luci-app-daede
|
||||||
PKG_VERSION:=1.14.7
|
PKG_VERSION:=1.14.7
|
||||||
PKG_RELEASE:=40
|
PKG_RELEASE:=41
|
||||||
PKG_MAINTAINER:=kenzok8
|
PKG_MAINTAINER:=kenzok8
|
||||||
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)
|
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)
|
||||||
|
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ const CSS = [
|
|||||||
'.dd-log-pane .dd-line.dd-hidden{display:none}',
|
'.dd-log-pane .dd-line.dd-hidden{display:none}',
|
||||||
'.dd-log-pane .dd-empty{opacity:.5;font-style:italic}',
|
'.dd-log-pane .dd-empty{opacity:.5;font-style:italic}',
|
||||||
/* 简化后的字段视觉 */
|
/* 简化后的字段视觉 */
|
||||||
'.dd-log-pane .dd-ts{color:#6b7480;margin-right:8px}',
|
'.dd-log-pane .dd-ts{color:#6b7480;margin-right:8px;white-space:nowrap}',
|
||||||
'.dd-log-pane .dd-lvl{display:inline-block;min-width:38px;padding:0 5px;margin-right:8px;border-radius:3px;font-size:10px;font-weight:700;letter-spacing:.4px;text-align:center;vertical-align:1px}',
|
'.dd-log-pane .dd-lvl{display:inline-block;min-width:38px;padding:0 5px;margin-right:8px;border-radius:3px;font-size:10px;font-weight:700;letter-spacing:.4px;text-align:center;vertical-align:1px}',
|
||||||
'.dd-log-pane .dd-lvl-info{color:#7fc7a8;background:rgba(127,199,168,.08)}',
|
'.dd-log-pane .dd-lvl-info{color:#7fc7a8;background:rgba(127,199,168,.08)}',
|
||||||
'.dd-log-pane .dd-lvl-warn{color:#e8b95a;background:rgba(232,185,90,.10)}',
|
'.dd-log-pane .dd-lvl-warn{color:#e8b95a;background:rgba(232,185,90,.10)}',
|
||||||
@@ -53,6 +53,7 @@ const CSS = [
|
|||||||
|
|
||||||
/* 拆字段:time="May 25 07:04:59" level=info msg="..." key=val key="val with space" ... */
|
/* 拆字段:time="May 25 07:04:59" level=info msg="..." key=val key="val with space" ... */
|
||||||
const RE_LINE = /^time="([^"]*)"\s+level=(\w+)\s+msg=(?:"((?:[^"\\]|\\.)*)"|(\S+))\s*(.*)$/;
|
const RE_LINE = /^time="([^"]*)"\s+level=(\w+)\s+msg=(?:"((?:[^"\\]|\\.)*)"|(\S+))\s*(.*)$/;
|
||||||
|
const RE_PREFIXED_LINE = /^\[([^\]]+)\]\s+(DEBUG|INFO|WARN(?:ING)?|ERROR|FATAL|PANIC)\s*(.*)$/i;
|
||||||
|
|
||||||
function detectLevel(line) {
|
function detectLevel(line) {
|
||||||
// daed/dae logs use lvl=info / [INFO] / level=warning style
|
// daed/dae logs use lvl=info / [INFO] / level=warning style
|
||||||
@@ -65,22 +66,29 @@ function detectLevel(line) {
|
|||||||
return 'dd-error';
|
return 'dd-error';
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 简化时间戳并按北京时间显示:
|
/* 格式化时间戳并按北京时间显示:
|
||||||
* - daed 默认输出 UTC ISO 8601 (e.g. "2026-05-28T19:07:54Z"),转成北京时间
|
* - daed 默认输出 UTC ISO 8601 (e.g. "2026-05-28T19:07:54Z"),转成北京时间
|
||||||
* - 旧 logrus 短格式 (e.g. "May 25 07:04:59") 无时区信息,原样提取
|
* - 新格式和旧 logrus 短格式无时区信息,保留原始完整日期时间
|
||||||
*/
|
*/
|
||||||
function shortTs(raw) {
|
function formatTs(raw) {
|
||||||
if (!raw) return raw;
|
if (!raw) return raw;
|
||||||
if (/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:?\d{2})$/.test(raw)) {
|
if (/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:?\d{2})$/.test(raw)) {
|
||||||
const d = new Date(raw);
|
const d = new Date(raw);
|
||||||
if (!isNaN(d.getTime())) {
|
if (!isNaN(d.getTime())) {
|
||||||
const beijing = new Date(d.getTime() + 8 * 60 * 60 * 1000);
|
const beijing = new Date(d.getTime() + 8 * 60 * 60 * 1000);
|
||||||
const pad = n => String(n).padStart(2, '0');
|
const pad = n => String(n).padStart(2, '0');
|
||||||
return pad(beijing.getUTCHours()) + ':' + pad(beijing.getUTCMinutes()) + ':' + pad(beijing.getUTCSeconds());
|
return [
|
||||||
|
beijing.getUTCFullYear(),
|
||||||
|
pad(beijing.getUTCMonth() + 1),
|
||||||
|
pad(beijing.getUTCDate())
|
||||||
|
].join('-') + ' ' + [
|
||||||
|
pad(beijing.getUTCHours()),
|
||||||
|
pad(beijing.getUTCMinutes()),
|
||||||
|
pad(beijing.getUTCSeconds())
|
||||||
|
].join(':');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
const m = raw.match(/(\d{2}:\d{2}:\d{2})/);
|
return raw;
|
||||||
return m ? m[1] : raw;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function lvlShort(level) {
|
function lvlShort(level) {
|
||||||
@@ -97,22 +105,42 @@ function lvlClass(level) {
|
|||||||
return 'dd-lvl-error';
|
return 'dd-lvl-error';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function parseLine(line) {
|
||||||
|
let m = line.match(RE_LINE);
|
||||||
|
if (m) {
|
||||||
|
return {
|
||||||
|
ts: formatTs(m[1]),
|
||||||
|
lvl: m[2],
|
||||||
|
msg: m[3] !== undefined ? m[3] : (m[4] || ''),
|
||||||
|
kv: (m[5] || '').trim()
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
m = line.match(RE_PREFIXED_LINE);
|
||||||
|
if (!m) return null;
|
||||||
|
|
||||||
|
const body = m[3] || '';
|
||||||
|
const kvStart = body.search(/(?:^|\s)(?=[A-Za-z_][\w.-]*=)/);
|
||||||
|
return {
|
||||||
|
ts: formatTs(m[1]),
|
||||||
|
lvl: m[2],
|
||||||
|
msg: kvStart === -1 ? body : body.slice(0, kvStart).trimEnd(),
|
||||||
|
kv: kvStart === -1 ? '' : body.slice(kvStart).trim()
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
function buildLine(ln) {
|
function buildLine(ln) {
|
||||||
const cls = detectLevel(ln);
|
const cls = detectLevel(ln);
|
||||||
const m = ln.match(RE_LINE);
|
const parsed = parseLine(ln);
|
||||||
if (!m) {
|
if (!parsed) {
|
||||||
return E('div', { 'class': 'dd-line ' + cls }, ln);
|
return E('div', { 'class': 'dd-line ' + cls }, ln);
|
||||||
}
|
}
|
||||||
const ts = shortTs(m[1]);
|
|
||||||
const lvl = m[2];
|
|
||||||
const msg = m[3] !== undefined ? m[3] : (m[4] || '');
|
|
||||||
const kv = (m[5] || '').trim();
|
|
||||||
const parts = [
|
const parts = [
|
||||||
E('span', { 'class': 'dd-ts' }, ts),
|
E('span', { 'class': 'dd-ts' }, parsed.ts),
|
||||||
E('span', { 'class': 'dd-lvl ' + lvlClass(lvl) }, lvlShort(lvl)),
|
E('span', { 'class': 'dd-lvl ' + lvlClass(parsed.lvl) }, lvlShort(parsed.lvl)),
|
||||||
E('span', { 'class': 'dd-msg' }, msg)
|
E('span', { 'class': 'dd-msg' }, parsed.msg)
|
||||||
];
|
];
|
||||||
if (kv) parts.push(E('span', { 'class': 'dd-kv' }, kv));
|
if (parsed.kv) parts.push(E('span', { 'class': 'dd-kv' }, parsed.kv));
|
||||||
return E('div', { 'class': 'dd-line ' + cls }, parts);
|
return E('div', { 'class': 'dd-line ' + cls }, parts);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -53,6 +53,7 @@ DAE_INIT="/etc/init.d/dae"
|
|||||||
if [ -f "$DAE_INIT" ]; then
|
if [ -f "$DAE_INIT" ]; then
|
||||||
sed -i 's/--disable-timestamp//' "$DAE_INIT"
|
sed -i 's/--disable-timestamp//' "$DAE_INIT"
|
||||||
sed -i '/procd_append_param command *$/d' "$DAE_INIT"
|
sed -i '/procd_append_param command *$/d' "$DAE_INIT"
|
||||||
|
sed -i 's|procd_set_param env DAE_LOCATION_ASSET="/usr/share/v2ray".*|procd_set_param env DAE_LOCATION_ASSET="/usr/share/v2ray" TZ="$(uci -q get system.@system[0].zonename)"|' "$DAE_INIT"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# dae expects geoip.dat / geosite.dat under /usr/share/dae/;
|
# dae expects geoip.dat / geosite.dat under /usr/share/dae/;
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ include $(TOPDIR)/rules.mk
|
|||||||
|
|
||||||
PKG_NAME:=luci-app-passwall
|
PKG_NAME:=luci-app-passwall
|
||||||
PKG_VERSION:=26.8.26
|
PKG_VERSION:=26.8.26
|
||||||
PKG_RELEASE:=247
|
PKG_RELEASE:=248
|
||||||
PKG_PO_VERSION:=$(PKG_VERSION)
|
PKG_PO_VERSION:=$(PKG_VERSION)
|
||||||
|
|
||||||
PKG_CONFIG_DEPENDS:= \
|
PKG_CONFIG_DEPENDS:= \
|
||||||
|
|||||||
@@ -829,6 +829,8 @@ function rollback_rules()
|
|||||||
if geo2rule == "1" and rules ~= "" then
|
if geo2rule == "1" and rules ~= "" then
|
||||||
luci.sys.call("lua /usr/share/passwall/rule_update.lua log '" .. rules .. "' rollback > /dev/null")
|
luci.sys.call("lua /usr/share/passwall/rule_update.lua log '" .. rules .. "' rollback > /dev/null")
|
||||||
end
|
end
|
||||||
|
uci_set("@global[0]", "flush_set", "1")
|
||||||
|
uci_save(true)
|
||||||
http_write_json_ok()
|
http_write_json_ok()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -402,6 +402,7 @@ end
|
|||||||
|
|
||||||
---- DNS Forward
|
---- DNS Forward
|
||||||
o = s:option(Value, "remote_dns", translate("Remote DNS"))
|
o = s:option(Value, "remote_dns", translate("Remote DNS"))
|
||||||
|
o.datatype = "or(ipaddr,ipaddrport(1))"
|
||||||
o.default = "1.1.1.1"
|
o.default = "1.1.1.1"
|
||||||
o:value("1.1.1.1", "1.1.1.1 (CloudFlare)")
|
o:value("1.1.1.1", "1.1.1.1 (CloudFlare)")
|
||||||
o:value("1.1.1.2", "1.1.1.2 (CloudFlare-Security)")
|
o:value("1.1.1.2", "1.1.1.2 (CloudFlare-Security)")
|
||||||
|
|||||||
@@ -213,7 +213,7 @@ o:depends({dns_shunt = "dnsmasq"})
|
|||||||
o:depends({dns_shunt = "chinadns-ng"})
|
o:depends({dns_shunt = "chinadns-ng"})
|
||||||
|
|
||||||
o = s:taboption("DNS", Value, "direct_dns", translate("Direct DNS"))
|
o = s:taboption("DNS", Value, "direct_dns", translate("Direct DNS"))
|
||||||
o.datatype = "or(ipaddr,ipaddrport)"
|
o.datatype = "or(ipaddr,ipaddrport(1))"
|
||||||
o.default = "223.5.5.5"
|
o.default = "223.5.5.5"
|
||||||
o:value("223.5.5.5")
|
o:value("223.5.5.5")
|
||||||
o:value("223.6.6.6")
|
o:value("223.6.6.6")
|
||||||
@@ -389,7 +389,7 @@ o:depends({dns_mode = "dns2socks"})
|
|||||||
|
|
||||||
---- DNS Forward
|
---- DNS Forward
|
||||||
o = s:taboption("DNS", Value, "remote_dns", translate("Remote DNS"))
|
o = s:taboption("DNS", Value, "remote_dns", translate("Remote DNS"))
|
||||||
o.datatype = "or(ipaddr,ipaddrport)"
|
o.datatype = "or(ipaddr,ipaddrport(1))"
|
||||||
o.default = "1.1.1.1"
|
o.default = "1.1.1.1"
|
||||||
o:value("1.1.1.1", "1.1.1.1 (CloudFlare)")
|
o:value("1.1.1.1", "1.1.1.1 (CloudFlare)")
|
||||||
o:value("1.1.1.2", "1.1.1.2 (CloudFlare-Security)")
|
o:value("1.1.1.2", "1.1.1.2 (CloudFlare-Security)")
|
||||||
|
|||||||
@@ -69,13 +69,6 @@ local function convert_geofile()
|
|||||||
end
|
end
|
||||||
local function convert(file_path, prefix, tags)
|
local function convert(file_path, prefix, tags)
|
||||||
if next(tags) and fs.access(file_path) then
|
if next(tags) and fs.access(file_path) then
|
||||||
local md5_file = GEO_VAR.TO_SRS_PATH .. prefix .. ".dat.md5"
|
|
||||||
local new_md5 = sys.exec("md5sum " .. file_path .. " 2>/dev/null | awk '{print $1}'"):gsub("\n", "")
|
|
||||||
local old_md5 = sys.exec("[ -f " .. md5_file .. " ] && head -n 1 " .. md5_file .. " | tr -d ' \t\n' || echo ''")
|
|
||||||
if new_md5 ~= "" and new_md5 ~= old_md5 then
|
|
||||||
sys.call("printf '%s' " .. new_md5 .. " > " .. md5_file)
|
|
||||||
sys.call("rm -rf " .. GEO_VAR.TO_SRS_PATH .. prefix .. "-*.srs" )
|
|
||||||
end
|
|
||||||
for k in pairs(tags) do
|
for k in pairs(tags) do
|
||||||
geo_convert_srs({["geo_path"] = file_path, ["prefix"] = prefix, ["rule_name"] = k})
|
geo_convert_srs({["geo_path"] = file_path, ["prefix"] = prefix, ["rule_name"] = k})
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1664,8 +1664,12 @@ function gen_config(var)
|
|||||||
_direct_dns.port = port
|
_direct_dns.port = port
|
||||||
_direct_dns.address = direct_dns_udp_server
|
_direct_dns.address = direct_dns_udp_server
|
||||||
elseif direct_dns_tcp_server then
|
elseif direct_dns_tcp_server then
|
||||||
|
if api.is_ipv6(direct_dns_tcp_server) then
|
||||||
|
direct_dns_tcp_server = api.get_ipv6_full(direct_dns_tcp_server)
|
||||||
|
end
|
||||||
local port = tonumber(direct_dns_port) or 53
|
local port = tonumber(direct_dns_port) or 53
|
||||||
_direct_dns.address = "tcp://" .. direct_dns_tcp_server .. ":" .. port
|
_direct_dns.address = "tcp://" .. direct_dns_tcp_server .. ":" .. port
|
||||||
|
_direct_dns.port = port
|
||||||
end
|
end
|
||||||
|
|
||||||
if COMMON.default_outbound_tag == "direct" then
|
if COMMON.default_outbound_tag == "direct" then
|
||||||
@@ -1697,7 +1701,11 @@ function gen_config(var)
|
|||||||
_remote_dns.port = tonumber(remote_dns_udp_port) or 53
|
_remote_dns.port = tonumber(remote_dns_udp_port) or 53
|
||||||
|
|
||||||
elseif remote_dns_tcp_server then
|
elseif remote_dns_tcp_server then
|
||||||
|
if api.is_ipv6(remote_dns_tcp_server) then
|
||||||
|
remote_dns_tcp_server = api.get_ipv6_full(remote_dns_tcp_server)
|
||||||
|
end
|
||||||
_remote_dns.address = "tcp://" .. remote_dns_tcp_server .. ":" .. tonumber(remote_dns_tcp_port) or 53
|
_remote_dns.address = "tcp://" .. remote_dns_tcp_server .. ":" .. tonumber(remote_dns_tcp_port) or 53
|
||||||
|
_remote_dns.port = tonumber(remote_dns_tcp_port) or 53
|
||||||
|
|
||||||
elseif remote_dns_doh then
|
elseif remote_dns_doh then
|
||||||
local _a = api.parseDoH(remote_dns_doh)
|
local _a = api.parseDoH(remote_dns_doh)
|
||||||
|
|||||||
@@ -44,6 +44,7 @@ FAKE_IP="198.18.0.0/15"
|
|||||||
FAKE_IP_6="fc00::/18"
|
FAKE_IP_6="fc00::/18"
|
||||||
|
|
||||||
USE_GEOVIEW=0
|
USE_GEOVIEW=0
|
||||||
|
EXCLUDE_VPSIP="^(0\.0\.0\.0|127\.0\.0\.1|1\.1\.1\.1|1\.1\.1\.2|8\.8\.8\.8|8\.8\.4\.4|9\.9\.9\.9)$"
|
||||||
|
|
||||||
factor() {
|
factor() {
|
||||||
if [ -z "$1" ] || [ -z "$2" ]; then
|
if [ -z "$1" ] || [ -z "$2" ]; then
|
||||||
@@ -746,15 +747,14 @@ load_acl() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
filter_haproxy() {
|
filter_haproxy() {
|
||||||
for item in ${haproxy_items}; do
|
for item in $(uci show $CONFIG | grep ".lbss=" | cut -d "'" -f 2); do
|
||||||
local ip=$(get_host_ip ipv4 $(echo $item | awk -F ":" '{print $1}') 1)
|
local ip=$(get_host_ip "ipv4" "$(echo $item | awk -F ":" '{print $1}')" 1)
|
||||||
ipset -q add $IPSET_VPS $ip
|
[ -n "$ip" ] && ! echo "$ip" | grep -Eq "$EXCLUDE_VPSIP" && ipset -q add $IPSET_VPS $ip
|
||||||
done
|
done
|
||||||
echolog " - [$?]加入负载均衡的节点到ipset[$IPSET_VPS]直连完成"
|
echolog " - [$?]加入负载均衡的节点到ipset[$IPSET_VPS]直连完成"
|
||||||
}
|
}
|
||||||
|
|
||||||
filter_vpsip() {
|
filter_vpsip() {
|
||||||
local EXCLUDE_VPSIP="^(0\.0\.0\.0|127\.0\.0\.1|1\.1\.1\.1|1\.1\.1\.2|8\.8\.8\.8|8\.8\.4\.4|9\.9\.9\.9)$"
|
|
||||||
uci show $CONFIG | grep -E "(\.address=|\.download_address=|\.domain_resolver_dns=|\.domain_resolver_dns_https=)" | cut -d "'" -f 2 | grep -Eo "([0-9]{1,3}\.){3}[0-9]{1,3}" | grep -Ev "$EXCLUDE_VPSIP" | sed "s/^/add $IPSET_VPS /" | awk '1; END{print "COMMIT"}' | ipset -! -R
|
uci show $CONFIG | grep -E "(\.address=|\.download_address=|\.domain_resolver_dns=|\.domain_resolver_dns_https=)" | cut -d "'" -f 2 | grep -Eo "([0-9]{1,3}\.){3}[0-9]{1,3}" | grep -Ev "$EXCLUDE_VPSIP" | sed "s/^/add $IPSET_VPS /" | awk '1; END{print "COMMIT"}' | ipset -! -R
|
||||||
echolog " - [$?]加入所有IPv4节点到ipset[$IPSET_VPS]直连完成"
|
echolog " - [$?]加入所有IPv4节点到ipset[$IPSET_VPS]直连完成"
|
||||||
uci show $CONFIG | grep -E "(\.address=|\.download_address=|\.domain_resolver_dns=|\.domain_resolver_dns_https=)" | cut -d "'" -f 2 | grep -Eo "\[?[A-Fa-f0-9:]*:[A-Fa-f0-9:]+\]?" | sed "s/^/add $IPSET_VPS6 /" | awk '1; END{print "COMMIT"}' | ipset -! -R
|
uci show $CONFIG | grep -E "(\.address=|\.download_address=|\.domain_resolver_dns=|\.domain_resolver_dns_https=)" | cut -d "'" -f 2 | grep -Eo "\[?[A-Fa-f0-9:]*:[A-Fa-f0-9:]+\]?" | sed "s/^/add $IPSET_VPS6 /" | awk '1; END{print "COMMIT"}' | ipset -! -R
|
||||||
@@ -802,7 +802,9 @@ filter_node() {
|
|||||||
local port=$(config_n_get "$node" port)
|
local port=$(config_n_get "$node" port)
|
||||||
local hop=$(config_n_get "$node" hysteria2_hop)
|
local hop=$(config_n_get "$node" hysteria2_hop)
|
||||||
[ -n "$hop" ] && port="${port:+$port,}$hop"
|
[ -n "$hop" ] && port="${port:+$port,}$hop"
|
||||||
[ -z "$address" ] || [ -z "$port" ] && return 1
|
[ -z "$address" ] && return 1
|
||||||
|
echo "$address" | grep -Eq "$EXCLUDE_VPSIP" && return 1
|
||||||
|
[ -z "$port" ] && return 1
|
||||||
filter_server_port "$address" "$port" "$stream"
|
filter_server_port "$address" "$port" "$stream"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -50,6 +50,7 @@ FAKE_IP="198.18.0.0/15"
|
|||||||
FAKE_IP_6="fc00::/18"
|
FAKE_IP_6="fc00::/18"
|
||||||
|
|
||||||
USE_GEOVIEW=0
|
USE_GEOVIEW=0
|
||||||
|
EXCLUDE_VPSIP="^(0\.0\.0\.0|127\.0\.0\.1|1\.1\.1\.1|1\.1\.1\.2|8\.8\.8\.8|8\.8\.4\.4|9\.9\.9\.9)$"
|
||||||
|
|
||||||
factor() {
|
factor() {
|
||||||
local ports="$1"
|
local ports="$1"
|
||||||
@@ -809,24 +810,23 @@ load_acl() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
filter_haproxy() {
|
filter_haproxy() {
|
||||||
for item in ${haproxy_items}; do
|
for item in $(uci show $CONFIG | grep ".lbss=" | cut -d "'" -f 2); do
|
||||||
get_host_ip ipv4 $(echo $item | awk -F ":" '{print $1}') 1
|
get_host_ip "ipv4" "$(echo $item | awk -F ":" '{print $1}')" 1
|
||||||
done | insert_nftset $NFTSET_VPS
|
done | grep -Ev "$EXCLUDE_VPSIP" | insert_nftset $NFTSET_VPS
|
||||||
echolog " - [$?]加入负载均衡的节点到nftset[$NFTSET_VPS]直连完成"
|
echolog " - [$?]加入负载均衡的节点到nftset[$NFTSET_VPS]直连完成"
|
||||||
}
|
}
|
||||||
|
|
||||||
filter_vps_addr() {
|
filter_vps_addr() {
|
||||||
for server_host in "$@"; do
|
for server_host in "$@"; do
|
||||||
get_host_ip "ipv4" ${server_host}
|
get_host_ip "ipv4" "${server_host}"
|
||||||
done | insert_nftset $NFTSET_VPS
|
done | grep -Ev "$EXCLUDE_VPSIP" | insert_nftset $NFTSET_VPS
|
||||||
|
|
||||||
for server_host in "$@"; do
|
for server_host in "$@"; do
|
||||||
get_host_ip "ipv6" ${server_host}
|
get_host_ip "ipv6" "${server_host}"
|
||||||
done | insert_nftset $NFTSET_VPS6
|
done | insert_nftset $NFTSET_VPS6
|
||||||
}
|
}
|
||||||
|
|
||||||
filter_vpsip() {
|
filter_vpsip() {
|
||||||
local EXCLUDE_VPSIP="^(0\.0\.0\.0|127\.0\.0\.1|1\.1\.1\.1|1\.1\.1\.2|8\.8\.8\.8|8\.8\.4\.4|9\.9\.9\.9)$"
|
|
||||||
uci show $CONFIG | grep -E "(\.address=|\.download_address=|\.domain_resolver_dns=|\.domain_resolver_dns_https=)" | cut -d "'" -f 2 | grep -Eo "([0-9]{1,3}\.){3}[0-9]{1,3}" | grep -Ev "$EXCLUDE_VPSIP" | insert_nftset $NFTSET_VPS
|
uci show $CONFIG | grep -E "(\.address=|\.download_address=|\.domain_resolver_dns=|\.domain_resolver_dns_https=)" | cut -d "'" -f 2 | grep -Eo "([0-9]{1,3}\.){3}[0-9]{1,3}" | grep -Ev "$EXCLUDE_VPSIP" | insert_nftset $NFTSET_VPS
|
||||||
echolog " - [$?]加入所有IPv4节点到nftset[$NFTSET_VPS]直连完成"
|
echolog " - [$?]加入所有IPv4节点到nftset[$NFTSET_VPS]直连完成"
|
||||||
uci show $CONFIG | grep -E "(\.address=|\.download_address=|\.domain_resolver_dns=|\.domain_resolver_dns_https=)" | cut -d "'" -f 2 | grep -Eo "\[?[A-Fa-f0-9:]*:[A-Fa-f0-9:]+\]?" | insert_nftset $NFTSET_VPS6
|
uci show $CONFIG | grep -E "(\.address=|\.download_address=|\.domain_resolver_dns=|\.domain_resolver_dns_https=)" | cut -d "'" -f 2 | grep -Eo "\[?[A-Fa-f0-9:]*:[A-Fa-f0-9:]+\]?" | insert_nftset $NFTSET_VPS6
|
||||||
@@ -864,7 +864,9 @@ filter_node() {
|
|||||||
local port=$(config_n_get "$node" port)
|
local port=$(config_n_get "$node" port)
|
||||||
local hop=$(config_n_get "$node" hysteria2_hop)
|
local hop=$(config_n_get "$node" hysteria2_hop)
|
||||||
[ -n "$hop" ] && port="${port:+$port,}$hop"
|
[ -n "$hop" ] && port="${port:+$port,}$hop"
|
||||||
[ -z "$address" ] || [ -z "$port" ] && return 1
|
[ -z "$address" ] && return 1
|
||||||
|
echo "$address" | grep -Eq "$EXCLUDE_VPSIP" && return 1
|
||||||
|
[ -z "$port" ] && return 1
|
||||||
filter_server_port "$address" "$port" "$stream"
|
filter_server_port "$address" "$port" "$stream"
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -877,7 +879,6 @@ filter_direct_node_list() {
|
|||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
del_script_mwan3() {
|
del_script_mwan3() {
|
||||||
[ -s "/etc/init.d/mwan3" ] && sed -i "/${CONFIG}/d" /etc/init.d/mwan3 >/dev/null 2>&1
|
[ -s "/etc/init.d/mwan3" ] && sed -i "/${CONFIG}/d" /etc/init.d/mwan3 >/dev/null 2>&1
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -726,13 +726,21 @@ if geo2rule == "1" then
|
|||||||
end
|
end
|
||||||
|
|
||||||
-- 如果是手动更新(arg2存在)始终生成规则
|
-- 如果是手动更新(arg2存在)始终生成规则
|
||||||
if arg2 then geoip_update_ok, geosite_update_ok = true, true end
|
if arg2 then
|
||||||
chnroute_update, chnroute6_update, gfwlist_update, chnlist_update = "1", "1", "1", "1"
|
geoip_update_ok, geosite_update_ok = true, true
|
||||||
|
end
|
||||||
|
if not rollback then
|
||||||
|
chnroute_update, chnroute6_update, gfwlist_update, chnlist_update = "1", "1", "1", "1"
|
||||||
|
end
|
||||||
|
|
||||||
if geoip_update_ok then
|
if geoip_update_ok then
|
||||||
if fs.access(asset_location .. "geoip.dat") then
|
if fs.access(asset_location .. "geoip.dat") then
|
||||||
safe_call(fetch_chnroute, "生成chnroute发生错误...")
|
if chnroute_update == "1" then
|
||||||
safe_call(fetch_chnroute6, "生成chnroute6发生错误...")
|
safe_call(fetch_chnroute, "生成chnroute发生错误...")
|
||||||
|
end
|
||||||
|
if chnroute6_update == "1" then
|
||||||
|
safe_call(fetch_chnroute6, "生成chnroute6发生错误...")
|
||||||
|
end
|
||||||
else
|
else
|
||||||
log("geoip.dat 文件不存在,跳过规则生成。")
|
log("geoip.dat 文件不存在,跳过规则生成。")
|
||||||
end
|
end
|
||||||
@@ -740,8 +748,12 @@ if geo2rule == "1" then
|
|||||||
|
|
||||||
if geosite_update_ok then
|
if geosite_update_ok then
|
||||||
if fs.access(asset_location .. "geosite.dat") then
|
if fs.access(asset_location .. "geosite.dat") then
|
||||||
safe_call(fetch_gfwlist, "生成gfwlist发生错误...")
|
if gfwlist_update == "1" then
|
||||||
safe_call(fetch_chnlist, "生成chnlist发生错误...")
|
safe_call(fetch_gfwlist, "生成gfwlist发生错误...")
|
||||||
|
end
|
||||||
|
if chnlist_update == "1" then
|
||||||
|
safe_call(fetch_chnlist, "生成chnlist发生错误...")
|
||||||
|
end
|
||||||
else
|
else
|
||||||
log("geosite.dat 文件不存在,跳过规则生成。")
|
log("geosite.dat 文件不存在,跳过规则生成。")
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ include $(TOPDIR)/rules.mk
|
|||||||
|
|
||||||
PKG_NAME:=luci-app-passwall2
|
PKG_NAME:=luci-app-passwall2
|
||||||
PKG_VERSION:=26.8.27
|
PKG_VERSION:=26.8.27
|
||||||
PKG_RELEASE:=102
|
PKG_RELEASE:=103
|
||||||
PKG_PO_VERSION:=$(PKG_VERSION)
|
PKG_PO_VERSION:=$(PKG_VERSION)
|
||||||
|
|
||||||
PKG_CONFIG_DEPENDS:= \
|
PKG_CONFIG_DEPENDS:= \
|
||||||
|
|||||||
@@ -271,7 +271,7 @@ o:depends("_show_dns_option", "1")
|
|||||||
|
|
||||||
---- DNS over TCP or UDP or TLS (DoT) or QUIC (DoQ)
|
---- DNS over TCP or UDP or TLS (DoT) or QUIC (DoQ)
|
||||||
o = s:option(Value, "remote_dns", translate("Remote DNS"))
|
o = s:option(Value, "remote_dns", translate("Remote DNS"))
|
||||||
o.datatype = "or(ipaddr,ipaddrport)"
|
o.datatype = "or(ipaddr,ipaddrport(1))"
|
||||||
o.default = "1.1.1.1"
|
o.default = "1.1.1.1"
|
||||||
o:value("1.1.1.1", "1.1.1.1 (CloudFlare)")
|
o:value("1.1.1.1", "1.1.1.1 (CloudFlare)")
|
||||||
o:value("1.1.1.2", "1.1.1.2 (CloudFlare-Security)")
|
o:value("1.1.1.2", "1.1.1.2 (CloudFlare-Security)")
|
||||||
|
|||||||
@@ -182,7 +182,7 @@ end
|
|||||||
|
|
||||||
---- DNS over TCP or UDP or TLS (DoT) or QUIC (DoQ)
|
---- DNS over TCP or UDP or TLS (DoT) or QUIC (DoQ)
|
||||||
o = s:taboption("DNS", Value, "remote_dns", translate("Remote DNS"))
|
o = s:taboption("DNS", Value, "remote_dns", translate("Remote DNS"))
|
||||||
o.datatype = "or(ipaddr,ipaddrport)"
|
o.datatype = "or(ipaddr,ipaddrport(1))"
|
||||||
o.default = "1.1.1.1"
|
o.default = "1.1.1.1"
|
||||||
o:value("1.1.1.1", "1.1.1.1 (CloudFlare)")
|
o:value("1.1.1.1", "1.1.1.1 (CloudFlare)")
|
||||||
o:value("1.1.1.2", "1.1.1.2 (CloudFlare-Security)")
|
o:value("1.1.1.2", "1.1.1.2 (CloudFlare-Security)")
|
||||||
|
|||||||
@@ -2048,4 +2048,28 @@ function gen_wireguard_key()
|
|||||||
public_key = public_key
|
public_key = public_key
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function parseDNS(dns)
|
||||||
|
if not dns then return nil end
|
||||||
|
if true then
|
||||||
|
-- IPv6
|
||||||
|
-- [::1]:5053
|
||||||
|
local address, port = dns:match("%[(.-)%]:([0-9]+)$")
|
||||||
|
if address and datatypes.ip6addr(address) and datatypes.port(port) then
|
||||||
|
return address, port
|
||||||
|
end
|
||||||
|
-- [::1]
|
||||||
|
if is_ipv6(dns) then
|
||||||
|
return get_ipv6_only(dns), 53
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if true then
|
||||||
|
-- 1.1.1.1:5053
|
||||||
|
local h, p = dns:match("^([^:]+):([^:]+)$")
|
||||||
|
if (h and p and datatypes.ip4addr(h) and datatypes.port(p)) then
|
||||||
|
return h, p
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return dns, 53
|
||||||
|
end
|
||||||
@@ -1623,8 +1623,6 @@ function gen_config(var)
|
|||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
|
|
||||||
local _remote_dns_ip = nil
|
|
||||||
|
|
||||||
local _remote_dns = {
|
local _remote_dns = {
|
||||||
tag = remote_dns_tag,
|
tag = remote_dns_tag,
|
||||||
@@ -1635,14 +1633,15 @@ function gen_config(var)
|
|||||||
_remote_dns.address = remote_dns_udp_server
|
_remote_dns.address = remote_dns_udp_server
|
||||||
_remote_dns.port = tonumber(remote_dns_udp_port) or 53
|
_remote_dns.port = tonumber(remote_dns_udp_port) or 53
|
||||||
_remote_dns_proto = "udp"
|
_remote_dns_proto = "udp"
|
||||||
_remote_dns_ip = remote_dns_udp_server
|
|
||||||
end
|
end
|
||||||
|
|
||||||
if remote_dns_tcp_server then
|
if remote_dns_tcp_server then
|
||||||
|
if api.is_ipv6(remote_dns_tcp_server) then
|
||||||
|
remote_dns_tcp_server = api.get_ipv6_full(remote_dns_tcp_server)
|
||||||
|
end
|
||||||
_remote_dns.address = "tcp://" .. remote_dns_tcp_server .. ":" .. tonumber(remote_dns_tcp_port) or 53
|
_remote_dns.address = "tcp://" .. remote_dns_tcp_server .. ":" .. tonumber(remote_dns_tcp_port) or 53
|
||||||
_remote_dns.port = tonumber(remote_dns_tcp_port) or 53
|
_remote_dns.port = tonumber(remote_dns_tcp_port) or 53
|
||||||
_remote_dns_proto = "tcp"
|
_remote_dns_proto = "tcp"
|
||||||
_remote_dns_ip = remote_dns_tcp_server
|
|
||||||
end
|
end
|
||||||
|
|
||||||
if remote_dns_doh_url and remote_dns_doh_host then
|
if remote_dns_doh_url and remote_dns_doh_host then
|
||||||
@@ -1651,7 +1650,6 @@ function gen_config(var)
|
|||||||
end
|
end
|
||||||
_remote_dns.address = remote_dns_doh_url
|
_remote_dns.address = remote_dns_doh_url
|
||||||
_remote_dns.port = tonumber(remote_dns_doh_port) or 443
|
_remote_dns.port = tonumber(remote_dns_doh_port) or 443
|
||||||
_remote_dns_ip = remote_dns_doh_ip
|
|
||||||
end
|
end
|
||||||
|
|
||||||
if _remote_dns.address then
|
if _remote_dns.address then
|
||||||
|
|||||||
@@ -69,7 +69,7 @@ check_run_environment() {
|
|||||||
|
|
||||||
run_xray() {
|
run_xray() {
|
||||||
local flag node redir_port socks_address socks_port socks_username socks_password http_address http_port http_username http_password
|
local flag node redir_port socks_address socks_port socks_username socks_password http_address http_port http_username http_password
|
||||||
local dns_listen_port direct_dns_query_strategy remote_dns_protocol remote_dns_udp_server remote_dns_tcp_server remote_dns_doh remote_dns_client_ip remote_dns_detour remote_fakedns remote_dns_query_strategy dns_cache
|
local dns_listen_port direct_dns_query_strategy remote_dns_protocol remote_dns_udp_server remote_dns_udp_port remote_dns_tcp_server remote_dns_tcp_port remote_dns_doh remote_dns_client_ip remote_dns_detour remote_fakedns remote_dns_query_strategy dns_cache
|
||||||
local loglevel log_file config_file
|
local loglevel log_file config_file
|
||||||
eval_set_val $@
|
eval_set_val $@
|
||||||
node_protocol=$(config_n_get $node protocol)
|
node_protocol=$(config_n_get $node protocol)
|
||||||
@@ -100,6 +100,7 @@ run_xray() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
[ -n "$dns_listen_port" ] && {
|
[ -n "$dns_listen_port" ] && {
|
||||||
|
local dns_msg="DNS[${dns_listen_port}]:($(i18n "Direct DNS: %s" "${AUTO_DNS}")"
|
||||||
json_add_string "dns_listen_port" "${dns_listen_port}"
|
json_add_string "dns_listen_port" "${dns_listen_port}"
|
||||||
[ -n "$dns_cache" ] && json_add_string "dns_cache" "${dns_cache}"
|
[ -n "$dns_cache" ] && json_add_string "dns_cache" "${dns_cache}"
|
||||||
[ "${node_protocol}" = "_shunt" ] && local write_ipset_direct=$(config_n_get $node write_ipset_direct 0)
|
[ "${node_protocol}" = "_shunt" ] && local write_ipset_direct=$(config_n_get $node write_ipset_direct 0)
|
||||||
@@ -129,24 +130,16 @@ run_xray() {
|
|||||||
set_cache_var "node_${node}_direct_nftset6" "${direct_nftset6}"
|
set_cache_var "node_${node}_direct_nftset6" "${direct_nftset6}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
[ "$remote_fakedns" = "1" ] && {
|
|
||||||
json_add_string "remote_dns_fake" "1"
|
|
||||||
json_add_string "remote_dns_fake_strategy" "${remote_dns_query_strategy}"
|
|
||||||
}
|
|
||||||
case "$remote_dns_protocol" in
|
case "$remote_dns_protocol" in
|
||||||
udp)
|
udp)
|
||||||
local _dns=$(get_first_dns remote_dns_udp_server 53 | sed 's/#/:/g')
|
json_add_string "remote_dns_udp_server" "${remote_dns_udp_server}"
|
||||||
local _dns_address=$(echo ${_dns} | awk -F ':' '{print $1}')
|
json_add_string "remote_dns_udp_port" "${remote_dns_udp_port}"
|
||||||
local _dns_port=$(echo ${_dns} | awk -F ':' '{print $2}')
|
dns_msg="${dns_msg} $(i18n "Remote DNS: %s" "udp://${remote_dns_udp_server}:${remote_dns_udp_port}")"
|
||||||
json_add_string "remote_dns_udp_port" "${_dns_port}"
|
|
||||||
json_add_string "remote_dns_udp_server" "${_dns_address}"
|
|
||||||
;;
|
;;
|
||||||
tcp)
|
tcp)
|
||||||
local _dns=$(get_first_dns remote_dns_tcp_server 53 | sed 's/#/:/g')
|
json_add_string "remote_dns_tcp_server" "${remote_dns_tcp_server}"
|
||||||
local _dns_address=$(echo ${_dns} | awk -F ':' '{print $1}')
|
json_add_string "remote_dns_tcp_port" "${remote_dns_tcp_port}"
|
||||||
local _dns_port=$(echo ${_dns} | awk -F ':' '{print $2}')
|
dns_msg="${dns_msg} $(i18n "Remote DNS: %s" "tcp://${remote_dns_tcp_server}:${remote_dns_tcp_port}")"
|
||||||
json_add_string "remote_dns_tcp_port" "${_dns_port}"
|
|
||||||
json_add_string "remote_dns_tcp_server" "${_dns_address}"
|
|
||||||
;;
|
;;
|
||||||
doh)
|
doh)
|
||||||
local _doh_url=$(echo $remote_dns_doh | awk -F ',' '{print $1}')
|
local _doh_url=$(echo $remote_dns_doh | awk -F ',' '{print $1}')
|
||||||
@@ -162,11 +155,18 @@ run_xray() {
|
|||||||
json_add_string "remote_dns_doh_url" "${_doh_url}"
|
json_add_string "remote_dns_doh_url" "${_doh_url}"
|
||||||
json_add_string "remote_dns_doh_host" "${_doh_host}"
|
json_add_string "remote_dns_doh_host" "${_doh_host}"
|
||||||
[ -n "$_doh_bootstrap" ] && json_add_string "remote_dns_doh_ip" "${_doh_bootstrap}"
|
[ -n "$_doh_bootstrap" ] && json_add_string "remote_dns_doh_ip" "${_doh_bootstrap}"
|
||||||
|
dns_msg="${dns_msg} $(i18n "Remote DNS: %s" "${_doh_url}")"
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
[ "$remote_fakedns" = "1" ] && {
|
||||||
|
json_add_string "remote_dns_fake" "1"
|
||||||
|
json_add_string "remote_dns_fake_strategy" "${remote_dns_query_strategy}"
|
||||||
|
dns_msg="${dns_msg} + FakeDNS "
|
||||||
|
}
|
||||||
[ -n "$remote_dns_detour" ] && json_add_string "remote_dns_detour" "${remote_dns_detour}"
|
[ -n "$remote_dns_detour" ] && json_add_string "remote_dns_detour" "${remote_dns_detour}"
|
||||||
[ -n "$remote_dns_query_strategy" ] && json_add_string "remote_dns_query_strategy" "${remote_dns_query_strategy}"
|
[ -n "$remote_dns_query_strategy" ] && json_add_string "remote_dns_query_strategy" "${remote_dns_query_strategy}"
|
||||||
[ -n "$remote_dns_client_ip" ] && json_add_string "remote_dns_client_ip" "${remote_dns_client_ip}"
|
[ -n "$remote_dns_client_ip" ] && json_add_string "remote_dns_client_ip" "${remote_dns_client_ip}"
|
||||||
|
log_out="${dns_msg})"
|
||||||
}
|
}
|
||||||
json_add_string "direct_dns_udp_port" "${DIRECT_DNS_UDP_PORT}"
|
json_add_string "direct_dns_udp_port" "${DIRECT_DNS_UDP_PORT}"
|
||||||
json_add_string "direct_dns_udp_server" "${DIRECT_DNS_UDP_SERVER}"
|
json_add_string "direct_dns_udp_server" "${DIRECT_DNS_UDP_SERVER}"
|
||||||
@@ -176,6 +176,7 @@ run_xray() {
|
|||||||
json_add_string "redir_port" "${redir_port}"
|
json_add_string "redir_port" "${redir_port}"
|
||||||
set_cache_var "node_${node}_redir_port" "${redir_port}"
|
set_cache_var "node_${node}_redir_port" "${redir_port}"
|
||||||
json_add_string "tcp_proxy_way" "${TCP_PROXY_WAY}"
|
json_add_string "tcp_proxy_way" "${TCP_PROXY_WAY}"
|
||||||
|
[ -n "${log_out}" ] && log_out="Xray[${redir_port}] ${log_out}"
|
||||||
}
|
}
|
||||||
|
|
||||||
json_add_string "node" "${node}"
|
json_add_string "node" "${node}"
|
||||||
@@ -189,6 +190,8 @@ run_xray() {
|
|||||||
$XRAY_BIN run -test -c "$config_file" > $test_log_file; local status=$?
|
$XRAY_BIN run -test -c "$config_file" > $test_log_file; local status=$?
|
||||||
if [ "${status}" == 0 ]; then
|
if [ "${status}" == 0 ]; then
|
||||||
ln_run ${QUEUE_RUN} "$XRAY_BIN" xray $log_file run -c "$config_file"
|
ln_run ${QUEUE_RUN} "$XRAY_BIN" xray $log_file run -c "$config_file"
|
||||||
|
[ -n "${log_out}" ] && log 2 ${log_out}
|
||||||
|
unset log_out
|
||||||
else
|
else
|
||||||
_error_log_file=$test_log_file
|
_error_log_file=$test_log_file
|
||||||
return ${status}
|
return ${status}
|
||||||
@@ -197,7 +200,7 @@ run_xray() {
|
|||||||
|
|
||||||
run_singbox() {
|
run_singbox() {
|
||||||
local flag node redir_port socks_address socks_port socks_username socks_password http_address http_port http_username http_password
|
local flag node redir_port socks_address socks_port socks_username socks_password http_address http_port http_username http_password
|
||||||
local dns_listen_port direct_dns_query_strategy remote_dns_protocol remote_dns_udp_server remote_dns_tcp_server remote_dns_doh remote_dns_client_ip remote_dns_detour remote_fakedns remote_dns_query_strategy remote_rewrite_ttl dns_cache
|
local dns_listen_port direct_dns_query_strategy remote_dns_protocol remote_dns_udp_server remote_dns_udp_port remote_dns_tcp_server remote_dns_tcp_port remote_dns_doh remote_dns_client_ip remote_dns_detour remote_fakedns remote_dns_query_strategy remote_rewrite_ttl dns_cache
|
||||||
local loglevel log_file config_file
|
local loglevel log_file config_file
|
||||||
eval_set_val $@
|
eval_set_val $@
|
||||||
local type=$(echo $(config_n_get $node type) | tr 'A-Z' 'a-z')
|
local type=$(echo $(config_n_get $node type) | tr 'A-Z' 'a-z')
|
||||||
@@ -239,6 +242,9 @@ run_singbox() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
[ -n "$dns_listen_port" ] && {
|
[ -n "$dns_listen_port" ] && {
|
||||||
|
local dns_msg="DNS[${dns_listen_port}]:($(i18n "Direct DNS: %s" "${AUTO_DNS}")"
|
||||||
|
json_add_string "dns_listen_port" "${dns_listen_port}"
|
||||||
|
[ -n "$dns_cache" ] && json_add_string "dns_cache" "${dns_cache}"
|
||||||
[ "${node_protocol}" = "_shunt" ] && local write_ipset_direct=$(config_n_get $node write_ipset_direct 0)
|
[ "${node_protocol}" = "_shunt" ] && local write_ipset_direct=$(config_n_get $node write_ipset_direct 0)
|
||||||
[ "${write_ipset_direct}" = "1" ] && {
|
[ "${write_ipset_direct}" = "1" ] && {
|
||||||
direct_dnsmasq_listen_port=$(get_new_port auto)
|
direct_dnsmasq_listen_port=$(get_new_port auto)
|
||||||
@@ -270,21 +276,17 @@ run_singbox() {
|
|||||||
case "$remote_dns_protocol" in
|
case "$remote_dns_protocol" in
|
||||||
udp|\
|
udp|\
|
||||||
quic)
|
quic)
|
||||||
local _dns=$(get_first_dns remote_dns_udp_server 53 | sed 's/#/:/g')
|
json_add_string "remote_dns_udp_server" "${remote_dns_udp_server}"
|
||||||
local _dns_address=$(echo ${_dns} | awk -F ':' '{print $1}')
|
json_add_string "remote_dns_udp_port" "${remote_dns_udp_port}"
|
||||||
local _dns_port=$(echo ${_dns} | awk -F ':' '{print $2}')
|
|
||||||
json_add_string "remote_dns_udp_port" "${_dns_port}"
|
|
||||||
json_add_string "remote_dns_udp_server" "${_dns_address}"
|
|
||||||
[ "$remote_dns_protocol" == "quic" ] && json_add_string "remote_dns_quic" "1"
|
[ "$remote_dns_protocol" == "quic" ] && json_add_string "remote_dns_quic" "1"
|
||||||
|
dns_msg="${dns_msg} $(i18n "Remote DNS: %s" "${remote_dns_protocol}://${remote_dns_udp_server}:${remote_dns_udp_port}")"
|
||||||
;;
|
;;
|
||||||
tcp|\
|
tcp|\
|
||||||
tls)
|
tls)
|
||||||
local _dns=$(get_first_dns remote_dns_tcp_server 53 | sed 's/#/:/g')
|
json_add_string "remote_dns_tcp_server" "${remote_dns_tcp_server}"
|
||||||
local _dns_address=$(echo ${_dns} | awk -F ':' '{print $1}')
|
json_add_string "remote_dns_tcp_port" "${remote_dns_tcp_port}"
|
||||||
local _dns_port=$(echo ${_dns} | awk -F ':' '{print $2}')
|
|
||||||
json_add_string "remote_dns_tcp_port" "${_dns_port}"
|
|
||||||
json_add_string "remote_dns_tcp_server" "${_dns_address}"
|
|
||||||
[ "$remote_dns_protocol" == "tls" ] && json_add_string "remote_dns_tls" "1"
|
[ "$remote_dns_protocol" == "tls" ] && json_add_string "remote_dns_tls" "1"
|
||||||
|
dns_msg="${dns_msg} $(i18n "Remote DNS: %s" "${remote_dns_protocol}://${remote_dns_tcp_server}:${remote_dns_tcp_port}")"
|
||||||
;;
|
;;
|
||||||
doh|\
|
doh|\
|
||||||
http3)
|
http3)
|
||||||
@@ -302,17 +304,19 @@ run_singbox() {
|
|||||||
json_add_string "remote_dns_doh_url" "${_doh_url}"
|
json_add_string "remote_dns_doh_url" "${_doh_url}"
|
||||||
json_add_string "remote_dns_doh_host" "${_doh_host}"
|
json_add_string "remote_dns_doh_host" "${_doh_host}"
|
||||||
[ "$remote_dns_protocol" == "http3" ] && json_add_string "remote_dns_http3" "1"
|
[ "$remote_dns_protocol" == "http3" ] && json_add_string "remote_dns_http3" "1"
|
||||||
|
dns_msg="${dns_msg} $(i18n "Remote DNS: %s" "${_doh_url}")"
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
[ "$remote_fakedns" = "1" ] && {
|
||||||
|
json_add_string "remote_dns_fake" "1"
|
||||||
|
dns_msg="${dns_msg} + FakeDNS "
|
||||||
|
}
|
||||||
|
|
||||||
[ -n "$remote_dns_detour" ] && json_add_string "remote_dns_detour" "${remote_dns_detour}"
|
[ -n "$remote_dns_detour" ] && json_add_string "remote_dns_detour" "${remote_dns_detour}"
|
||||||
[ -n "$remote_dns_query_strategy" ] && json_add_string "remote_dns_query_strategy" "${remote_dns_query_strategy}"
|
[ -n "$remote_dns_query_strategy" ] && json_add_string "remote_dns_query_strategy" "${remote_dns_query_strategy}"
|
||||||
[ -n "$remote_dns_client_ip" ] && json_add_string "remote_dns_client_ip" "${remote_dns_client_ip}"
|
[ -n "$remote_dns_client_ip" ] && json_add_string "remote_dns_client_ip" "${remote_dns_client_ip}"
|
||||||
|
|
||||||
[ -n "$dns_listen_port" ] && json_add_string "dns_listen_port" "${dns_listen_port}"
|
|
||||||
[ -n "$dns_cache" ] && json_add_string "dns_cache" "${dns_cache}"
|
|
||||||
[ "$remote_fakedns" = "1" ] && json_add_string "remote_dns_fake" "1"
|
|
||||||
[ -n "$remote_rewrite_ttl" ] && json_add_string "remote_rewrite_ttl" "${remote_rewrite_ttl}"
|
[ -n "$remote_rewrite_ttl" ] && json_add_string "remote_rewrite_ttl" "${remote_rewrite_ttl}"
|
||||||
|
log_out="${dns_msg})"
|
||||||
}
|
}
|
||||||
json_add_string "direct_dns_udp_port" "${DIRECT_DNS_UDP_PORT}"
|
json_add_string "direct_dns_udp_port" "${DIRECT_DNS_UDP_PORT}"
|
||||||
json_add_string "direct_dns_udp_server" "${DIRECT_DNS_UDP_SERVER}"
|
json_add_string "direct_dns_udp_server" "${DIRECT_DNS_UDP_SERVER}"
|
||||||
@@ -322,6 +326,7 @@ run_singbox() {
|
|||||||
json_add_string "redir_port" "${redir_port}"
|
json_add_string "redir_port" "${redir_port}"
|
||||||
set_cache_var "node_${node}_redir_port" "${redir_port}"
|
set_cache_var "node_${node}_redir_port" "${redir_port}"
|
||||||
json_add_string "tcp_proxy_way" "${TCP_PROXY_WAY}"
|
json_add_string "tcp_proxy_way" "${TCP_PROXY_WAY}"
|
||||||
|
[ -n "${log_out}" ] && log_out="Sing-Box[${redir_port}] ${log_out}"
|
||||||
}
|
}
|
||||||
|
|
||||||
json_add_string "node" "${node}"
|
json_add_string "node" "${node}"
|
||||||
@@ -335,6 +340,8 @@ run_singbox() {
|
|||||||
$SINGBOX_BIN check -c "$config_file" > $test_log_file 2>&1; local status=$?
|
$SINGBOX_BIN check -c "$config_file" > $test_log_file 2>&1; local status=$?
|
||||||
if [ "${status}" == 0 ]; then
|
if [ "${status}" == 0 ]; then
|
||||||
ln_run ${QUEUE_RUN} "$SINGBOX_BIN" "sing-box" "${log_file}" run -c "$config_file"
|
ln_run ${QUEUE_RUN} "$SINGBOX_BIN" "sing-box" "${log_file}" run -c "$config_file"
|
||||||
|
[ -n "${log_out}" ] && log 2 ${log_out}
|
||||||
|
unset log_out
|
||||||
else
|
else
|
||||||
_error_log_file=$test_log_file
|
_error_log_file=$test_log_file
|
||||||
return ${status}
|
return ${status}
|
||||||
@@ -803,13 +810,28 @@ run_ipset_dnsmasq() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
acl_node() {
|
acl_node() {
|
||||||
|
[ ! -f ${TMP_ACL_PATH}/acl_node_default ] && ENABLED_DEFAULT_ACL=0
|
||||||
|
local acl_node_num=$(jsonfilter -s "${acl_json}" -e '$.node_order[*]' | wc -l)
|
||||||
|
[ "${acl_node_num}" == 0 ] && {
|
||||||
|
ENABLED_DEFAULT_ACL=0
|
||||||
|
ENABLED_ACLS=0
|
||||||
|
return
|
||||||
|
}
|
||||||
|
[ "$(uci -q get dhcp.@dnsmasq[0].dns_redirect)" == "1" ] && {
|
||||||
|
uci -q set ${CONFIG}.@global[0].dnsmasq_dns_redirect='1'
|
||||||
|
uci -q commit ${CONFIG}
|
||||||
|
uci -q set dhcp.@dnsmasq[0].dns_redirect='0'
|
||||||
|
uci -q commit dhcp
|
||||||
|
|
||||||
|
json_init
|
||||||
|
json_add_string "LOG" "0"
|
||||||
|
lua $APP_PATH/helper_dnsmasq.lua restart "$(json_dump)"
|
||||||
|
}
|
||||||
local run_func
|
local run_func
|
||||||
[ -n "${XRAY_BIN}" ] && run_func="run_xray"
|
[ -n "${XRAY_BIN}" ] && run_func="run_xray"
|
||||||
[ -n "${SINGBOX_BIN}" ] && run_func="run_singbox"
|
[ -n "${SINGBOX_BIN}" ] && run_func="run_singbox"
|
||||||
local acl_node_num=0
|
|
||||||
for nid in $(jsonfilter -s "${acl_json}" -e '$.node_order[*]'); do
|
for nid in $(jsonfilter -s "${acl_json}" -e '$.node_order[*]'); do
|
||||||
[ ! -f ${TMP_ACL_PATH}/acl_node_${nid} ] && continue
|
[ ! -f ${TMP_ACL_PATH}/acl_node_${nid} ] && continue
|
||||||
acl_node_num=$(expr $acl_node_num + 1)
|
|
||||||
local _var=$(cat ${TMP_ACL_PATH}/acl_node_${nid} 2>/dev/null)
|
local _var=$(cat ${TMP_ACL_PATH}/acl_node_${nid} 2>/dev/null)
|
||||||
eval local ${_var}
|
eval local ${_var}
|
||||||
local type=$(echo $(config_n_get $node type) | tr 'A-Z' 'a-z')
|
local type=$(echo $(config_n_get $node type) | tr 'A-Z' 'a-z')
|
||||||
@@ -851,26 +873,24 @@ acl_node() {
|
|||||||
uci -q add_list dhcp.@dnsmasq[0].addnmount=${GLOBAL_DNSMASQ_CONF_PATH}
|
uci -q add_list dhcp.@dnsmasq[0].addnmount=${GLOBAL_DNSMASQ_CONF_PATH}
|
||||||
uci -q commit dhcp
|
uci -q commit dhcp
|
||||||
|
|
||||||
json_init
|
lua $APP_PATH/helper_dnsmasq.lua logic_restart
|
||||||
json_add_string "LOG" "1"
|
|
||||||
lua $APP_PATH/helper_dnsmasq.lua logic_restart "$(json_dump)"
|
|
||||||
else
|
else
|
||||||
#Run a copy dnsmasq instance, DNS hijack for that need proxy devices.
|
#Run a copy dnsmasq instance, DNS hijack for that need proxy devices.
|
||||||
dnsmasq_port=$(get_new_port auto)
|
dnsmasq_port=$(get_new_port auto)
|
||||||
run_copy_dnsmasq flag="default" listen_port=${dnsmasq_port} local_dns="${DNSMASQ_LOCAL_DNS}" tun_dns="${DNSMASQ_TUN_DNS}" default_dns="${DNSMASQ_DEFAULT_DNS}"
|
run_copy_dnsmasq flag="default" listen_port=${dnsmasq_port} local_dns="${DNSMASQ_LOCAL_DNS}" tun_dns="${DNSMASQ_TUN_DNS}" default_dns="${DNSMASQ_DEFAULT_DNS}"
|
||||||
#dhcp.leases to hosts
|
#dhcp.leases to hosts
|
||||||
$APP_PATH/lease2hosts.sh > /dev/null 2>&1 &
|
$APP_PATH/lease2hosts.sh > /dev/null 2>&1 &
|
||||||
|
log 2 "Dnsmasq[${dnsmasq_port}]:(127.0.0.1:${dns_listen_port})"
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
dnsmasq_port=$(get_new_port auto)
|
dnsmasq_port=$(get_new_port auto)
|
||||||
run_copy_dnsmasq flag="${flag}" listen_port=${dnsmasq_port} local_dns="${LOCAL_DNS:-${AUTO_DNS}}" tun_dns="127.0.0.1#${dns_listen_port}" default_dns="${AUTO_DNS}"
|
run_copy_dnsmasq flag="${flag}" listen_port=${dnsmasq_port} local_dns="${LOCAL_DNS:-${AUTO_DNS}}" tun_dns="127.0.0.1#${dns_listen_port}" default_dns="${AUTO_DNS}"
|
||||||
#dhcp.leases to hostsMore actions
|
#dhcp.leases to hostsMore actions
|
||||||
$APP_PATH/lease2hosts.sh > /dev/null 2>&1 &
|
$APP_PATH/lease2hosts.sh > /dev/null 2>&1 &
|
||||||
|
log 2 "Dnsmasq[${dnsmasq_port}]:(127.0.0.1:${dns_listen_port})"
|
||||||
fi
|
fi
|
||||||
rm -f ${TMP_ACL_PATH}/acl_node_${nid}
|
rm -f ${TMP_ACL_PATH}/acl_node_${nid}
|
||||||
done
|
done
|
||||||
[ ! -f ${TMP_ACL_PATH}/acl_node_default ] && ENABLED_DEFAULT_ACL=0
|
|
||||||
[ "${acl_node_num}" == 0 ] && ENABLED_ACLS=0 && ENABLED_DEFAULT_ACL=0
|
|
||||||
}
|
}
|
||||||
|
|
||||||
start() {
|
start() {
|
||||||
@@ -892,16 +912,6 @@ start() {
|
|||||||
nftflag=0
|
nftflag=0
|
||||||
USE_TABLES=""
|
USE_TABLES=""
|
||||||
check_run_environment
|
check_run_environment
|
||||||
[ "$(uci -q get dhcp.@dnsmasq[0].dns_redirect)" == "1" ] && {
|
|
||||||
uci -q set ${CONFIG}.@global[0].dnsmasq_dns_redirect='1'
|
|
||||||
uci -q commit ${CONFIG}
|
|
||||||
uci -q set dhcp.@dnsmasq[0].dns_redirect='0'
|
|
||||||
uci -q commit dhcp
|
|
||||||
|
|
||||||
json_init
|
|
||||||
json_add_string "LOG" "0"
|
|
||||||
lua $APP_PATH/helper_dnsmasq.lua restart "$(json_dump)"
|
|
||||||
}
|
|
||||||
[ -n "$USE_TABLES" ] && source $APP_PATH/${USE_TABLES}.sh start
|
[ -n "$USE_TABLES" ] && source $APP_PATH/${USE_TABLES}.sh start
|
||||||
set_cache_var "USE_TABLES" "$USE_TABLES"
|
set_cache_var "USE_TABLES" "$USE_TABLES"
|
||||||
if [ "$ENABLED_DEFAULT_ACL" == 1 ] || [ "$ENABLED_ACLS" == 1 ]; then
|
if [ "$ENABLED_DEFAULT_ACL" == 1 ] || [ "$ENABLED_ACLS" == 1 ]; then
|
||||||
|
|||||||
@@ -191,6 +191,7 @@ function acl_app(l)
|
|||||||
local config_path = api.TMP_ACL_PATH .. "/" .. flag
|
local config_path = api.TMP_ACL_PATH .. "/" .. flag
|
||||||
local config_file = config_path .. ".json"
|
local config_file = config_path .. ".json"
|
||||||
local log_file = v.log == "0" and "/dev/null" or config_path .. ".log"
|
local log_file = v.log == "0" and "/dev/null" or config_path .. ".log"
|
||||||
|
local dns_server, dns_port = api.parseDNS(v.remote_dns)
|
||||||
add_args(run_args, "flag", flag)
|
add_args(run_args, "flag", flag)
|
||||||
add_args(run_args, "node", node[".name"])
|
add_args(run_args, "node", node[".name"])
|
||||||
add_args(run_args, "redir_port", v.redir_port)
|
add_args(run_args, "redir_port", v.redir_port)
|
||||||
@@ -199,8 +200,10 @@ function acl_app(l)
|
|||||||
add_args(run_args, "dns_listen_port", v.dns_port)
|
add_args(run_args, "dns_listen_port", v.dns_port)
|
||||||
add_args(run_args, "direct_dns_query_strategy", v.direct_dns_query_strategy)
|
add_args(run_args, "direct_dns_query_strategy", v.direct_dns_query_strategy)
|
||||||
add_args(run_args, "remote_dns_protocol", v.remote_dns_protocol)
|
add_args(run_args, "remote_dns_protocol", v.remote_dns_protocol)
|
||||||
add_args(run_args, "remote_dns_tcp_server", v.remote_dns)
|
add_args(run_args, "remote_dns_tcp_server", dns_server)
|
||||||
add_args(run_args, "remote_dns_udp_server", v.remote_dns)
|
add_args(run_args, "remote_dns_tcp_port", dns_port)
|
||||||
|
add_args(run_args, "remote_dns_udp_server", dns_server)
|
||||||
|
add_args(run_args, "remote_dns_udp_port", dns_port)
|
||||||
add_args(run_args, "remote_dns_doh", v.remote_dns_doh)
|
add_args(run_args, "remote_dns_doh", v.remote_dns_doh)
|
||||||
add_args(run_args, "remote_dns_client_ip", v.remote_dns_client_ip)
|
add_args(run_args, "remote_dns_client_ip", v.remote_dns_client_ip)
|
||||||
add_args(run_args, "remote_dns_detour", v.remote_dns_detour)
|
add_args(run_args, "remote_dns_detour", v.remote_dns_detour)
|
||||||
|
|||||||
@@ -366,6 +366,6 @@ if arg[1] then
|
|||||||
if arg[2] then
|
if arg[2] then
|
||||||
var = jsonc.parse(arg[2])
|
var = jsonc.parse(arg[2])
|
||||||
end
|
end
|
||||||
func(var)
|
func(var or {})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -256,9 +256,9 @@ add_shunt_t_rule() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
load_acl() {
|
load_acl() {
|
||||||
|
log_i18n 1 "Access Control:"
|
||||||
acl_json=$(lua $APP_PATH/app_acl.lua)
|
acl_json=$(lua $APP_PATH/app_acl.lua)
|
||||||
acl_node
|
acl_node
|
||||||
log_i18n 1 "Access Control:"
|
|
||||||
for sid in $(jsonfilter -s "${acl_json}" -e '$.acl[*].flag'); do
|
for sid in $(jsonfilter -s "${acl_json}" -e '$.acl[*].flag'); do
|
||||||
eval local $(cat "${TMP_ACL_PATH}/${sid}/var")
|
eval local $(cat "${TMP_ACL_PATH}/${sid}/var")
|
||||||
|
|
||||||
|
|||||||
@@ -294,9 +294,9 @@ add_shunt_t_rule() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
load_acl() {
|
load_acl() {
|
||||||
|
log_i18n 1 "Access Control:"
|
||||||
acl_json=$(lua $APP_PATH/app_acl.lua)
|
acl_json=$(lua $APP_PATH/app_acl.lua)
|
||||||
acl_node
|
acl_node
|
||||||
log_i18n 1 "Access Control:"
|
|
||||||
for sid in $(jsonfilter -s "${acl_json}" -e '$.acl[*].flag'); do
|
for sid in $(jsonfilter -s "${acl_json}" -e '$.acl[*].flag'); do
|
||||||
eval $(cat "${TMP_ACL_PATH}/${sid}/var")
|
eval $(cat "${TMP_ACL_PATH}/${sid}/var")
|
||||||
|
|
||||||
|
|||||||
@@ -253,28 +253,6 @@ hosts_foreach() {
|
|||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
get_first_dns() {
|
|
||||||
local __hosts_val=${1}; shift 1
|
|
||||||
__first() {
|
|
||||||
[ -z "${2}" ] && return 0
|
|
||||||
echo "${2}#${3}"
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
eval "hosts_foreach \"${__hosts_val}\" __first \"$@\""
|
|
||||||
}
|
|
||||||
|
|
||||||
get_last_dns() {
|
|
||||||
local __hosts_val=${1}; shift 1
|
|
||||||
local __first __last
|
|
||||||
__every() {
|
|
||||||
[ -z "${2}" ] && return 0
|
|
||||||
__last="${2}#${3}"
|
|
||||||
__first=${__first:-${__last}}
|
|
||||||
}
|
|
||||||
eval "hosts_foreach \"${__hosts_val}\" __every \"$@\""
|
|
||||||
[ "${__first}" == "${__last}" ] || echo "${__last}"
|
|
||||||
}
|
|
||||||
|
|
||||||
check_port_exists() {
|
check_port_exists() {
|
||||||
local port=$1
|
local port=$1
|
||||||
local protocol=$2
|
local protocol=$2
|
||||||
|
|||||||
+2
-2
@@ -7,8 +7,8 @@
|
|||||||
include $(TOPDIR)/rules.mk
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
PKG_NAME:=upx
|
PKG_NAME:=upx
|
||||||
PKG_VERSION:=5.2.0
|
PKG_VERSION:=5.2.1
|
||||||
PKG_RELEASE:=2
|
PKG_RELEASE:=3
|
||||||
|
|
||||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-src.tar.xz
|
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-src.tar.xz
|
||||||
PKG_SOURCE_URL:=https://github.com/upx/upx/releases/download/v$(PKG_VERSION)
|
PKG_SOURCE_URL:=https://github.com/upx/upx/releases/download/v$(PKG_VERSION)
|
||||||
|
|||||||
Reference in new issue
Block a user