diff --git a/libnftnl/Makefile b/libnftnl/Makefile index 2d3fef346..668abca51 100644 --- a/libnftnl/Makefile +++ b/libnftnl/Makefile @@ -9,12 +9,12 @@ include $(TOPDIR)/rules.mk PKG_NAME:=libnftnl PKG_CPE_ID:=cpe:/a:netfilter:libnftnl -PKG_VERSION:=1.2.6 +PKG_VERSION:=1.2.8 PKG_RELEASE:=1 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz PKG_SOURCE_URL:=https://netfilter.org/projects/$(PKG_NAME)/files -PKG_HASH:=ceeaea2cd92147da19f13a35a7f1a4bc2767ff897e838e4b479cf54b59c777f4 +PKG_HASH:=37fea5d6b5c9b08de7920d298de3cdc942e7ae64b1a3e8b880b2d390ae67ad95 PKG_MAINTAINER:=Steven Barth PKG_LICENSE:=GPL-2.0-or-later diff --git a/libnftnl/patches/001-libnftnl-add-fullcone-expression-support.patch b/libnftnl/patches/001-libnftnl-add-fullcone-expression-support.patch index 88e10ccc8..fd88e9b4c 100644 --- a/libnftnl/patches/001-libnftnl-add-fullcone-expression-support.patch +++ b/libnftnl/patches/001-libnftnl-add-fullcone-expression-support.patch @@ -15,13 +15,14 @@ Signed-off-by: Syrone Wong --- a/include/libnftnl/expr.h +++ b/include/libnftnl/expr.h -@@ -245,6 +245,12 @@ enum { +@@ -272,6 +272,13 @@ enum { }; enum { + NFTNL_EXPR_FULLCONE_FLAGS = NFTNL_EXPR_BASE, + NFTNL_EXPR_FULLCONE_REG_PROTO_MIN, + NFTNL_EXPR_FULLCONE_REG_PROTO_MAX, ++ __NFTNL_EXPR_FULLCONE_MAX +}; + +enum { @@ -65,7 +66,7 @@ Signed-off-by: Syrone Wong expr/socket.c \ --- /dev/null +++ b/src/expr/fullcone.c -@@ -0,0 +1,167 @@ +@@ -0,0 +1,165 @@ +/* + * (C) 2022 wongsyrone + * @@ -110,8 +111,6 @@ Signed-off-by: Syrone Wong + case NFTNL_EXPR_FULLCONE_REG_PROTO_MAX: + memcpy(&fullcone->sreg_proto_max, data, sizeof(fullcone->sreg_proto_max)); + break; -+ default: -+ return -1; + } + return 0; +} @@ -226,7 +225,7 @@ Signed-off-by: Syrone Wong +struct expr_ops expr_ops_fullcone = { + .name = "fullcone", + .alloc_len = sizeof(struct nftnl_expr_fullcone), -+ .max_attr = NFTA_FULLCONE_MAX, ++ .nftnl_max_attr = __NFTNL_EXPR_FULLCONE_MAX - 1, + .set = nftnl_expr_fullcone_set, + .get = nftnl_expr_fullcone_get, + .parse = nftnl_expr_fullcone_parse, diff --git a/luci-app-mihomo/Makefile b/luci-app-mihomo/Makefile index 8cfc8f9f6..f5fd70a70 100644 --- a/luci-app-mihomo/Makefile +++ b/luci-app-mihomo/Makefile @@ -1,6 +1,6 @@ include $(TOPDIR)/rules.mk -PKG_VERSION:=1.10.0 +PKG_VERSION:=1.11.0 LUCI_TITLE:=LuCI Support for mihomo LUCI_DEPENDS:=+luci-base +mihomo diff --git a/luci-app-mihomo/htdocs/luci-static/resources/tools/mihomo.js b/luci-app-mihomo/htdocs/luci-static/resources/tools/mihomo.js index 25bdd96cd..8a5112170 100644 --- a/luci-app-mihomo/htdocs/luci-static/resources/tools/mihomo.js +++ b/luci-app-mihomo/htdocs/luci-static/resources/tools/mihomo.js @@ -117,4 +117,16 @@ return baseclass.extend({ alert(_('Service is not running.')); } }, + + getUsers: function () { + return fs.lines('/etc/passwd').then(function (lines) { + return lines.map(function (line) { return line.split(/:/)[0] }).filter(function (user) { return user !== 'root' && user !== 'mihomo' }); + }); + }, + + getGroups: function () { + return fs.lines('/etc/group').then(function (lines) { + return lines.map(function (line) { return line.split(/:/)[0] }).filter(function (group) { return group !== 'root' && group !== 'mihomo' }); + }); + }, }) diff --git a/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js b/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js index 1be312040..bb1ce0d46 100644 --- a/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js +++ b/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js @@ -29,6 +29,8 @@ return view.extend({ mihomo.appVersion(), mihomo.coreVersion(), mihomo.status(), + mihomo.getUsers(), + mihomo.getGroups(), network.getHostHints(), ]); }, @@ -38,7 +40,9 @@ return view.extend({ const appVersion = data[2]; const coreVersion = data[3]; const running = data[4]; - const hosts = data[5].hosts; + const users = data[5]; + const groups = data[6]; + const hosts = data[7].hosts; let m, s, o, so; @@ -189,8 +193,8 @@ return view.extend({ for (const ip of host.ipaddrs) { const hint = host.name || mac; o.value(ip, hint ? '%s (%s)'.format(ip, hint) : ip); - } - } + }; + }; o = s.taboption('access_control', form.DynamicList, 'acl_ip6', 'IP6'); o.datatype = 'ipmask6'; @@ -203,8 +207,8 @@ return view.extend({ for (const ip of host.ip6addrs) { const hint = host.name || mac; o.value(ip, hint ? '%s (%s)'.format(ip, hint) : ip); - } - } + }; + }; o = s.taboption('access_control', form.DynamicList, 'acl_mac', 'MAC'); o.datatype = 'macaddr'; @@ -216,19 +220,40 @@ return view.extend({ const host = hosts[mac]; const hint = host.name || host.ipaddrs[0]; o.value(mac, hint ? '%s (%s)'.format(mac, hint) : mac); - } + }; + + o = s.taboption('access_control', widgets.NetworkSelect, 'acl_interface', _('Interface')); + o.multiple = true; + o.optional = true; + o.retain = true; + o.depends('access_control_mode', 'allow'); + o.depends('access_control_mode', 'block'); s.tab('bypass', _('Bypass')); + o = s.taboption('bypass', form.MultiValue, 'bypass_user', _('Bypass User')); + o.create = true; + + for (const user of users) { + o.value(user); + }; + + o = s.taboption('bypass', form.MultiValue, 'bypass_group', _('Bypass Group')); + o.create = true; + + for (const group of groups) { + o.value(group); + }; + o = s.taboption('bypass', form.Flag, 'bypass_china_mainland_ip', _('Bypass China Mainland IP')); o.rmempty = false; - o = s.taboption('bypass', form.Value, 'acl_tcp_dport', _('Destination TCP Port to Proxy')); + o = s.taboption('bypass', form.Value, 'proxy_tcp_dport', _('Destination TCP Port to Proxy')); o.rmempty = false; o.value('0-65535', _('All Port')); o.value('21 22 80 110 143 194 443 465 853 993 995 8080 8443', _('Commonly Used Port')); - o = s.taboption('bypass', form.Value, 'acl_udp_dport', _('Destination UDP Port to Proxy')); + o = s.taboption('bypass', form.Value, 'proxy_udp_dport', _('Destination UDP Port to Proxy')); o.rmempty = false; o.value('0-65535', _('All Port')); o.value('123 443 8443', _('Commonly Used Port')); @@ -316,6 +341,7 @@ return view.extend({ o.placeholder = '9090'; o = s.taboption('external_control', form.Value, 'api_secret', '*' + ' ' + _('API Secret')); + o.password = true; o.rmempty = false; o = s.taboption('external_control', form.Flag, 'selection_cache', _('Save Proxy Selection')); @@ -364,6 +390,7 @@ return view.extend({ so.rmempty = false; so = o.subsection.option(form.Value, 'password', _('Password')); + so.password = true; so.rmempty = false; s.tab('tun', _('TUN Config')); @@ -536,6 +563,7 @@ return view.extend({ s.tab('mixin_file_content', _('Mixin File Content')); o = s.taboption('mixin_file_content', form.Flag, 'mixin_file_content', '*' + ' ' + _('Enable'), _('Please go to the editor tab to edit the file for mixin')); + o.rmempty = false; return m.render(); } diff --git a/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/editor.js b/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/editor.js index a40325fde..9a21cf1d4 100644 --- a/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/editor.js +++ b/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/editor.js @@ -27,11 +27,11 @@ return view.extend({ for (const profile of profiles) { o.value(mihomo.profilesDir + '/' + profile.name, _('File:') + profile.name); - } + }; for (const subscription of subscriptions) { o.value(mihomo.subscriptionsDir + '/' + subscription['.name'] + '.yaml', _('Subscription:') + subscription.name); - } + }; o.value(mihomo.mixinFilePath, _('File for Mixin')); o.value(mihomo.runProfilePath, _('Profile for Startup')); diff --git a/luci-app-mihomo/po/templates/mihomo.pot b/luci-app-mihomo/po/templates/mihomo.pot index 8259d8dd7..7a22fbeac 100644 --- a/luci-app-mihomo/po/templates/mihomo.pot +++ b/luci-app-mihomo/po/templates/mihomo.pot @@ -1,33 +1,33 @@ msgid "" msgstr "Content-Type: text/plain; charset=UTF-8" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:314 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:339 msgid "API Port" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:318 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:343 msgid "API Secret" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:174 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:178 msgid "Access Control" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:177 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:181 msgid "All Mode" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:228 -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:233 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:253 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:258 msgid "All Port" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:326 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:352 msgid "Allow Lan" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:178 -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:421 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:182 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:448 msgid "Allow Mode" msgstr "" @@ -35,32 +35,40 @@ msgstr "" msgid "App Log" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:49 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:53 msgid "App Version" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:285 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:310 msgid "Auto" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:100 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:104 msgid "Basic Config" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:179 -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:420 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:183 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:447 msgid "Block Mode" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:221 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:232 msgid "Bypass" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:223 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:248 msgid "Bypass China Mainland IP" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:117 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:241 +msgid "Bypass Group" +msgstr "" + +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:234 +msgid "Bypass User" +msgstr "" + +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:121 #: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/editor.js:25 msgid "Choose Profile" msgstr "" @@ -70,8 +78,8 @@ msgstr "" msgid "Clear Log" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:229 -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:234 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:254 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:259 msgid "Commonly Used Port" msgstr "" @@ -83,71 +91,71 @@ msgstr "" msgid "Core Log" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:63 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:67 msgid "Core Status" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:56 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:60 msgid "Core Version" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:112 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:116 msgid "Cron Expression" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:392 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:419 msgid "DNS Config" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:398 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:425 msgid "DNS Mode" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:394 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:421 msgid "DNS Port" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:226 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:251 msgid "Destination TCP Port to Proxy" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:231 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:256 msgid "Destination UDP Port to Proxy" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:282 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:307 msgid "Direct Mode" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:287 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:312 msgid "Disable" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:432 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:459 msgid "DoH Prefer HTTP/3" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:458 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:485 msgid "Domain Name" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:352 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:378 msgid "Edit Authentications" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:414 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:441 msgid "Edit Fake-IP Filters" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:447 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:474 msgid "Edit Hosts" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:489 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:516 msgid "Edit Nameserver Policies" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:466 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:493 msgid "Edit Nameservers" msgstr "" @@ -155,38 +163,38 @@ msgstr "" msgid "Editor" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:102 -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:144 -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:286 -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:360 -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:455 -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:474 -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:497 -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:538 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:106 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:148 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:311 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:386 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:482 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:501 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:524 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:565 msgid "Enable" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:389 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:416 msgid "Endpoint Independent NAT" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:303 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:328 msgid "External Control Config" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:424 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:451 msgid "Fake-IP Cache" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:418 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:445 msgid "Fake-IP Filter Mode" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:403 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:430 msgid "Fake-IP Range" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:137 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:141 msgid "Fast Reload" msgstr "" @@ -202,60 +210,60 @@ msgstr "" msgid "File for Reserved IP6" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:121 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:125 #: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/editor.js:29 msgid "File:" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:380 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:407 msgid "GSO" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:383 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:410 msgid "GSO Max Size" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:270 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:295 msgid "General Config" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:511 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:538 msgid "GeoData Loader" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:507 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:534 msgid "GeoIP Format" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:524 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:551 msgid "GeoIP(ASN) Url" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:521 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:548 msgid "GeoIP(DAT) Url" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:518 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:545 msgid "GeoIP(MMDB) Url" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:515 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:542 msgid "GeoSite Url" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:527 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:554 msgid "GeoX Auto Update" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:505 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:532 msgid "GeoX Config" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:530 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:557 msgid "GeoX Update Interval" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:280 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:305 msgid "Global Mode" msgstr "" @@ -263,48 +271,52 @@ msgstr "" msgid "Grant access to mihomo procedures" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:329 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:355 msgid "HTTP Port" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:45 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:49 msgid "How To Use" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:461 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:488 msgid "IP" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:156 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:160 msgid "IPv4 DNS Hijack" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:162 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:166 msgid "IPv4 Proxy" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:292 -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:435 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:317 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:462 msgid "IPv6" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:159 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:163 msgid "IPv6 DNS Hijack" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:165 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:169 msgid "IPv6 Proxy" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:324 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:350 msgid "Inbound Config" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:171 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:225 +msgid "Interface" +msgstr "" + +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:175 msgid "Lan Proxy" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:259 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:284 msgid "Local" msgstr "" @@ -312,54 +324,54 @@ msgstr "" msgid "Log" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:272 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:297 msgid "Log Level" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:376 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:403 msgid "MTU" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:284 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:309 msgid "Match Process" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:500 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:527 msgid "Matcher" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:513 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:540 msgid "Memory Conservative Loader" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:45 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:49 #: mihomo/luci-app-mihomo/root/usr/share/luci/menu.d/luci-app-mihomo.json:3 msgid "MihomoTProxy" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:337 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:363 msgid "Mixed Port" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:131 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:135 msgid "Mixin" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:268 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:293 msgid "Mixin Config" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:536 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:563 msgid "Mixin File Content" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:176 -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:279 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:180 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:304 msgid "Mode" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:484 -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:503 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:511 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:530 msgid "Nameserver" msgstr "" @@ -367,43 +379,43 @@ msgstr "" msgid "Not Running" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:95 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:99 msgid "Open Dashboard" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:289 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:314 msgid "Outbound Interface" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:349 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:375 msgid "Overwrite Authentication" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:409 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:436 msgid "Overwrite Fake-IP Filter" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:444 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:471 msgid "Overwrite Hosts" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:463 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:490 msgid "Overwrite Nameserver" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:486 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:513 msgid "Overwrite Nameserver Policy" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:366 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:392 msgid "Password" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:538 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:565 msgid "Please go to the editor tab to edit the file for mixin" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:256 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:281 msgid "Prefer" msgstr "" @@ -411,39 +423,39 @@ msgstr "" msgid "Profile for Startup" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:140 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:144 msgid "Proxy Config" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:148 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:152 msgid "Redirect Mode" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:341 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:367 msgid "Redirect Port" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:75 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:79 msgid "Reload Service" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:258 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:283 msgid "Remote" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:429 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:456 msgid "Respect Rules" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:82 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:86 msgid "Restart Service" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:168 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:172 msgid "Router Proxy" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:281 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:306 msgid "Rule Mode" msgstr "" @@ -451,15 +463,15 @@ msgstr "" msgid "Running" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:333 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:359 msgid "SOCKS Port" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:321 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:347 msgid "Save Proxy Selection" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:109 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:113 msgid "Scheduled Restart" msgstr "" @@ -473,94 +485,94 @@ msgstr "" msgid "Service is not running." msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:371 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:398 msgid "Stack" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:512 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:539 msgid "Standard Loader" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:105 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:109 msgid "Start Delay" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:47 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:51 msgid "Status" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:236 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:261 msgid "Subscription Config" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:241 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:266 msgid "Subscription Name" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:245 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:270 msgid "Subscription Url" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:125 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:129 #: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/editor.js:33 msgid "Subscription:" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:295 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:320 msgid "TCP Keep Alive Idle" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:299 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:324 msgid "TCP Keep Alive Interval" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:147 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:151 msgid "TCP Proxy Mode" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:149 #: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:153 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:157 msgid "TPROXY Mode" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:345 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:371 msgid "TPROXY Port" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:369 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:396 msgid "TUN Config" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:150 #: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:154 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:158 msgid "TUN Mode" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:134 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:138 msgid "Test Profile" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:142 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:146 msgid "Transparent Proxy" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:45 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:49 msgid "Transparent Proxy with Mihomo on OpenWrt." msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:477 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:504 msgid "Type" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:152 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:156 msgid "UDP Proxy Mode" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:305 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:330 msgid "UI Name" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:308 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:333 msgid "UI Url" msgstr "" @@ -569,30 +581,30 @@ msgstr "" msgid "Unknown" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:263 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:288 msgid "Update" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:89 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:93 msgid "Update Dashboard" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:128 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:132 msgid "Upload Profile" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:441 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:468 msgid "Use Hosts" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:438 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:465 msgid "Use System Hosts" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:248 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:273 msgid "User Agent" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:363 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:389 msgid "Username" msgstr "" diff --git a/luci-app-mihomo/po/zh_Hans/mihomo.po b/luci-app-mihomo/po/zh_Hans/mihomo.po index adec4bc8d..0e22a0c33 100644 --- a/luci-app-mihomo/po/zh_Hans/mihomo.po +++ b/luci-app-mihomo/po/zh_Hans/mihomo.po @@ -8,33 +8,33 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Transfer-Encoding: 8bit\n" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:314 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:339 msgid "API Port" msgstr "API 端口" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:318 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:343 msgid "API Secret" msgstr "API 密钥" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:174 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:178 msgid "Access Control" msgstr "访问控制" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:177 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:181 msgid "All Mode" msgstr "全部模式" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:228 -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:233 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:253 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:258 msgid "All Port" msgstr "全部端口" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:326 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:352 msgid "Allow Lan" msgstr "允许局域网访问" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:178 -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:421 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:182 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:448 msgid "Allow Mode" msgstr "白名单模式" @@ -42,32 +42,40 @@ msgstr "白名单模式" msgid "App Log" msgstr "插件日志" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:49 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:53 msgid "App Version" msgstr "插件版本" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:285 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:310 msgid "Auto" msgstr "自动" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:100 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:104 msgid "Basic Config" msgstr "基础配置" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:179 -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:420 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:183 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:447 msgid "Block Mode" msgstr "黑名单模式" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:221 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:232 msgid "Bypass" msgstr "绕过" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:223 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:248 msgid "Bypass China Mainland IP" msgstr "绕过中国大陆 IP" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:117 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:241 +msgid "Bypass Group" +msgstr "绕过用户组" + +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:234 +msgid "Bypass User" +msgstr "绕过用户" + +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:121 #: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/editor.js:25 msgid "Choose Profile" msgstr "选择配置文件" @@ -77,8 +85,8 @@ msgstr "选择配置文件" msgid "Clear Log" msgstr "清空日志" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:229 -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:234 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:254 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:259 msgid "Commonly Used Port" msgstr "常用端口" @@ -90,71 +98,71 @@ msgstr "配置" msgid "Core Log" msgstr "核心日志" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:63 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:67 msgid "Core Status" msgstr "核心状态" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:56 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:60 msgid "Core Version" msgstr "核心版本" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:112 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:116 msgid "Cron Expression" msgstr "Cron 表达式" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:392 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:419 msgid "DNS Config" msgstr "DNS 配置" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:398 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:425 msgid "DNS Mode" msgstr "DNS 模式" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:394 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:421 msgid "DNS Port" msgstr "DNS 端口" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:226 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:251 msgid "Destination TCP Port to Proxy" msgstr "要代理的 TCP 目标端口" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:231 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:256 msgid "Destination UDP Port to Proxy" msgstr "要代理的 UDP 目标端口" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:282 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:307 msgid "Direct Mode" msgstr "直连模式" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:287 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:312 msgid "Disable" msgstr "禁用" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:432 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:459 msgid "DoH Prefer HTTP/3" msgstr "DoH 优先 HTTP/3" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:458 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:485 msgid "Domain Name" msgstr "域名" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:352 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:378 msgid "Edit Authentications" msgstr "编辑身份验证" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:414 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:441 msgid "Edit Fake-IP Filters" msgstr "编辑 Fake-IP 过滤列表" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:447 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:474 msgid "Edit Hosts" msgstr "编辑 Hosts" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:489 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:516 msgid "Edit Nameserver Policies" msgstr "编辑 DNS 服务器查询策略" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:466 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:493 msgid "Edit Nameservers" msgstr "编辑 DNS 服务器" @@ -162,38 +170,38 @@ msgstr "编辑 DNS 服务器" msgid "Editor" msgstr "编辑器" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:102 -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:144 -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:286 -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:360 -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:455 -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:474 -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:497 -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:538 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:106 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:148 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:311 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:386 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:482 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:501 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:524 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:565 msgid "Enable" msgstr "启用" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:389 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:416 msgid "Endpoint Independent NAT" msgstr "独立于端点的 NAT" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:303 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:328 msgid "External Control Config" msgstr "外部控制配置" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:424 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:451 msgid "Fake-IP Cache" msgstr "Fake-IP 缓存" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:418 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:445 msgid "Fake-IP Filter Mode" msgstr "Fake-IP 过滤模式" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:403 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:430 msgid "Fake-IP Range" msgstr "Fake-IP 范围" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:137 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:141 msgid "Fast Reload" msgstr "快速重载" @@ -209,60 +217,60 @@ msgstr "IPv4 保留地址" msgid "File for Reserved IP6" msgstr "IPv6 保留地址" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:121 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:125 #: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/editor.js:29 msgid "File:" msgstr "文件:" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:380 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:407 msgid "GSO" msgstr "通用分段卸载" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:383 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:410 msgid "GSO Max Size" msgstr "分段最大长度" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:270 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:295 msgid "General Config" msgstr "全局配置" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:511 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:538 msgid "GeoData Loader" msgstr "GeoData 加载器" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:507 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:534 msgid "GeoIP Format" msgstr "GeoIP 格式" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:524 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:551 msgid "GeoIP(ASN) Url" msgstr "GeoIP(ASN) 下载地址" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:521 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:548 msgid "GeoIP(DAT) Url" msgstr "GeoIP(DAT) 下载地址" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:518 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:545 msgid "GeoIP(MMDB) Url" msgstr "GeoIP(MMDB) 下载地址" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:515 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:542 msgid "GeoSite Url" msgstr "GeoSite 下载地址" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:527 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:554 msgid "GeoX Auto Update" msgstr "定时更新GeoX文件" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:505 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:532 msgid "GeoX Config" msgstr "GeoX 配置" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:530 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:557 msgid "GeoX Update Interval" msgstr "GeoX 文件更新间隔" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:280 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:305 msgid "Global Mode" msgstr "全局模式" @@ -270,48 +278,52 @@ msgstr "全局模式" msgid "Grant access to mihomo procedures" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:329 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:355 msgid "HTTP Port" msgstr "HTTP 端口" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:45 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:49 msgid "How To Use" msgstr "使用说明" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:461 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:488 msgid "IP" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:156 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:160 msgid "IPv4 DNS Hijack" msgstr "IPv4 DNS 劫持" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:162 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:166 msgid "IPv4 Proxy" msgstr "IPv4 代理" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:292 -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:435 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:317 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:462 msgid "IPv6" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:159 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:163 msgid "IPv6 DNS Hijack" msgstr "IPv6 DNS 劫持" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:165 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:169 msgid "IPv6 Proxy" msgstr "IPv6 代理" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:324 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:350 msgid "Inbound Config" msgstr "入站配置" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:171 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:225 +msgid "Interface" +msgstr "接口" + +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:175 msgid "Lan Proxy" msgstr "局域网代理" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:259 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:284 msgid "Local" msgstr "本地" @@ -319,54 +331,54 @@ msgstr "本地" msgid "Log" msgstr "日志" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:272 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:297 msgid "Log Level" msgstr "日志级别" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:376 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:403 msgid "MTU" msgstr "最大传输单元" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:284 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:309 msgid "Match Process" msgstr "匹配进程" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:500 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:527 msgid "Matcher" msgstr "匹配" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:513 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:540 msgid "Memory Conservative Loader" msgstr "为内存受限设备优化的加载器" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:45 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:49 #: mihomo/luci-app-mihomo/root/usr/share/luci/menu.d/luci-app-mihomo.json:3 msgid "MihomoTProxy" msgstr "" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:337 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:363 msgid "Mixed Port" msgstr "混合端口" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:131 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:135 msgid "Mixin" msgstr "混入" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:268 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:293 msgid "Mixin Config" msgstr "混入配置" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:536 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:563 msgid "Mixin File Content" msgstr "混入文件内容" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:176 -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:279 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:180 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:304 msgid "Mode" msgstr "模式" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:484 -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:503 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:511 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:530 msgid "Nameserver" msgstr "DNS 服务器" @@ -374,43 +386,43 @@ msgstr "DNS 服务器" msgid "Not Running" msgstr "未在运行" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:95 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:99 msgid "Open Dashboard" msgstr "打开面板" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:289 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:314 msgid "Outbound Interface" msgstr "出站接口" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:349 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:375 msgid "Overwrite Authentication" msgstr "覆盖身份验证" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:409 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:436 msgid "Overwrite Fake-IP Filter" msgstr "覆盖 Fake-IP 过滤列表" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:444 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:471 msgid "Overwrite Hosts" msgstr "覆盖 Hosts" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:463 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:490 msgid "Overwrite Nameserver" msgstr "覆盖 DNS 服务器" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:486 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:513 msgid "Overwrite Nameserver Policy" msgstr "覆盖 DNS 服务器查询策略" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:366 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:392 msgid "Password" msgstr "密码" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:538 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:565 msgid "Please go to the editor tab to edit the file for mixin" msgstr "请前往编辑器标签编辑用于混入的文件" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:256 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:281 msgid "Prefer" msgstr "优先" @@ -418,39 +430,39 @@ msgstr "优先" msgid "Profile for Startup" msgstr "用于启动的配置文件" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:140 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:144 msgid "Proxy Config" msgstr "代理配置" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:148 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:152 msgid "Redirect Mode" msgstr "Redirect 模式" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:341 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:367 msgid "Redirect Port" msgstr "Redirect 端口" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:75 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:79 msgid "Reload Service" msgstr "重载服务" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:258 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:283 msgid "Remote" msgstr "远程" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:429 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:456 msgid "Respect Rules" msgstr "遵循分流规则" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:82 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:86 msgid "Restart Service" msgstr "重启服务" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:168 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:172 msgid "Router Proxy" msgstr "路由器代理" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:281 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:306 msgid "Rule Mode" msgstr "规则模式" @@ -458,15 +470,15 @@ msgstr "规则模式" msgid "Running" msgstr "运行中" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:333 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:359 msgid "SOCKS Port" msgstr "SOCKS 端口" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:321 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:347 msgid "Save Proxy Selection" msgstr "保存节点/策略组选择" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:109 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:113 msgid "Scheduled Restart" msgstr "定时重启" @@ -480,94 +492,94 @@ msgstr "滚动到底部" msgid "Service is not running." msgstr "服务未在运行。" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:371 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:398 msgid "Stack" msgstr "栈" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:512 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:539 msgid "Standard Loader" msgstr "标准加载器" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:105 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:109 msgid "Start Delay" msgstr "启动延迟" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:47 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:51 msgid "Status" msgstr "状态" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:236 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:261 msgid "Subscription Config" msgstr "订阅配置" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:241 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:266 msgid "Subscription Name" msgstr "订阅名称" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:245 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:270 msgid "Subscription Url" msgstr "订阅链接" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:125 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:129 #: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/editor.js:33 msgid "Subscription:" msgstr "订阅:" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:295 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:320 msgid "TCP Keep Alive Idle" msgstr "TCP Keep Alive 空闲" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:299 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:324 msgid "TCP Keep Alive Interval" msgstr "TCP Keep Alive 间隔" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:147 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:151 msgid "TCP Proxy Mode" msgstr "TCP 代理模式" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:149 #: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:153 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:157 msgid "TPROXY Mode" msgstr "TPROXY 模式" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:345 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:371 msgid "TPROXY Port" msgstr "TPROXY 端口" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:369 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:396 msgid "TUN Config" msgstr "TUN 配置" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:150 #: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:154 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:158 msgid "TUN Mode" msgstr "TUN 模式" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:134 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:138 msgid "Test Profile" msgstr "检查配置文件" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:142 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:146 msgid "Transparent Proxy" msgstr "透明代理" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:45 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:49 msgid "Transparent Proxy with Mihomo on OpenWrt." msgstr "在 OpenWrt 上使用 Mihomo 进行透明代理。" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:477 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:504 msgid "Type" msgstr "类型" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:152 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:156 msgid "UDP Proxy Mode" msgstr "UDP 代理模式" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:305 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:330 msgid "UI Name" msgstr "UI 名称" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:308 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:333 msgid "UI Url" msgstr "UI 下载地址" @@ -576,30 +588,33 @@ msgstr "UI 下载地址" msgid "Unknown" msgstr "未知" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:263 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:288 msgid "Update" msgstr "更新" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:89 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:93 msgid "Update Dashboard" msgstr "更新面板" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:128 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:132 msgid "Upload Profile" msgstr "上传配置文件" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:441 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:468 msgid "Use Hosts" msgstr "使用 Hosts" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:438 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:465 msgid "Use System Hosts" msgstr "使用系统的 Hosts" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:248 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:273 msgid "User Agent" msgstr "用户代理(UA)" -#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:363 +#: mihomo/luci-app-mihomo/htdocs/luci-static/resources/view/mihomo/config.js:389 msgid "Username" msgstr "用户名" + +#~ msgid "Inbound Interface" +#~ msgstr "入站接口" diff --git a/luci-app-mihomo/root/etc/uci-defaults/40_luci-mihomo b/luci-app-mihomo/root/etc/uci-defaults/40_luci-mihomo new file mode 100644 index 000000000..080086891 --- /dev/null +++ b/luci-app-mihomo/root/etc/uci-defaults/40_luci-mihomo @@ -0,0 +1,4 @@ +#!/bin/sh +rm -rf /var/luci-modulecache/; rm -f /var/luci-indexcache; +[ -x /etc/init.d/rpcd ] && /etc/init.d/rpcd reload; +exit 0 diff --git a/luci-app-mihomo/root/usr/share/rpcd/acl.d/luci-app-mihomo.json b/luci-app-mihomo/root/usr/share/rpcd/acl.d/luci-app-mihomo.json index a2cd6f397..ef8492c3e 100644 --- a/luci-app-mihomo/root/usr/share/rpcd/acl.d/luci-app-mihomo.json +++ b/luci-app-mihomo/root/usr/share/rpcd/acl.d/luci-app-mihomo.json @@ -7,6 +7,8 @@ "service": [ "list" ] }, "file": { + "/etc/passwd": ["read"], + "/etc/group": ["read"], "/etc/mihomo/profiles/*.yaml": ["read"], "/etc/mihomo/profiles/*.yml": ["read"], "/etc/mihomo/subscriptions/*.yaml": ["read"], diff --git a/mihomo/Makefile b/mihomo/Makefile index bbb503e59..79f513fe7 100644 --- a/mihomo/Makefile +++ b/mihomo/Makefile @@ -1,7 +1,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=mihomo -PKG_RELEASE:=2 +PKG_RELEASE:=3 PKG_SOURCE_PROTO:=git PKG_SOURCE_URL:=https://github.com/MetaCubeX/mihomo.git diff --git a/mihomo/files/mihomo.conf b/mihomo/files/mihomo.conf index ef265ccc7..61e8c8564 100644 --- a/mihomo/files/mihomo.conf +++ b/mihomo/files/mihomo.conf @@ -24,9 +24,24 @@ config proxy 'proxy' option 'acl_ip' '' option 'acl_ip6' '' option 'acl_mac' '' + option 'acl_interface' '' + list 'bypass_user' 'aria2' + list 'bypass_user' 'dnsmasq' + list 'bypass_user' 'ftp' + list 'bypass_user' 'logd' + list 'bypass_user' 'nobody' + list 'bypass_user' 'ntp' + list 'bypass_user' 'ubus' + list 'bypass_group' 'aria2' + list 'bypass_group' 'dnsmasq' + list 'bypass_group' 'ftp' + list 'bypass_group' 'logd' + list 'bypass_group' 'nogroup' + list 'bypass_group' 'ntp' + list 'bypass_group' 'ubus' option 'bypass_china_mainland_ip' '0' - option 'acl_tcp_dport' '0-65535' - option 'acl_udp_dport' '0-65535' + option 'proxy_tcp_dport' '0-65535' + option 'proxy_udp_dport' '0-65535' config subscription 'subscription' option 'name' 'default' diff --git a/mihomo/files/mihomo.init b/mihomo/files/mihomo.init index 1d0ee102f..9e05a1c6d 100644 --- a/mihomo/files/mihomo.init +++ b/mihomo/files/mihomo.init @@ -64,11 +64,11 @@ start_service() { config_get_bool router_proxy "proxy" "router_proxy" 0 config_get_bool lan_proxy "proxy" "lan_proxy" 0 ### access control - local access_control_mode bypass_china_mainland_ip acl_tcp_dport acl_udp_dport + local access_control_mode bypass_china_mainland_ip proxy_tcp_dport proxy_udp_dport config_get access_control_mode "proxy" "access_control_mode" config_get_bool bypass_china_mainland_ip "proxy" "bypass_china_mainland_ip" 0 - config_get acl_tcp_dport "proxy" "acl_tcp_dport" "0-65535" - config_get acl_udp_dport "proxy" "acl_udp_dport" "0-65535" + config_get proxy_tcp_dport "proxy" "proxy_tcp_dport" "0-65535" + config_get proxy_udp_dport "proxy" "proxy_udp_dport" "0-65535" ## mixin config ### general local mode match_process outbound_interface ipv6 tcp_keep_alive_idle tcp_keep_alive_interval log_level @@ -336,11 +336,9 @@ start_service() { ip -6 rule add pref "$UDP_RULE_PREF" fwmark "$FW_MARK/$FW_MARK_MASK" ipproto udp table "$udp_route_table" fi fi - nft -f "$HIJACK_NFT" -D FW_MARK="$FW_MARK" -D FW_MARK_MASK="$FW_MARK_MASK" -D TUN_DEVICE="$TUN_DEVICE" -D DNS_PORT="$dns_port" -D REDIR_PORT="$redir_port" -D TPROXY_PORT="$tproxy_port" + nft -f "$HIJACK_NFT" -D MIHOMO_GROUP="$MIHOMO_GROUP" -D FW_MARK="$FW_MARK" -D FW_MARK_MASK="$FW_MARK_MASK" -D TUN_DEVICE="$TUN_DEVICE" -D FAKE_IP="$fake_ip_range" -D DNS_PORT="$dns_port" -D REDIR_PORT="$redir_port" -D TPROXY_PORT="$tproxy_port" nft -f "$RESERVED_IP_NFT" nft -f "$RESERVED_IP6_NFT" - nft add element inet "$FW_TABLE" bypass_group \{ "$MIHOMO_GROUP" \} - nft add element inet "$FW_TABLE" fake_ip \{ "$fake_ip_range" \} # dns hijack if [ "$ipv4_dns_hijack" == 1 ]; then log "Transparent Proxy: IPv4 DNS Hijack is enabled, IPv4 dns request will redirect to the core." @@ -359,7 +357,9 @@ start_service() { log "Transparent Proxy: IPv6 Proxy is enabled, set proxy for IPv6 traffic." nft add element inet "$FW_TABLE" proxy_nfproto \{ ipv6 \} fi - # bypass china mainland ip + # bypass + config_list_foreach "proxy" "bypass_user" add_bypass_user + config_list_foreach "proxy" "bypass_group" add_bypass_group if [ "$bypass_china_mainland_ip" == 1 ]; then log "Transparent Proxy: Bypass china mainland ip is enabled." if [ "$ipv4_proxy" == 1 ]; then @@ -369,15 +369,14 @@ start_service() { nft -f "$GEOIP6_CN_NFT" fi fi - # destination port to proxy - log "Transparent Proxy: Destination TCP Port to Proxy: $acl_tcp_dport." - log "Transparent Proxy: Destination UDP Port to Proxy: $acl_udp_dport." - local acl_dport - for acl_dport in $acl_tcp_dport; do - nft add element inet "$FW_TABLE" acl_dport \{ "tcp" . "$acl_dport" \} + log "Transparent Proxy: Destination TCP Port to Proxy: $proxy_tcp_dport." + log "Transparent Proxy: Destination UDP Port to Proxy: $proxy_udp_dport." + local proxy_dport + for proxy_dport in $proxy_tcp_dport; do + nft add element inet "$FW_TABLE" proxy_dport \{ "tcp" . "$proxy_dport" \} done - for acl_dport in $acl_udp_dport; do - nft add element inet "$FW_TABLE" acl_dport \{ "udp" . "$acl_dport" \} + for proxy_dport in $proxy_udp_dport; do + nft add element inet "$FW_TABLE" proxy_dport \{ "udp" . "$proxy_dport" \} done # router proxy if [ "$router_proxy" == 1 ]; then @@ -406,6 +405,7 @@ start_service() { config_list_foreach "proxy" "acl_ip" add_acl_ip config_list_foreach "proxy" "acl_ip6" add_acl_ip6 config_list_foreach "proxy" "acl_mac" add_acl_mac + config_list_foreach "proxy" "acl_interface" add_acl_interface if [ "$tcp_transparent_proxy_mode" == "redirect" ]; then nft insert rule inet "$FW_TABLE" dstnat jump "${access_control_mode}_dns_hijack" nft add rule inet "$FW_TABLE" dstnat meta l4proto tcp jump "${access_control_mode}_${tcp_transparent_proxy_mode}" @@ -592,6 +592,20 @@ mixin_nameserver_policy() { nameserver="$1" matcher="$2" yq -M -i '.dns.nameserver-policy.[env(matcher)] += [env(nameserver)]' "$RUN_PROFILE_PATH" } +add_bypass_user() { + local user; user="$1" + if [ "$user" != "root" ] && (cut -d ':' -f 1 < /etc/passwd | grep -q "$user"); then + nft add element inet "$FW_TABLE" bypass_user \{ "$user" \} + fi +} + +add_bypass_group() { + local group; group="$1" + if [ "$group" != "root" ] && (cut -d ':' -f 1 < /etc/group | grep -q "$group"); then + nft add element inet "$FW_TABLE" bypass_group \{ "$group" \} + fi +} + add_acl_ip() { nft add element inet "$FW_TABLE" acl_ip \{ "$1" \} } @@ -604,6 +618,14 @@ add_acl_mac() { nft add element inet "$FW_TABLE" acl_mac \{ "$1" \} } +add_acl_interface() { + local interface; interface="$1" + local device; network_get_device device "$interface" + if [ -n "$device" ]; then + nft add element inet "$FW_TABLE" acl_interface \{ "$device" \} + fi +} + update_subscription() { local subscription_section; subscription_section="$1" if [ -n "$subscription_section" ]; then diff --git a/mihomo/files/nftables/hijack.nft b/mihomo/files/nftables/hijack.nft index e3fad6e76..a2940151a 100644 --- a/mihomo/files/nftables/hijack.nft +++ b/mihomo/files/nftables/hijack.nft @@ -1,14 +1,18 @@ #!/usr/sbin/nft -f table inet mihomo { + set bypass_user { + type uid + flags interval + auto-merge + } + set bypass_group { type gid flags interval auto-merge elements = { - ntp, - dnsmasq, - logd + $MIHOMO_GROUP } } @@ -44,12 +48,7 @@ table inet mihomo { auto-merge } - set fake_ip { - type ipv4_addr - flags interval - } - - set acl_dport { + set proxy_dport { type inet_proto . inet_service flags interval auto-merge @@ -73,7 +72,14 @@ table inet mihomo { auto-merge } + set acl_interface { + type ifname + flags interval + auto-merge + } + chain router_dns_hijack { + meta skuid @bypass_user counter return meta skgid @bypass_group counter return meta nfproto @dns_hijack_nfproto meta l4proto udp th dport 53 counter redirect to :$DNS_PORT } @@ -86,12 +92,14 @@ table inet mihomo { meta nfproto @dns_hijack_nfproto meta l4proto udp th dport 53 ip saddr @acl_ip counter redirect to :$DNS_PORT meta nfproto @dns_hijack_nfproto meta l4proto udp th dport 53 ip6 saddr @acl_ip6 counter redirect to :$DNS_PORT meta nfproto @dns_hijack_nfproto meta l4proto udp th dport 53 ether saddr @acl_mac counter redirect to :$DNS_PORT + meta nfproto @dns_hijack_nfproto meta l4proto udp th dport 53 iifname @acl_interface counter redirect to :$DNS_PORT } chain block_dns_hijack { meta nfproto @dns_hijack_nfproto meta l4proto udp th dport 53 ip saddr @acl_ip counter return meta nfproto @dns_hijack_nfproto meta l4proto udp th dport 53 ip6 saddr @acl_ip6 counter return meta nfproto @dns_hijack_nfproto meta l4proto udp th dport 53 ether saddr @acl_mac counter return + meta nfproto @dns_hijack_nfproto meta l4proto udp th dport 53 iifname @acl_interface counter return meta nfproto @dns_hijack_nfproto meta l4proto udp th dport 53 counter redirect to :$DNS_PORT } @@ -103,12 +111,14 @@ table inet mihomo { meta nfproto @proxy_nfproto meta l4proto { tcp, udp } ip saddr @acl_ip counter redirect to :$REDIR_PORT meta nfproto @proxy_nfproto meta l4proto { tcp, udp } ip6 saddr @acl_ip6 counter redirect to :$REDIR_PORT meta nfproto @proxy_nfproto meta l4proto { tcp, udp } ether saddr @acl_mac counter redirect to :$REDIR_PORT + meta nfproto @proxy_nfproto meta l4proto { tcp, udp } iifname @acl_interface counter redirect to :$REDIR_PORT } chain block_redirect { meta nfproto @proxy_nfproto meta l4proto { tcp, udp } ip saddr @acl_ip counter return meta nfproto @proxy_nfproto meta l4proto { tcp, udp } ip6 saddr @acl_ip6 counter return meta nfproto @proxy_nfproto meta l4proto { tcp, udp } ether saddr @acl_mac counter return + meta nfproto @proxy_nfproto meta l4proto { tcp, udp } iifname @acl_interface counter return meta nfproto @proxy_nfproto meta l4proto { tcp, udp } counter redirect to :$REDIR_PORT } @@ -120,12 +130,14 @@ table inet mihomo { meta nfproto @proxy_nfproto meta l4proto { tcp, udp } ip saddr @acl_ip meta mark set mark ^ $FW_MARK tproxy ip to :$TPROXY_PORT counter accept meta nfproto @proxy_nfproto meta l4proto { tcp, udp } ip6 saddr @acl_ip6 meta mark set mark ^ $FW_MARK tproxy ip6 to :$TPROXY_PORT counter accept meta nfproto @proxy_nfproto meta l4proto { tcp, udp } ether saddr @acl_mac meta mark set mark ^ $FW_MARK tproxy to :$TPROXY_PORT counter accept + meta nfproto @proxy_nfproto meta l4proto { tcp, udp } iifname @acl_interface meta mark set mark ^ $FW_MARK tproxy to :$TPROXY_PORT counter accept } chain block_tproxy { meta nfproto @proxy_nfproto meta l4proto { tcp, udp } ip saddr @acl_ip counter return meta nfproto @proxy_nfproto meta l4proto { tcp, udp } ip6 saddr @acl_ip6 counter return meta nfproto @proxy_nfproto meta l4proto { tcp, udp } ether saddr @acl_mac counter return + meta nfproto @proxy_nfproto meta l4proto { tcp, udp } iifname @acl_interface counter return meta nfproto @proxy_nfproto meta l4proto { tcp, udp } meta mark set mark ^ $FW_MARK tproxy to :$TPROXY_PORT counter accept } @@ -137,12 +149,14 @@ table inet mihomo { meta nfproto @proxy_nfproto meta l4proto { tcp, udp } ip saddr @acl_ip meta mark set mark ^ $FW_MARK counter meta nfproto @proxy_nfproto meta l4proto { tcp, udp } ip6 saddr @acl_ip6 meta mark set mark ^ $FW_MARK counter meta nfproto @proxy_nfproto meta l4proto { tcp, udp } ether saddr @acl_mac meta mark set mark ^ $FW_MARK counter + meta nfproto @proxy_nfproto meta l4proto { tcp, udp } iifname @acl_interface meta mark set mark ^ $FW_MARK counter } chain block_tun { meta nfproto @proxy_nfproto meta l4proto { tcp, udp } ip saddr @acl_ip counter return meta nfproto @proxy_nfproto meta l4proto { tcp, udp } ip6 saddr @acl_ip6 counter return meta nfproto @proxy_nfproto meta l4proto { tcp, udp } ether saddr @acl_mac counter return + meta nfproto @proxy_nfproto meta l4proto { tcp, udp } iifname @acl_interface counter return meta nfproto @proxy_nfproto meta l4proto { tcp, udp } meta mark set mark ^ $FW_MARK counter } @@ -162,12 +176,13 @@ table inet mihomo { ip6 daddr @reserved_ip6 counter return ip daddr @china_ip counter return ip6 daddr @china_ip6 counter return - meta l4proto . th dport != @acl_dport ip daddr != @fake_ip counter return - meta nfproto ipv6 meta l4proto . th dport != @acl_dport counter return + meta nfproto ipv4 meta l4proto . th dport != @proxy_dport ip daddr != $FAKE_IP counter return + meta nfproto ipv6 meta l4proto . th dport != @proxy_dport counter return } chain nat_output { type nat hook output priority filter; policy accept; + meta skuid @bypass_user counter return meta skgid @bypass_group counter return fib daddr type local counter return ct direction reply counter return @@ -175,8 +190,8 @@ table inet mihomo { ip6 daddr @reserved_ip6 counter return ip daddr @china_ip counter return ip6 daddr @china_ip6 counter return - meta l4proto . th dport != @acl_dport ip daddr != @fake_ip counter return - meta nfproto ipv6 meta l4proto . th dport != @acl_dport counter return + meta nfproto ipv4 meta l4proto . th dport != @proxy_dport ip daddr != $FAKE_IP counter return + meta nfproto ipv6 meta l4proto . th dport != @proxy_dport counter return } chain mangle_prerouting { @@ -189,13 +204,14 @@ table inet mihomo { ip6 daddr @reserved_ip6 counter return ip daddr @china_ip counter return ip6 daddr @china_ip6 counter return - meta l4proto . th dport != @acl_dport ip daddr != @fake_ip counter return - meta nfproto ipv6 meta l4proto . th dport != @acl_dport counter return + meta nfproto ipv4 meta l4proto . th dport != @proxy_dport ip daddr != $FAKE_IP counter return + meta nfproto ipv6 meta l4proto . th dport != @proxy_dport counter return meta l4proto udp th dport 53 counter return } chain mangle_output { type route hook output priority mangle; policy accept; + meta skuid @bypass_user counter return meta skgid @bypass_group counter return fib daddr type local counter return ct direction reply counter return @@ -203,8 +219,8 @@ table inet mihomo { ip6 daddr @reserved_ip6 counter return ip daddr @china_ip counter return ip6 daddr @china_ip6 counter return - meta l4proto . th dport != @acl_dport ip daddr != @fake_ip counter return - meta nfproto ipv6 meta l4proto . th dport != @acl_dport counter return + meta nfproto ipv4 meta l4proto . th dport != @proxy_dport ip daddr != $FAKE_IP counter return + meta nfproto ipv6 meta l4proto . th dport != @proxy_dport counter return meta l4proto udp th dport 53 counter return } } diff --git a/mihomo/files/uci-defaults/migrate.sh b/mihomo/files/uci-defaults/migrate.sh index a993228b4..515f3f785 100644 --- a/mihomo/files/uci-defaults/migrate.sh +++ b/mihomo/files/uci-defaults/migrate.sh @@ -14,6 +14,32 @@ mixin_file_content=$(uci -q get mihomo.mixin.mixin_file_content); [ -z "$mixin_f start_delay=$(uci -q get mihomo.config.start_delay); [ -z "$start_delay" ] && uci set mihomo.config.start_delay=0 +# since v1.11.0 + +acl_tcp_dport=$(uci -q get mihomo.proxy.acl_tcp_dport); [ -n "$acl_tcp_dport" ] && uci rename mihomo.proxy.acl_tcp_dport=proxy_tcp_dport + +acl_udp_dport=$(uci -q get mihomo.proxy.acl_udp_dport); [ -n "$acl_udp_dport" ] && uci rename mihomo.proxy.acl_udp_dport=proxy_udp_dport + +bypass_user=$(uci -q get mihomo.proxy.bypass_user); [ -z "$bypass_user" ] && { + uci add_list mihomo.proxy.bypass_user="aria2" + uci add_list mihomo.proxy.bypass_user="dnsmasq" + uci add_list mihomo.proxy.bypass_user="ftp" + uci add_list mihomo.proxy.bypass_user="logd" + uci add_list mihomo.proxy.bypass_user="nobody" + uci add_list mihomo.proxy.bypass_user="ntp" + uci add_list mihomo.proxy.bypass_user="ubus" +} + +bypass_group=$(uci -q get mihomo.proxy.bypass_group); [ -z "$bypass_group" ] && { + uci add_list mihomo.proxy.bypass_group="aria2" + uci add_list mihomo.proxy.bypass_group="dnsmasq" + uci add_list mihomo.proxy.bypass_group="ftp" + uci add_list mihomo.proxy.bypass_group="logd" + uci add_list mihomo.proxy.bypass_group="nogroup" + uci add_list mihomo.proxy.bypass_group="ntp" + uci add_list mihomo.proxy.bypass_group="ubus" +} + # commit uci commit mihomo diff --git a/nftables/Makefile b/nftables/Makefile index 38a8199d1..06b3fcfcd 100644 --- a/nftables/Makefile +++ b/nftables/Makefile @@ -6,12 +6,12 @@ include $(TOPDIR)/rules.mk PKG_NAME:=nftables -PKG_VERSION:=1.0.9 +PKG_VERSION:=1.1.1 PKG_RELEASE:=1 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz PKG_SOURCE_URL:=https://netfilter.org/projects/$(PKG_NAME)/files -PKG_HASH:=a3c304cd9ba061239ee0474f9afb938a9bb99d89b960246f66f0c3a0a85e14cd +PKG_HASH:=6358830f3a64f31e39b0ad421d7dadcd240b72343ded48d8ef13b8faf204865a PKG_MAINTAINER:= PKG_LICENSE:=GPL-2.0 diff --git a/nftables/patches/002-nftables-add-fullcone-expression-support.patch b/nftables/patches/002-nftables-add-fullcone-expression-support.patch index 16bdf7c76..06679839e 100644 --- a/nftables/patches/002-nftables-add-fullcone-expression-support.patch +++ b/nftables/patches/002-nftables-add-fullcone-expression-support.patch @@ -51,7 +51,7 @@ Signed-off-by: Syrone Wong --- a/src/netlink_delinearize.c +++ b/src/netlink_delinearize.c -@@ -1473,6 +1473,53 @@ out_err: +@@ -1467,6 +1467,53 @@ out_err: stmt_free(stmt); } @@ -105,7 +105,7 @@ Signed-off-by: Syrone Wong static void netlink_parse_redir(struct netlink_parse_ctx *ctx, const struct location *loc, const struct nftnl_expr *nle) -@@ -1901,6 +1948,7 @@ static const struct expr_handler netlink +@@ -1897,6 +1944,7 @@ static const struct expr_handler netlink { .name = "tproxy", .parse = netlink_parse_tproxy }, { .name = "notrack", .parse = netlink_parse_notrack }, { .name = "masq", .parse = netlink_parse_masq }, @@ -115,7 +115,7 @@ Signed-off-by: Syrone Wong { .name = "queue", .parse = netlink_parse_queue }, --- a/src/netlink_linearize.c +++ b/src/netlink_linearize.c -@@ -1221,6 +1221,13 @@ static void netlink_gen_nat_stmt(struct +@@ -1226,6 +1226,13 @@ static void netlink_gen_nat_stmt(struct nftnl_reg_pmin = NFTNL_EXPR_MASQ_REG_PROTO_MIN; nftnl_reg_pmax = NFTNL_EXPR_MASQ_REG_PROTO_MAX; break; @@ -131,7 +131,7 @@ Signed-off-by: Syrone Wong --- a/src/parser_bison.y +++ b/src/parser_bison.y -@@ -621,6 +621,7 @@ int nft_lex(void *, void *, void *); +@@ -643,6 +643,7 @@ int nft_lex(void *, void *, void *); %token SNAT "snat" %token DNAT "dnat" %token MASQUERADE "masquerade" @@ -139,7 +139,7 @@ Signed-off-by: Syrone Wong %token REDIRECT "redirect" %token RANDOM "random" %token FULLY_RANDOM "fully-random" -@@ -755,8 +756,8 @@ int nft_lex(void *, void *, void *); +@@ -784,8 +785,8 @@ int nft_lex(void *, void *, void *); %type limit_burst_pkts limit_burst_bytes limit_mode limit_bytes time_unit quota_mode %type reject_stmt reject_stmt_alloc %destructor { stmt_free($$); } reject_stmt reject_stmt_alloc @@ -150,7 +150,7 @@ Signed-off-by: Syrone Wong %type nf_nat_flags nf_nat_flag offset_opt %type tproxy_stmt %destructor { stmt_free($$); } tproxy_stmt -@@ -3064,6 +3065,7 @@ stmt : verdict_stmt +@@ -3216,6 +3217,7 @@ stmt : verdict_stmt | queue_stmt | ct_stmt | masq_stmt close_scope_nat @@ -158,7 +158,7 @@ Signed-off-by: Syrone Wong | redir_stmt close_scope_nat | dup_stmt close_scope_dup | fwd_stmt close_scope_fwd -@@ -3976,6 +3978,28 @@ masq_stmt_args : TO COLON stmt_expr +@@ -3999,6 +4001,28 @@ masq_stmt_args : TO COLON stmt_expr { $0->nat.proto = $3; } @@ -189,7 +189,7 @@ Signed-off-by: Syrone Wong $0->nat.proto = $3; --- a/src/scanner.l +++ b/src/scanner.l -@@ -460,6 +460,7 @@ addrstring ({macaddr}|{ip4addr}|{ip6addr +@@ -462,6 +462,7 @@ addrstring ({macaddr}|{ip4addr}|{ip6addr "snat" { scanner_push_start_cond(yyscanner, SCANSTATE_STMT_NAT); return SNAT; } "dnat" { scanner_push_start_cond(yyscanner, SCANSTATE_STMT_NAT); return DNAT; } "masquerade" { scanner_push_start_cond(yyscanner, SCANSTATE_STMT_NAT); return MASQUERADE; } @@ -199,7 +199,7 @@ Signed-off-by: Syrone Wong { --- a/src/statement.c +++ b/src/statement.c -@@ -681,6 +681,7 @@ const char *nat_etype2str(enum nft_nat_e +@@ -674,6 +674,7 @@ const char *nat_etype2str(enum nft_nat_e [NFT_NAT_SNAT] = "snat", [NFT_NAT_DNAT] = "dnat", [NFT_NAT_MASQ] = "masquerade",