update 2025-01-16 12:14:51

This commit is contained in:
actions-user 2025-01-16 12:14:51 +08:00
parent beda6dcae2
commit 278fc2c3d1
14 changed files with 2313 additions and 2201 deletions

View File

@ -4,6 +4,7 @@ config fchomo 'config'
option common_tcpport '20-21,22,53,80,110,143,443,465,853,873,993,995,5222,8080,8443,9418' option common_tcpport '20-21,22,53,80,110,143,443,465,853,873,993,995,5222,8080,8443,9418'
option common_udpport '20-21,22,53,80,110,143,443,853,993,995,8080,8443,9418' option common_udpport '20-21,22,53,80,110,143,443,853,993,995,8080,8443,9418'
option stun_port '3478,19302' option stun_port '3478,19302'
option turn_port '5349'
option tun_name 'hmtun0' option tun_name 'hmtun0'
option tun_addr4 '198.19.0.1/30' option tun_addr4 '198.19.0.1/30'
option tun_addr6 'fdfe:dcba:9877::1/126' option tun_addr6 'fdfe:dcba:9877::1/126'
@ -19,8 +20,8 @@ config fchomo 'resources'
option auto_update '0' option auto_update '0'
config fchomo 'routing' config fchomo 'routing'
option routing_tcpport 'common' list routing_tcpport 'common_tcpport'
option routing_udpport 'common' list routing_udpport 'common_udpport'
option routing_mode 'bypass_cn' option routing_mode 'bypass_cn'
config fchomo 'global' config fchomo 'global'

View File

@ -4,6 +4,7 @@ config fchomo 'config'
option common_tcpport '20-21,22,53,80,110,143,443,465,853,873,993,995,5222,8080,8443,9418' option common_tcpport '20-21,22,53,80,110,143,443,465,853,873,993,995,5222,8080,8443,9418'
option common_udpport '20-21,22,53,80,110,143,443,853,993,995,8080,8443,9418' option common_udpport '20-21,22,53,80,110,143,443,853,993,995,8080,8443,9418'
option stun_port '3478,19302' option stun_port '3478,19302'
option turn_port '5349'
option tun_name 'hmtun0' option tun_name 'hmtun0'
option tun_addr4 '198.19.0.1/30' option tun_addr4 '198.19.0.1/30'
option tun_addr6 'fdfe:dcba:9877::1/126' option tun_addr6 'fdfe:dcba:9877::1/126'
@ -19,8 +20,8 @@ config fchomo 'resources'
option auto_update '0' option auto_update '0'
config fchomo 'routing' config fchomo 'routing'
option routing_tcpport 'common' list routing_tcpport 'common_tcpport'
option routing_udpport 'common' list routing_udpport 'common_udpport'
config fchomo 'global' config fchomo 'global'
option mode 'rule' option mode 'rule'

View File

@ -127,6 +127,14 @@ return baseclass.extend({
//['relay', _('Relay')], // Deprecated //['relay', _('Relay')], // Deprecated
], ],
routing_port_type: [
['all', _('All ports')],
['common_tcpport', _('Common ports only (bypass P2P traffic)')],
['common_udpport', _('Common ports only (bypass P2P traffic)')],
['stun_port', _('STUN ports')],
['turn_port', _('TURN ports')],
],
rules_type: [ rules_type: [
['DOMAIN'], ['DOMAIN'],
['DOMAIN-SUFFIX'], ['DOMAIN-SUFFIX'],
@ -757,14 +765,24 @@ return baseclass.extend({
} }
}; };
if (value && !value.match(/common(_stun)?/)) { const arr = value.trim().split(' ');
let ports = [];
for (let i of value.split(',')) { if (arr.length === 0 || arr.includes(''))
if (!stubValidator.apply('port', i) && !stubValidator.apply('portrange', i)) return _('Expecting: %s').format(_('non-empty value'));
return _('Expecting: %s').format(_('valid port value'));
if (ports.includes(i)) if (arr.length > 1 && arr.includes('all'))
return _('Port %s alrealy exists!').format(i); return _('Expecting: %s').format(_('If All ports is selected, uncheck others'));
ports = ports.concat(i);
for (let custom of arr) {
if (!hm.routing_port_type.map(e => e[0]).includes(custom)) {
let ports = [];
for (let i of custom.split(',')) {
if (!stubValidator.apply('port', i) && !stubValidator.apply('portrange', i))
return _('Expecting: %s').format(_('valid port value'));
if (ports.includes(i))
return _('Port %s alrealy exists!').format(i);
ports = ports.concat(i);
}
} }
} }

