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

View File

@ -127,6 +127,14 @@ return baseclass.extend({
//['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: [
['DOMAIN'],
['DOMAIN-SUFFIX'],
@ -757,14 +765,24 @@ return baseclass.extend({
}
};
if (value && !value.match(/common(_stun)?/)) {
let ports = [];
for (let i of value.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);
const arr = value.trim().split(' ');
if (arr.length === 0 || arr.includes(''))
return _('Expecting: %s').format(_('non-empty value'));
if (arr.length > 1 && arr.includes('all'))
return _('Expecting: %s').format(_('If All ports is selected, uncheck others'));
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.modalonly = true;
// need deprecated
so = ss.taboption('field_override', widgets.DeviceSelect, 'interface_name', _('Bind interface'),
_('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.noaliases = true;
so.readonly = true;
so.modalonly = true;
// need deprecated
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.readonly = true;
so.modalonly = true;
/* Health fields */

View File

@ -716,18 +716,22 @@ return view.extend({
/* 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.'));
so.value('', _('All ports'));
so.value('common', _('Common ports only (bypass P2P traffic)'));
so.value('common_stun', _('Common and STUN ports'));
so.create = true;
hm.routing_port_type.forEach((res) => {
if (res[0] !== 'common_udpport')
so.value.apply(so, res);
})
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.'));
so.value('', _('All ports'));
so.value('common', _('Common ports only (bypass P2P traffic)'));
so.value('common_stun', _('Common and STUN ports'));
so.create = true;
hm.routing_port_type.forEach((res) => {
if (res[0] !== 'common_tcpport')
so.value.apply(so, res);
})
so.validate = L.bind(hm.validateCommonPort, so);
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_udpport '20-21,22,53,80,110,143,443,853,993,995,8080,8443,9418'
option stun_port '3478,19302'
option turn_port '5349'
option tun_name 'hmtun0'
option tun_addr4 '198.19.0.1/30'
option tun_addr6 'fdfe:dcba:9877::1/126'
@ -19,8 +20,8 @@ config fchomo 'resources'
option auto_update '0'
config fchomo 'routing'
option routing_tcpport 'common'
option routing_udpport 'common'
list routing_tcpport 'common_tcpport'
list routing_udpport 'common_udpport'
config fchomo 'global'
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',
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',
turn_port = uci.get(cfgname, 'config', 'turn_port') || '5349',
tun_name = uci.get(cfgname, 'config', 'tun_name') || 'hmtun0',
self_mark = uci.get(cfgname, 'config', 'self_mark') || '200',
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;
client_enabled = uci.get(cfgname, 'routing', 'client_enabled') || '0',
routing_tcpport = uci.get(cfgname, 'routing', 'routing_tcpport') || null;
routing_udpport = uci.get(cfgname, 'routing', 'routing_udpport') || null;
routing_tcpport = uci.get(cfgname, 'routing', 'routing_tcpport') || [];
routing_udpport = uci.get(cfgname, 'routing', 'routing_udpport') || [];
routing_mode = uci.get(cfgname, 'routing', 'routing_mode') || null;
routing_domain = uci.get(cfgname, 'routing', 'routing_domain') || '0';
routing_dscp_mode = uci.get(cfgname, 'routing', 'routing_dscp_mode') || null;
routing_dscp_list = uci.get(cfgname, 'routing', 'routing_dscp_list') || null;
if (routing_tcpport === 'common')
routing_tcpport = common_tcpport;
else if (routing_tcpport === 'common_stun')
routing_tcpport = `${common_tcpport},${stun_port}`;
function resolve_routing_port(arr) {
if (isEmpty(arr))
return null;
if (routing_udpport === 'common')
routing_udpport = common_udpport;
else if (routing_udpport === 'common_stun')
routing_udpport = `${common_udpport},${stun_port}`;
if ('all' in arr)
return null;
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)
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',
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',
turn_port = uci.get(uciconf, ucifchm, 'turn_port') || '5349',
tun_name = uci.get(uciconf, ucifchm, 'tun_name') || 'hmtun0',
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',
@ -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,
proxy_router = (uci.get(uciconf, uciroute, 'proxy_router') === '0') ? null : true,
client_enabled = uci.get(uciconf, uciroute, 'client_enabled') || '0',
routing_tcpport = uci.get(uciconf, uciroute, 'routing_tcpport') || null,
routing_udpport = uci.get(uciconf, uciroute, 'routing_udpport') || null,
routing_tcpport = uci.get(uciconf, uciroute, 'routing_tcpport') || [],
routing_udpport = uci.get(uciconf, uciroute, 'routing_udpport') || [],
routing_mode = uci.get(uciconf, uciroute, 'routing_mode') || null,
routing_domain = strToBool(uci.get(uciconf, uciroute, 'routing_domain')),
routing_dscp_mode = uci.get(uciconf, uciroute, 'routing_dscp_mode') || null,
@ -649,8 +650,8 @@ uci.foreach(uciconf, ucipgrp, (cfg) => {
strategy: cfg.strategy,
// Override fields
"disable-udp": strToBool(cfg.disable_udp) || false,
"interface-name": cfg.interface_name,
"routing-mark": strToInt(cfg.routing_mark) || null,
"interface-name": cfg.interface_name, // need deprecated
"routing-mark": strToInt(cfg.routing_mark) || null, // need deprecated
// Health fields
url: cfg.url,
interval: cfg.url ? durationToSecond(cfg.interval) ?? 600 : null,

View File

@ -12,4 +12,26 @@ if [ -n "$default_proxy" ]; then
EOF
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

View File

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

View File

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