View File

@ -697,16 +697,22 @@ return view.extend({
so.default = so.disabled; so.default = so.disabled;
so.modalonly = true; so.modalonly = true;
// need deprecated
so = ss.taboption('field_override', widgets.DeviceSelect, 'interface_name', _('Bind interface'), so = ss.taboption('field_override', widgets.DeviceSelect, 'interface_name', _('Bind interface'),
_('Bind outbound interface.</br>') + _('Bind outbound interface.</br>') +
_('Priority: Proxy Node > Proxy Group > Global.')); _('Priority: Proxy Node > Proxy Group > Global.') + '</br>' +
_('Option will soon be deprecated, please use the same option in proxy node.'));
so.multiple = false; so.multiple = false;
so.noaliases = true; so.noaliases = true;
so.readonly = true;
so.modalonly = true; so.modalonly = true;
// need deprecated
so = ss.taboption('field_override', form.Value, 'routing_mark', _('Routing mark'), so = ss.taboption('field_override', form.Value, 'routing_mark', _('Routing mark'),
_('Priority: Proxy Node > Proxy Group > Global.')); _('Priority: Proxy Node > Proxy Group > Global.') + '</br>' +
_('Option will soon be deprecated, please use the same option in proxy node.'));
so.datatype = 'uinteger'; so.datatype = 'uinteger';
so.readonly = true;
so.modalonly = true; so.modalonly = true;
/* Health fields */ /* Health fields */

View File

@ -716,18 +716,22 @@ return view.extend({
/* Routing control */ /* Routing control */
ss.tab('routing_control', _('Routing Control')); ss.tab('routing_control', _('Routing Control'));
so = ss.taboption('routing_control', form.Value, 'routing_tcpport', _('Routing ports') + ' (TCP)', so = ss.taboption('routing_control', form.MultiValue, 'routing_tcpport', _('Routing ports') + ' (TCP)',
_('Specify target ports to be proxied. Multiple ports must be separated by commas.')); _('Specify target ports to be proxied. Multiple ports must be separated by commas.'));
so.value('', _('All ports')); so.create = true;
so.value('common', _('Common ports only (bypass P2P traffic)')); hm.routing_port_type.forEach((res) => {
so.value('common_stun', _('Common and STUN ports')); if (res[0] !== 'common_udpport')
so.value.apply(so, res);
})
so.validate = L.bind(hm.validateCommonPort, so); so.validate = L.bind(hm.validateCommonPort, so);
so = ss.taboption('routing_control', form.Value, 'routing_udpport', _('Routing ports') + ' (UDP)', so = ss.taboption('routing_control', form.MultiValue, 'routing_udpport', _('Routing ports') + ' (UDP)',
_('Specify target ports to be proxied. Multiple ports must be separated by commas.')); _('Specify target ports to be proxied. Multiple ports must be separated by commas.'));
so.value('', _('All ports')); so.create = true;
so.value('common', _('Common ports only (bypass P2P traffic)')); hm.routing_port_type.forEach((res) => {
so.value('common_stun', _('Common and STUN ports')); if (res[0] !== 'common_tcpport')
so.value.apply(so, res);
})
so.validate = L.bind(hm.validateCommonPort, so); so.validate = L.bind(hm.validateCommonPort, so);
so = ss.taboption('routing_control', form.ListValue, 'routing_mode', _('Routing mode'), so = ss.taboption('routing_control', form.ListValue, 'routing_mode', _('Routing mode'),

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -4,6 +4,7 @@ config fchomo 'config'
option common_tcpport '20-21,22,53,80,110,143,443,465,853,873,993,995,5222,8080,8443,9418' option common_tcpport '20-21,22,53,80,110,143,443,465,853,873,993,995,5222,8080,8443,9418'
option common_udpport '20-21,22,53,80,110,143,443,853,993,995,8080,8443,9418' option common_udpport '20-21,22,53,80,110,143,443,853,993,995,8080,8443,9418'
option stun_port '3478,19302' option stun_port '3478,19302'
option turn_port '5349'
option tun_name 'hmtun0' option tun_name 'hmtun0'
option tun_addr4 '198.19.0.1/30' option tun_addr4 '198.19.0.1/30'
option tun_addr6 'fdfe:dcba:9877::1/126' option tun_addr6 'fdfe:dcba:9877::1/126'
@ -19,8 +20,8 @@ config fchomo 'resources'
option auto_update '0' option auto_update '0'
config fchomo 'routing' config fchomo 'routing'
option routing_tcpport 'common' list routing_tcpport 'common_tcpport'
option routing_udpport 'common' list routing_udpport 'common_udpport'
config fchomo 'global' config fchomo 'global'
option mode 'rule' option mode 'rule'

View File

@ -60,6 +60,7 @@
const common_tcpport = uci.get(cfgname, 'config', 'common_tcpport') || '20-21,22,53,80,110,143,443,465,853,873,993,995,5222,8080,8443,9418', const common_tcpport = uci.get(cfgname, 'config', 'common_tcpport') || '20-21,22,53,80,110,143,443,465,853,873,993,995,5222,8080,8443,9418',
common_udpport = uci.get(cfgname, 'config', 'common_udpport') || '20-21,22,53,80,110,143,443,853,993,995,8080,8443,9418', common_udpport = uci.get(cfgname, 'config', 'common_udpport') || '20-21,22,53,80,110,143,443,853,993,995,8080,8443,9418',
stun_port = uci.get(cfgname, 'config', 'stun_port') || '3478,19302', stun_port = uci.get(cfgname, 'config', 'stun_port') || '3478,19302',
turn_port = uci.get(cfgname, 'config', 'turn_port') || '5349',
tun_name = uci.get(cfgname, 'config', 'tun_name') || 'hmtun0', tun_name = uci.get(cfgname, 'config', 'tun_name') || 'hmtun0',
self_mark = uci.get(cfgname, 'config', 'self_mark') || '200', self_mark = uci.get(cfgname, 'config', 'self_mark') || '200',
tproxy_mark = resolve_mark(uci.get(cfgname, 'config', 'tproxy_mark') || '201'), tproxy_mark = resolve_mark(uci.get(cfgname, 'config', 'tproxy_mark') || '201'),
@ -79,22 +80,31 @@
let client_enabled, routing_tcpport, routing_udpport, routing_mode, routing_domain, routing_dscp_mode, routing_dscp_list; let client_enabled, routing_tcpport, routing_udpport, routing_mode, routing_domain, routing_dscp_mode, routing_dscp_list;
client_enabled = uci.get(cfgname, 'routing', 'client_enabled') || '0', client_enabled = uci.get(cfgname, 'routing', 'client_enabled') || '0',
routing_tcpport = uci.get(cfgname, 'routing', 'routing_tcpport') || null; routing_tcpport = uci.get(cfgname, 'routing', 'routing_tcpport') || [];
routing_udpport = uci.get(cfgname, 'routing', 'routing_udpport') || null; routing_udpport = uci.get(cfgname, 'routing', 'routing_udpport') || [];
routing_mode = uci.get(cfgname, 'routing', 'routing_mode') || null; routing_mode = uci.get(cfgname, 'routing', 'routing_mode') || null;
routing_domain = uci.get(cfgname, 'routing', 'routing_domain') || '0'; routing_domain = uci.get(cfgname, 'routing', 'routing_domain') || '0';
routing_dscp_mode = uci.get(cfgname, 'routing', 'routing_dscp_mode') || null; routing_dscp_mode = uci.get(cfgname, 'routing', 'routing_dscp_mode') || null;
routing_dscp_list = uci.get(cfgname, 'routing', 'routing_dscp_list') || null; routing_dscp_list = uci.get(cfgname, 'routing', 'routing_dscp_list') || null;
if (routing_tcpport === 'common') function resolve_routing_port(arr) {
routing_tcpport = common_tcpport; if (isEmpty(arr))
else if (routing_tcpport === 'common_stun') return null;
routing_tcpport = `${common_tcpport},${stun_port}`;
if (routing_udpport === 'common') if ('all' in arr)
routing_udpport = common_udpport; return null;
else if (routing_udpport === 'common_stun')
routing_udpport = `${common_udpport},${stun_port}`; return join(',', map(arr, (val) => {
if (val === 'common_tcpport') return common_tcpport;
if (val === 'common_udpport') return common_udpport;
if (val === 'stun_port') return stun_port;
if (val === 'turn_port') return turn_port;
return val;
}));
}
routing_tcpport = resolve_routing_port(routing_tcpport);
routing_udpport = resolve_routing_port(routing_udpport);
if (!routing_mode) if (!routing_mode)
routing_domain = '0'; routing_domain = '0';

View File

@ -49,6 +49,7 @@ const ucisniff = 'sniff',
const common_tcpport = uci.get(uciconf, ucifchm, 'common_tcpport') || '20-21,22,53,80,110,143,443,465,853,873,993,995,5222,8080,8443,9418', const common_tcpport = uci.get(uciconf, ucifchm, 'common_tcpport') || '20-21,22,53,80,110,143,443,465,853,873,993,995,5222,8080,8443,9418',
common_udpport = uci.get(uciconf, ucifchm, 'common_udpport') || '20-21,22,53,80,110,143,443,853,993,995,8080,8443,9418', common_udpport = uci.get(uciconf, ucifchm, 'common_udpport') || '20-21,22,53,80,110,143,443,853,993,995,8080,8443,9418',
stun_port = uci.get(uciconf, ucifchm, 'stun_port') || '3478,19302', stun_port = uci.get(uciconf, ucifchm, 'stun_port') || '3478,19302',
turn_port = uci.get(uciconf, ucifchm, 'turn_port') || '5349',
tun_name = uci.get(uciconf, ucifchm, 'tun_name') || 'hmtun0', tun_name = uci.get(uciconf, ucifchm, 'tun_name') || 'hmtun0',
tun_addr4 = uci.get(uciconf, ucifchm, 'tun_addr4') || '198.19.0.1/30', tun_addr4 = uci.get(uciconf, ucifchm, 'tun_addr4') || '198.19.0.1/30',
tun_addr6 = uci.get(uciconf, ucifchm, 'tun_addr6') || 'fdfe:dcba:9877::1/126', tun_addr6 = uci.get(uciconf, ucifchm, 'tun_addr6') || 'fdfe:dcba:9877::1/126',
@ -72,8 +73,8 @@ const listen_interfaces = uci.get(uciconf, uciroute, 'listen_interfaces') || nul
lan_proxy_mac_addrs = uci.get(uciconf, uciroute, 'lan_proxy_mac_addrs') || null, lan_proxy_mac_addrs = uci.get(uciconf, uciroute, 'lan_proxy_mac_addrs') || null,
proxy_router = (uci.get(uciconf, uciroute, 'proxy_router') === '0') ? null : true, proxy_router = (uci.get(uciconf, uciroute, 'proxy_router') === '0') ? null : true,
client_enabled = uci.get(uciconf, uciroute, 'client_enabled') || '0', client_enabled = uci.get(uciconf, uciroute, 'client_enabled') || '0',
routing_tcpport = uci.get(uciconf, uciroute, 'routing_tcpport') || null, routing_tcpport = uci.get(uciconf, uciroute, 'routing_tcpport') || [],
routing_udpport = uci.get(uciconf, uciroute, 'routing_udpport') || null, routing_udpport = uci.get(uciconf, uciroute, 'routing_udpport') || [],
routing_mode = uci.get(uciconf, uciroute, 'routing_mode') || null, routing_mode = uci.get(uciconf, uciroute, 'routing_mode') || null,
routing_domain = strToBool(uci.get(uciconf, uciroute, 'routing_domain')), routing_domain = strToBool(uci.get(uciconf, uciroute, 'routing_domain')),
routing_dscp_mode = uci.get(uciconf, uciroute, 'routing_dscp_mode') || null, routing_dscp_mode = uci.get(uciconf, uciroute, 'routing_dscp_mode') || null,
@ -649,8 +650,8 @@ uci.foreach(uciconf, ucipgrp, (cfg) => {
strategy: cfg.strategy, strategy: cfg.strategy,
// Override fields // Override fields
"disable-udp": strToBool(cfg.disable_udp) || false, "disable-udp": strToBool(cfg.disable_udp) || false,
"interface-name": cfg.interface_name, "interface-name": cfg.interface_name, // need deprecated
"routing-mark": strToInt(cfg.routing_mark) || null, "routing-mark": strToInt(cfg.routing_mark) || null, // need deprecated
// Health fields // Health fields
url: cfg.url, url: cfg.url,
interval: cfg.url ? durationToSecond(cfg.interval) ?? 600 : null, interval: cfg.url ? durationToSecond(cfg.interval) ?? 600 : null,

View File

@ -12,4 +12,26 @@ if [ -n "$default_proxy" ]; then
EOF EOF
fi fi
for option in routing_tcpport routing_udpport; do
value=$(uci -q get fchomo.routing.$option)
if [ -z "$value" ]; then
uci -q batch <<-EOF >"/dev/null"
delete fchomo.routing.$option
add_list fchomo.routing.$option="all"
EOF
elif [ "$value" = "common" ]; then
uci -q batch <<-EOF >"/dev/null"
delete fchomo.routing.$option
add_list fchomo.routing.$option="${option/routing/common}"
EOF
elif [ "$value" = "common_stun" ]; then
uci -q batch <<-EOF >"/dev/null"
delete fchomo.routing.$option
add_list fchomo.routing.$option="${option/routing/common}"
add_list fchomo.routing.$option="stun_port"
EOF
fi
done
commit fchomo
exit 0 exit 0

View File

@ -5,9 +5,9 @@ PKG_RELEASE:=1
PKG_SOURCE_PROTO:=git PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://github.com/MetaCubeX/mihomo.git PKG_SOURCE_URL:=https://github.com/MetaCubeX/mihomo.git
PKG_SOURCE_DATE:=2025-01-07 PKG_SOURCE_DATE:=2025-01-15
PKG_SOURCE_VERSION:=c7661d7765fb62acbc6571e76f2922083b0b2b04 PKG_SOURCE_VERSION:=192d769f7587f333a3a0798e2f121be441a95c16
PKG_MIRROR_HASH:=1a306482c459557995dabbef2fa1007d00324095bc59165d939a97074e731c42 PKG_MIRROR_HASH:=06654590011c34d5a4ad5aeec0568237c0660f60d611ebbf4b3cd285ac149730
PKG_LICENSE:=MIT PKG_LICENSE:=MIT
PKG_MAINTAINER:=Joseph Mory <morytyann@gmail.com> PKG_MAINTAINER:=Joseph Mory <morytyann@gmail.com>
@ -16,7 +16,7 @@ PKG_BUILD_DEPENDS:=golang/host
PKG_BUILD_PARALLEL:=1 PKG_BUILD_PARALLEL:=1
PKG_BUILD_FLAGS:=no-mips16 PKG_BUILD_FLAGS:=no-mips16
PKG_BUILD_VERSION:=alpha-c7661d7 PKG_BUILD_VERSION:=alpha-192d769
PKG_BUILD_TIME:=$(shell date -u -Iseconds) PKG_BUILD_TIME:=$(shell date -u -Iseconds)
GO_PKG:=github.com/metacubex/mihomo GO_PKG:=github.com/metacubex/mihomo

View File

@ -12,13 +12,13 @@ PKG_MAINTAINER:=Tianling Shen <cnsztl@immortalwrt.org>
include $(INCLUDE_DIR)/package.mk include $(INCLUDE_DIR)/package.mk
GEOIP_VER:=202501090053 GEOIP_VER:=202501160051
GEOIP_FILE:=geoip.dat.$(GEOIP_VER) GEOIP_FILE:=geoip.dat.$(GEOIP_VER)
define Download/geoip define Download/geoip
URL:=https://github.com/v2fly/geoip/releases/download/$(GEOIP_VER)/ URL:=https://github.com/v2fly/geoip/releases/download/$(GEOIP_VER)/
URL_FILE:=geoip.dat URL_FILE:=geoip.dat
FILE:=$(GEOIP_FILE) FILE:=$(GEOIP_FILE)
HASH:=bc7c2a0c8a8265982e58938fc4082db10f8be9cfdb51a98d5093acea7f8bb7f1 HASH:=fff7d5834491f2cd0cc9d895405d3b8896b71d60bd1f54f4f11f76441d2619b4
endef endef
GEOSITE_VER:=20241221105938 GEOSITE_VER:=20241221105938