update 2025-04-12 14:15:39
This commit is contained in:
parent
9071e04781
commit
ff5a8c05ff
|
@ -1,6 +1,6 @@
|
|||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_VERSION:=1.21.2
|
||||
PKG_VERSION:=1.22.0
|
||||
|
||||
LUCI_TITLE:=LuCI Support for nikki
|
||||
LUCI_DEPENDS:=+luci-base +nikki
|
||||
|
|
|
@ -37,7 +37,8 @@ return view.extend({
|
|||
|
||||
m = new form.Map('nikki', _('Nikki'), `${_('Transparent Proxy with Mihomo on OpenWrt.')} <a href="https://github.com/nikkinikki-org/OpenWrt-nikki/wiki" target="_blank">${_('How To Use')}</a>`);
|
||||
|
||||
s = m.section(form.NamedSection, 'status', 'status', _('Status'));
|
||||
s = m.section(form.TableSection, 'status', _('Status'));
|
||||
s.anonymous = true;
|
||||
|
||||
o = s.option(form.Value, '_app_version', _('App Version'));
|
||||
o.readonly = true;
|
||||
|
@ -63,28 +64,28 @@ return view.extend({
|
|||
});
|
||||
});
|
||||
|
||||
o = s.option(form.Button, 'reload', '-');
|
||||
o = s.option(form.Button, 'reload');
|
||||
o.inputstyle = 'action';
|
||||
o.inputtitle = _('Reload Service');
|
||||
o.onclick = function () {
|
||||
return nikki.reload();
|
||||
};
|
||||
|
||||
o = s.option(form.Button, 'restart', '-');
|
||||
o = s.option(form.Button, 'restart');
|
||||
o.inputstyle = 'negative';
|
||||
o.inputtitle = _('Restart Service');
|
||||
o.onclick = function () {
|
||||
return nikki.restart();
|
||||
};
|
||||
|
||||
o = s.option(form.Button, 'update_dashboard', '-');
|
||||
o = s.option(form.Button, 'update_dashboard');
|
||||
o.inputstyle = 'positive';
|
||||
o.inputtitle = _('Update Dashboard');
|
||||
o.onclick = function () {
|
||||
return nikki.updateDashboard();
|
||||
};
|
||||
|
||||
o = s.option(form.Button, 'open_dashboard', '-');
|
||||
o = s.option(form.Button, 'open_dashboard');
|
||||
o.inputtitle = _('Open Dashboard');
|
||||
o.onclick = function () {
|
||||
return nikki.openDashboard();
|
||||
|
|
|
@ -29,8 +29,8 @@ return view.extend({
|
|||
o = s.taboption('app_log', form.Button, 'clear_app_log');
|
||||
o.inputstyle = 'negative';
|
||||
o.inputtitle = _('Clear Log');
|
||||
o.onclick = function () {
|
||||
m.lookupOption('nikki.log._app_log')[0].getUIElement('log').setValue('');
|
||||
o.onclick = function (_, section_id) {
|
||||
m.lookupOption('_app_log', section_id)[0].getUIElement(section_id).setValue('');
|
||||
return nikki.clearAppLog();
|
||||
};
|
||||
|
||||
|
@ -52,8 +52,8 @@ return view.extend({
|
|||
|
||||
o = s.taboption('app_log', form.Button, 'scroll_app_log_to_bottom');
|
||||
o.inputtitle = _('Scroll To Bottom');
|
||||
o.onclick = function () {
|
||||
const element = m.lookupOption('nikki.log._app_log')[0].getUIElement('log').node.firstChild;
|
||||
o.onclick = function (_, section_id) {
|
||||
const element = m.lookupOption('_app_log', section_id)[0].getUIElement(section_id).node.firstChild;
|
||||
element.scrollTop = element.scrollHeight;
|
||||
};
|
||||
|
||||
|
@ -62,8 +62,8 @@ return view.extend({
|
|||
o = s.taboption('core_log', form.Button, 'clear_core_log');
|
||||
o.inputstyle = 'negative';
|
||||
o.inputtitle = _('Clear Log');
|
||||
o.onclick = function () {
|
||||
m.lookupOption('nikki.log._core_log')[0].getUIElement('log').setValue('');
|
||||
o.onclick = function (_, section_id) {
|
||||
m.lookupOption('_core_log', section_id)[0].getUIElement(section_id).setValue('');
|
||||
return nikki.clearCoreLog();
|
||||
};
|
||||
|
||||
|
@ -85,8 +85,8 @@ return view.extend({
|
|||
|
||||
o = s.taboption('core_log', form.Button, 'scroll_core_log_to_bottom');
|
||||
o.inputtitle = _('Scroll To Bottom');
|
||||
o.onclick = function () {
|
||||
const element = m.lookupOption('nikki.log._core_log')[0].getUIElement('log').node.firstChild;
|
||||
o.onclick = function (_, section_id) {
|
||||
const element = m.lookupOption('_core_log', section_id)[0].getUIElement(section_id).node.firstChild;
|
||||
element.scrollTop = element.scrollHeight;
|
||||
};
|
||||
|
||||
|
|
|
@ -61,7 +61,7 @@ return view.extend({
|
|||
o.value(network.getName());
|
||||
}
|
||||
|
||||
o = s.taboption('general', form.ListValue, 'ipv6', _('IPv6'));
|
||||
o = s.taboption('general', form.ListValue, 'ipv6', 'IPv6');
|
||||
o.optional = true;
|
||||
o.placeholder = _('Unmodified');
|
||||
o.value('0', _('Disable'));
|
||||
|
@ -233,7 +233,7 @@ return view.extend({
|
|||
o.placeholder = _('Unmodified');
|
||||
o.rmempty = false;
|
||||
|
||||
o = s.taboption('dns', form.ListValue, 'dns_ipv6', _('IPv6'));
|
||||
o = s.taboption('dns', form.ListValue, 'dns_ipv6', 'IPv6');
|
||||
o.optional = true;
|
||||
o.placeholder = _('Unmodified');
|
||||
o.value('0', _('Disable'));
|
||||
|
@ -309,7 +309,7 @@ return view.extend({
|
|||
so = o.subsection.option(form.Value, 'domain_name', _('Domain Name'));
|
||||
so.rmempty = false;
|
||||
|
||||
so = o.subsection.option(form.DynamicList, 'ip', _('IP'));
|
||||
so = o.subsection.option(form.DynamicList, 'ip', 'IP');
|
||||
|
||||
o = s.taboption('dns', form.Flag, 'dns_nameserver', _('Overwrite Nameserver'));
|
||||
o.rmempty = false;
|
||||
|
|
|
@ -22,104 +22,87 @@ return view.extend({
|
|||
const groups = data[3]?.groups ?? [];
|
||||
const cgroups = data[3]?.cgroups ?? [];
|
||||
|
||||
let m, s, o;
|
||||
let m, s, o, so;
|
||||
|
||||
m = new form.Map('nikki');
|
||||
|
||||
s = m.section(form.NamedSection, 'proxy', 'proxy', _('Proxy Config'));
|
||||
|
||||
s.tab('transparent_proxy', _('Transparent Proxy'));
|
||||
s.tab('proxy', _('Proxy Config'));
|
||||
|
||||
o = s.taboption('transparent_proxy', form.Flag, 'transparent_proxy', _('Enable'));
|
||||
o = s.taboption('proxy', form.Flag, 'enabled', _('Enable'));
|
||||
o.rmempty = false;
|
||||
|
||||
o = s.taboption('transparent_proxy', form.ListValue, 'tcp_transparent_proxy_mode', _('TCP Proxy Mode'));
|
||||
o = s.taboption('proxy', form.ListValue, 'tcp_mode', _('TCP Mode'));
|
||||
o.optional = true;
|
||||
o.placeholder = _('Disable');
|
||||
o.value('redirect', _('Redirect Mode'));
|
||||
o.value('tproxy', _('TPROXY Mode'));
|
||||
o.value('tun', _('TUN Mode'));
|
||||
|
||||
o = s.taboption('transparent_proxy', form.ListValue, 'udp_transparent_proxy_mode', _('UDP Proxy Mode'));
|
||||
o = s.taboption('proxy', form.ListValue, 'udp_mode', _('UDP Mode'));
|
||||
o.optional = true;
|
||||
o.placeholder = _('Disable');
|
||||
o.value('tproxy', _('TPROXY Mode'));
|
||||
o.value('tun', _('TUN Mode'));
|
||||
|
||||
o = s.taboption('transparent_proxy', form.Flag, 'ipv4_dns_hijack', _('IPv4 DNS Hijack'));
|
||||
o = s.taboption('proxy', form.Flag, 'ipv4_dns_hijack', _('IPv4 DNS Hijack'));
|
||||
o.rmempty = false;
|
||||
|
||||
o = s.taboption('transparent_proxy', form.Flag, 'ipv6_dns_hijack', _('IPv6 DNS Hijack'));
|
||||
o = s.taboption('proxy', form.Flag, 'ipv6_dns_hijack', _('IPv6 DNS Hijack'));
|
||||
o.rmempty = false;
|
||||
|
||||
o = s.taboption('transparent_proxy', form.Flag, 'ipv4_proxy', _('IPv4 Proxy'));
|
||||
o = s.taboption('proxy', form.Flag, 'ipv4_proxy', _('IPv4 Proxy'));
|
||||
o.rmempty = false;
|
||||
|
||||
o = s.taboption('transparent_proxy', form.Flag, 'ipv6_proxy', _('IPv6 Proxy'));
|
||||
o = s.taboption('proxy', form.Flag, 'ipv6_proxy', _('IPv6 Proxy'));
|
||||
o.rmempty = false;
|
||||
|
||||
o = s.taboption('transparent_proxy', form.Flag, 'fake_ip_ping_hijack', _('Fake-IP Ping Hijack'));
|
||||
o = s.taboption('proxy', form.Flag, 'fake_ip_ping_hijack', _('Fake-IP Ping Hijack'));
|
||||
o.rmempty = false;
|
||||
|
||||
o = s.taboption('transparent_proxy', form.Flag, 'router_proxy', _('Router Proxy'));
|
||||
s.tab('router', _('Router Proxy'));
|
||||
|
||||
o = s.taboption('router', form.Flag, 'router_proxy', _('Enable'));
|
||||
o.rmempty = false;
|
||||
|
||||
o = s.taboption('transparent_proxy', form.Flag, 'lan_proxy', _('Lan Proxy'));
|
||||
o.rmempty = false;
|
||||
o = s.taboption('router', form.SectionValue, '_router_access_control', form.TableSection, 'router_access_control', _('Access Control'));
|
||||
|
||||
s.tab('access_control', _('Access Control'));
|
||||
o.subsection.addremove = true;
|
||||
o.subsection.anonymous = true;
|
||||
o.subsection.sortable = true;
|
||||
|
||||
o = s.taboption('access_control', form.ListValue, 'access_control_mode', _('Mode'));
|
||||
o.value('all', _('All Mode'));
|
||||
o.value('allow', _('Allow Mode'));
|
||||
o.value('block', _('Block Mode'));
|
||||
so = o.subsection.option(form.Flag, 'enabled', _('Enable'));
|
||||
so.default = '1';
|
||||
so.rmempty = false;
|
||||
|
||||
o = s.taboption('access_control', form.DynamicList, 'acl_ip', 'IP');
|
||||
o.datatype = 'ipmask4';
|
||||
o.retain = true;
|
||||
o.depends('access_control_mode', 'allow');
|
||||
o.depends('access_control_mode', 'block');
|
||||
so = o.subsection.option(form.DynamicList, 'user', _('User'));
|
||||
|
||||
for (const mac in hosts) {
|
||||
const host = hosts[mac];
|
||||
for (const ip of host.ipaddrs) {
|
||||
const hint = host.name ?? mac;
|
||||
o.value(ip, hint ? '%s (%s)'.format(ip, hint) : ip);
|
||||
};
|
||||
for (const user of users) {
|
||||
so.value(user);
|
||||
};
|
||||
|
||||
o = s.taboption('access_control', form.DynamicList, 'acl_ip6', 'IP6');
|
||||
o.datatype = 'ipmask6';
|
||||
o.retain = true;
|
||||
o.depends('access_control_mode', 'allow');
|
||||
o.depends('access_control_mode', 'block');
|
||||
so = o.subsection.option(form.DynamicList, 'group', _('Group'));
|
||||
|
||||
for (const mac in hosts) {
|
||||
const host = hosts[mac];
|
||||
for (const ip of host.ip6addrs) {
|
||||
const hint = host.name ?? mac;
|
||||
o.value(ip, hint ? '%s (%s)'.format(ip, hint) : ip);
|
||||
};
|
||||
for (const group of groups) {
|
||||
so.value(group);
|
||||
};
|
||||
|
||||
o = s.taboption('access_control', form.DynamicList, 'acl_mac', 'MAC');
|
||||
o.datatype = 'macaddr';
|
||||
o.retain = true;
|
||||
o.depends('access_control_mode', 'allow');
|
||||
o.depends('access_control_mode', 'block');
|
||||
so = o.subsection.option(form.DynamicList, 'cgroup', _('CGroup'));
|
||||
|
||||
for (const mac in hosts) {
|
||||
const host = hosts[mac];
|
||||
const hint = host.name ?? host.ipaddrs[0];
|
||||
o.value(mac, hint ? '%s (%s)'.format(mac, hint) : mac);
|
||||
for (const cgroup of cgroups) {
|
||||
so.value(cgroup);
|
||||
};
|
||||
|
||||
o = s.taboption('access_control', form.DynamicList, 'acl_interface', _('Interface'));
|
||||
o.multiple = true;
|
||||
o.optional = true;
|
||||
o.retain = true;
|
||||
o.depends('access_control_mode', 'allow');
|
||||
o.depends('access_control_mode', 'block');
|
||||
so = o.subsection.option(form.Flag, 'proxy', _('Proxy'));
|
||||
so.rmempty = false;
|
||||
|
||||
s.tab('lan', _('LAN Proxy'));
|
||||
|
||||
o = s.taboption('lan', form.Flag, 'lan_proxy', _('Enable'));
|
||||
|
||||
o = s.taboption('lan', form.DynamicList, 'lan_inbound_interface', _('Inbound Interface'));
|
||||
o.rmempty = false;
|
||||
|
||||
for (const network of networks) {
|
||||
if (network.getName() === 'loopback') {
|
||||
|
@ -128,26 +111,49 @@ return view.extend({
|
|||
o.value(network.getName());
|
||||
}
|
||||
|
||||
o = s.taboption('lan', form.SectionValue, '_lan_access_control', form.TableSection, 'lan_access_control', _('Access Control'));
|
||||
|
||||
o.subsection.addremove = true;
|
||||
o.subsection.anonymous = true;
|
||||
o.subsection.sortable = true;
|
||||
|
||||
so = o.subsection.option(form.Flag, 'enabled', _('Enable'));
|
||||
so.default = '1';
|
||||
so.rmempty = false;
|
||||
|
||||
so = o.subsection.option(form.DynamicList, 'ip', 'IP');
|
||||
|
||||
for (const mac in hosts) {
|
||||
const host = hosts[mac];
|
||||
for (const ip of host.ipaddrs) {
|
||||
const hint = host.name ?? mac;
|
||||
so.value(ip, hint ? '%s (%s)'.format(ip, hint) : ip);
|
||||
};
|
||||
};
|
||||
|
||||
so = o.subsection.option(form.DynamicList, 'ip6', 'IP6');
|
||||
|
||||
for (const mac in hosts) {
|
||||
const host = hosts[mac];
|
||||
for (const ip of host.ip6addrs) {
|
||||
const hint = host.name ?? mac;
|
||||
so.value(ip, hint ? '%s (%s)'.format(ip, hint) : ip);
|
||||
};
|
||||
};
|
||||
|
||||
so = o.subsection.option(form.DynamicList, 'mac', 'MAC');
|
||||
|
||||
for (const mac in hosts) {
|
||||
const host = hosts[mac];
|
||||
const hint = host.name ?? host.ipaddrs[0];
|
||||
so.value(mac, hint ? '%s (%s)'.format(mac, hint) : mac);
|
||||
};
|
||||
|
||||
so = o.subsection.option(form.Flag, 'proxy', _('Proxy'));
|
||||
so.rmempty = false;
|
||||
|
||||
s.tab('bypass', _('Bypass'));
|
||||
|
||||
o = s.taboption('bypass', form.DynamicList, 'bypass_user', _('Bypass User'));
|
||||
|
||||
for (const user of users) {
|
||||
o.value(user);
|
||||
};
|
||||
|
||||
o = s.taboption('bypass', form.DynamicList, 'bypass_group', _('Bypass Group'));
|
||||
|
||||
for (const group of groups) {
|
||||
o.value(group);
|
||||
};
|
||||
|
||||
o = s.taboption('bypass', form.DynamicList, 'bypass_cgroup', _('Bypass cgroup'));
|
||||
|
||||
for (const cgroup of cgroups) {
|
||||
o.value(cgroup);
|
||||
};
|
||||
|
||||
o = s.taboption('bypass', form.Flag, 'bypass_china_mainland_ip', _('Bypass China Mainland IP'));
|
||||
o.rmempty = false;
|
||||
|
||||
|
|
|
@ -1,33 +1,29 @@
|
|||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=UTF-8"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:120
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:121
|
||||
msgid "API Listen"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:125
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:126
|
||||
msgid "API Secret"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:70
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:69
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:114
|
||||
msgid "Access Control"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:73
|
||||
msgid "All Mode"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:159
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:164
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:162
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:167
|
||||
msgid "All Port"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:137
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:138
|
||||
msgid "Allow Lan"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:262
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:74
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:263
|
||||
msgid "Allow Mode"
|
||||
msgstr ""
|
||||
|
||||
|
@ -44,45 +40,36 @@ msgstr ""
|
|||
msgid "App Version"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:485
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:486
|
||||
msgid "Append Rule"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:416
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:417
|
||||
msgid "Append Rule Provider"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:472
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:473
|
||||
msgid "Behavior"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:261
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:75
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:262
|
||||
msgid "Block Mode"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:131
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:155
|
||||
msgid "Bypass"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:154
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:157
|
||||
msgid "Bypass China Mainland IP"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:167
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:170
|
||||
msgid "Bypass DSCP"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:140
|
||||
msgid "Bypass Group"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:133
|
||||
msgid "Bypass User"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:147
|
||||
msgid "Bypass cgroup"
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:91
|
||||
msgid "CGroup"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/editor.js:29
|
||||
|
@ -98,8 +85,8 @@ msgstr ""
|
|||
msgid "Clear Log"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:160
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:165
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:163
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:168
|
||||
msgid "Commonly Used Port"
|
||||
msgstr ""
|
||||
|
||||
|
@ -123,15 +110,15 @@ msgstr ""
|
|||
msgid "Cron Expression"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:228
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:229
|
||||
msgid "DNS Config"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:230
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:231
|
||||
msgid "DNS Listen"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:241
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:242
|
||||
msgid "DNS Mode"
|
||||
msgstr ""
|
||||
|
||||
|
@ -139,27 +126,27 @@ msgstr ""
|
|||
msgid "Debug Log"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:507
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:508
|
||||
msgid "Destination IP"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:511
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:512
|
||||
msgid "Destination IP Geo"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:508
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:509
|
||||
msgid "Destination Port"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:157
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:160
|
||||
msgid "Destination TCP Port to Proxy"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:162
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:165
|
||||
msgid "Destination UDP Port to Proxy"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:188
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:189
|
||||
msgid "Device Name"
|
||||
msgstr ""
|
||||
|
||||
|
@ -171,20 +158,20 @@ msgstr ""
|
|||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:73
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:79
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:85
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:132
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:140
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:206
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:216
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:238
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:267
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:273
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:279
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:285
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:291
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:360
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:366
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:372
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:558
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:133
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:141
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:207
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:217
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:239
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:268
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:274
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:280
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:286
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:292
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:361
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:367
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:373
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:559
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:38
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:45
|
||||
msgid "Disable"
|
||||
|
@ -210,60 +197,60 @@ msgstr ""
|
|||
msgid "Disable TCP Keep Alive"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:276
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:277
|
||||
msgid "DoH Prefer HTTP/3"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:308
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:503
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:309
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:504
|
||||
msgid "Domain Name"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:510
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:511
|
||||
msgid "Domain Name Geo"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:505
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:506
|
||||
msgid "Domain Name Keyword"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:506
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:507
|
||||
msgid "Domain Name Regex"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:504
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:505
|
||||
msgid "Domain Name Suffix"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:168
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:169
|
||||
msgid "Edit Authentications"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:222
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:223
|
||||
msgid "Edit DNS Hijacks"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:254
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:255
|
||||
msgid "Edit Fake-IP Filters"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:297
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:298
|
||||
msgid "Edit Hosts"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:339
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:340
|
||||
msgid "Edit Nameserver Policies"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:316
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:317
|
||||
msgid "Edit Nameservers"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:419
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:420
|
||||
msgid "Edit Rule Providers"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:488
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:489
|
||||
msgid "Edit Rules"
|
||||
msgstr ""
|
||||
|
||||
|
@ -281,34 +268,38 @@ msgstr ""
|
|||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:74
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:80
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:86
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:133
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:141
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:176
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:207
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:217
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:239
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:268
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:274
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:280
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:286
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:292
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:305
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:324
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:347
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:357
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:361
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:367
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:373
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:399
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:427
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:496
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:559
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:567
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:134
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:142
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:177
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:208
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:218
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:240
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:269
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:275
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:281
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:287
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:293
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:306
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:325
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:348
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:358
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:362
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:368
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:374
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:400
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:428
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:497
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:560
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:568
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:33
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:66
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:75
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:102
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:120
|
||||
msgid "Enable"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:213
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:214
|
||||
msgid "Endpoint Independent NAT"
|
||||
msgstr ""
|
||||
|
||||
|
@ -320,11 +311,11 @@ msgstr ""
|
|||
msgid "External Control Config"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:264
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:265
|
||||
msgid "Fake-IP Cache"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:258
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:259
|
||||
msgid "Fake-IP Filter Mode"
|
||||
msgstr ""
|
||||
|
||||
|
@ -332,7 +323,7 @@ msgstr ""
|
|||
msgid "Fake-IP Ping Hijack"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:246
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:247
|
||||
msgid "Fake-IP Range"
|
||||
msgstr ""
|
||||
|
||||
|
@ -340,15 +331,15 @@ msgstr ""
|
|||
msgid "Fast Reload"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:466
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:467
|
||||
msgid "File Format"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:460
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:461
|
||||
msgid "File Path"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:454
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:455
|
||||
msgid "File Size Limit"
|
||||
msgstr ""
|
||||
|
||||
|
@ -369,15 +360,15 @@ msgstr ""
|
|||
msgid "File:"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:378
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:379
|
||||
msgid "Force Sniff Domain Name"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:203
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:204
|
||||
msgid "GSO"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:209
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:210
|
||||
msgid "GSO Max Size"
|
||||
msgstr ""
|
||||
|
||||
|
@ -389,39 +380,39 @@ msgstr ""
|
|||
msgid "Generate & Download"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:537
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:538
|
||||
msgid "GeoData Loader"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:531
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:532
|
||||
msgid "GeoIP Format"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:552
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:553
|
||||
msgid "GeoIP(ASN) Url"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:549
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:550
|
||||
msgid "GeoIP(DAT) Url"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:546
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:547
|
||||
msgid "GeoIP(MMDB) Url"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:543
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:544
|
||||
msgid "GeoSite Url"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:555
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:556
|
||||
msgid "GeoX Auto Update"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:529
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:530
|
||||
msgid "GeoX Config"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:561
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:562
|
||||
msgid "GeoX Update Interval"
|
||||
msgstr ""
|
||||
|
||||
|
@ -437,7 +428,11 @@ msgstr ""
|
|||
msgid "Grant access to nikki procedures"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:143
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:85
|
||||
msgid "Group"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:144
|
||||
msgid "HTTP Port"
|
||||
msgstr ""
|
||||
|
||||
|
@ -445,10 +440,6 @@ msgstr ""
|
|||
msgid "How To Use"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:311
|
||||
msgid "IP"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:49
|
||||
msgid "IPv4 DNS Hijack"
|
||||
msgstr ""
|
||||
|
@ -457,11 +448,6 @@ msgstr ""
|
|||
msgid "IPv4 Proxy"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:64
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:235
|
||||
msgid "IPv6"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:52
|
||||
msgid "IPv6 DNS Hijack"
|
||||
msgstr ""
|
||||
|
@ -470,20 +456,20 @@ msgstr ""
|
|||
msgid "IPv6 Proxy"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:385
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:386
|
||||
msgid "Ignore Sniff Domain Name"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:135
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:136
|
||||
msgid "Inbound Config"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:117
|
||||
msgid "Interface"
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:104
|
||||
msgid "Inbound Interface"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:67
|
||||
msgid "Lan Proxy"
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:100
|
||||
msgid "LAN Proxy"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/profile.js:82
|
||||
|
@ -499,7 +485,7 @@ msgstr ""
|
|||
msgid "Log Level"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:199
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:200
|
||||
msgid "MTU"
|
||||
msgstr ""
|
||||
|
||||
|
@ -507,16 +493,16 @@ msgstr ""
|
|||
msgid "Match Process"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:350
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:513
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:351
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:514
|
||||
msgid "Matcher"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:541
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:542
|
||||
msgid "Memory Conservative Loader"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:151
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:152
|
||||
msgid "Mixed Port"
|
||||
msgstr ""
|
||||
|
||||
|
@ -524,7 +510,7 @@ msgstr ""
|
|||
msgid "Mixin Config"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:565
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:566
|
||||
msgid "Mixin File Content"
|
||||
msgstr ""
|
||||
|
||||
|
@ -533,16 +519,15 @@ msgid "Mixin Option"
|
|||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:39
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:72
|
||||
msgid "Mode"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:433
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:434
|
||||
msgid "Name"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:334
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:353
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:335
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:354
|
||||
msgid "Nameserver"
|
||||
msgstr ""
|
||||
|
||||
|
@ -551,12 +536,12 @@ msgstr ""
|
|||
msgid "Nikki"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:523
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:524
|
||||
msgid "No Resolve"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:447
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:516
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:448
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:517
|
||||
msgid "Node"
|
||||
msgstr ""
|
||||
|
||||
|
@ -572,55 +557,55 @@ msgstr ""
|
|||
msgid "Outbound Interface"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:165
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:166
|
||||
msgid "Overwrite Authentication"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:219
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:220
|
||||
msgid "Overwrite DNS Hijack"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:411
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:412
|
||||
msgid "Overwrite Destination"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:251
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:252
|
||||
msgid "Overwrite Fake-IP Filter"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:375
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:376
|
||||
msgid "Overwrite Force Sniff Domain Name"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:294
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:295
|
||||
msgid "Overwrite Hosts"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:382
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:383
|
||||
msgid "Overwrite Ignore Sniff Domain Name"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:313
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:314
|
||||
msgid "Overwrite Nameserver"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:336
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:337
|
||||
msgid "Overwrite Nameserver Policy"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:389
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:390
|
||||
msgid "Overwrite Sniff By Protocol"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:182
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:183
|
||||
msgid "Password"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:567
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:568
|
||||
msgid "Please go to the editor tab to edit the file for mixin"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:408
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:409
|
||||
msgid "Port"
|
||||
msgstr ""
|
||||
|
||||
|
@ -628,7 +613,7 @@ msgstr ""
|
|||
msgid "Prefer"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:509
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:510
|
||||
msgid "Process Name"
|
||||
msgstr ""
|
||||
|
||||
|
@ -641,11 +626,17 @@ msgstr ""
|
|||
msgid "Profile for Startup"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:402
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:403
|
||||
msgid "Protocol"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:97
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:152
|
||||
msgid "Proxy"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:29
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:31
|
||||
#: applications/luci-app-nikki/root/usr/share/luci/menu.d/luci-app-nikki.json:37
|
||||
msgid "Proxy Config"
|
||||
msgstr ""
|
||||
|
@ -662,7 +653,7 @@ msgstr ""
|
|||
msgid "Redirect Mode"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:155
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:156
|
||||
msgid "Redirect Port"
|
||||
msgstr ""
|
||||
|
||||
|
@ -674,7 +665,7 @@ msgstr ""
|
|||
msgid "Remote"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:270
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:271
|
||||
msgid "Respect Rules"
|
||||
msgstr ""
|
||||
|
||||
|
@ -686,7 +677,7 @@ msgstr ""
|
|||
msgid "Router Proxy"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:414
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:415
|
||||
msgid "Rule Config"
|
||||
msgstr ""
|
||||
|
||||
|
@ -698,7 +689,7 @@ msgstr ""
|
|||
msgid "Rule Provider:"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:502
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:503
|
||||
msgid "Rule Set"
|
||||
msgstr ""
|
||||
|
||||
|
@ -706,11 +697,11 @@ msgstr ""
|
|||
msgid "Running"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:147
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:148
|
||||
msgid "SOCKS Port"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:129
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:130
|
||||
msgid "Save Proxy Selection"
|
||||
msgstr ""
|
||||
|
||||
|
@ -723,27 +714,27 @@ msgstr ""
|
|||
msgid "Scroll To Bottom"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:392
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:393
|
||||
msgid "Sniff By Protocol"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:369
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:370
|
||||
msgid "Sniff Pure IP"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:363
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:364
|
||||
msgid "Sniff Redir-Host"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:355
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:356
|
||||
msgid "Sniffer Config"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:192
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:193
|
||||
msgid "Stack"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:540
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:541
|
||||
msgid "Standard Loader"
|
||||
msgstr ""
|
||||
|
||||
|
@ -785,7 +776,7 @@ msgid "TCP Keep Alive Interval"
|
|||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:36
|
||||
msgid "TCP Proxy Mode"
|
||||
msgid "TCP Mode"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:40
|
||||
|
@ -793,11 +784,11 @@ msgstr ""
|
|||
msgid "TPROXY Mode"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:160
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:161
|
||||
msgid "TPROXY Port"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:186
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:187
|
||||
msgid "TUN Config"
|
||||
msgstr ""
|
||||
|
||||
|
@ -814,22 +805,18 @@ msgstr ""
|
|||
msgid "Total"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:31
|
||||
msgid "Transparent Proxy"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/app.js:38
|
||||
msgid "Transparent Proxy with Mihomo on OpenWrt."
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:327
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:436
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:500
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:328
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:437
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:501
|
||||
msgid "Type"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:43
|
||||
msgid "UDP Proxy Mode"
|
||||
msgid "UDP Mode"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:110
|
||||
|
@ -862,42 +849,42 @@ msgstr ""
|
|||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:107
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:111
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:114
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:122
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:127
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:131
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:139
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:145
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:149
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:153
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:157
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:162
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:189
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:194
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:201
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:205
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:211
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:215
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:232
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:237
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:242
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:248
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:260
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:266
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:272
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:278
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:284
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:290
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:359
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:365
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:371
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:533
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:539
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:544
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:547
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:550
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:553
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:557
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:563
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:123
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:128
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:132
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:140
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:146
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:150
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:154
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:158
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:163
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:190
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:195
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:202
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:206
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:212
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:216
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:233
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:238
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:243
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:249
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:261
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:267
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:273
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:279
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:285
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:291
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:360
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:366
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:372
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:534
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:540
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:545
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:548
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:551
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:554
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:558
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:564
|
||||
msgid "Unmodified"
|
||||
msgstr ""
|
||||
|
||||
|
@ -913,7 +900,7 @@ msgstr ""
|
|||
msgid "Update Dashboard"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:479
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:480
|
||||
msgid "Update Interval"
|
||||
msgstr ""
|
||||
|
||||
|
@ -921,15 +908,15 @@ msgstr ""
|
|||
msgid "Upload Profile"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:442
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:443
|
||||
msgid "Url"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:288
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:289
|
||||
msgid "Use Hosts"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:282
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:283
|
||||
msgid "Use System Hosts"
|
||||
msgstr ""
|
||||
|
||||
|
@ -937,10 +924,14 @@ msgstr ""
|
|||
msgid "Used"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:79
|
||||
msgid "User"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/profile.js:70
|
||||
msgid "User Agent"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:179
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:180
|
||||
msgid "Username"
|
||||
msgstr ""
|
||||
|
|
|
@ -8,33 +8,29 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:120
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:121
|
||||
msgid "API Listen"
|
||||
msgstr "API 监听"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:125
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:126
|
||||
msgid "API Secret"
|
||||
msgstr "API 密钥"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:70
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:69
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:114
|
||||
msgid "Access Control"
|
||||
msgstr "访问控制"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:73
|
||||
msgid "All Mode"
|
||||
msgstr "全部模式"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:159
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:164
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:162
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:167
|
||||
msgid "All Port"
|
||||
msgstr "全部端口"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:137
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:138
|
||||
msgid "Allow Lan"
|
||||
msgstr "允许局域网访问"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:262
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:74
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:263
|
||||
msgid "Allow Mode"
|
||||
msgstr "白名单模式"
|
||||
|
||||
|
@ -51,46 +47,37 @@ msgstr "插件日志"
|
|||
msgid "App Version"
|
||||
msgstr "插件版本"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:485
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:486
|
||||
msgid "Append Rule"
|
||||
msgstr "追加规则"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:416
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:417
|
||||
msgid "Append Rule Provider"
|
||||
msgstr "追加规则提供者"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:472
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:473
|
||||
msgid "Behavior"
|
||||
msgstr "行为"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:261
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:75
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:262
|
||||
msgid "Block Mode"
|
||||
msgstr "黑名单模式"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:131
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:155
|
||||
msgid "Bypass"
|
||||
msgstr "绕过"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:154
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:157
|
||||
msgid "Bypass China Mainland IP"
|
||||
msgstr "绕过中国大陆 IP"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:167
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:170
|
||||
msgid "Bypass DSCP"
|
||||
msgstr "绕过 DSCP"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:140
|
||||
msgid "Bypass Group"
|
||||
msgstr "绕过用户组"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:133
|
||||
msgid "Bypass User"
|
||||
msgstr "绕过用户"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:147
|
||||
msgid "Bypass cgroup"
|
||||
msgstr "绕过资源控制组"
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:91
|
||||
msgid "CGroup"
|
||||
msgstr "控制组"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/editor.js:29
|
||||
msgid "Choose File"
|
||||
|
@ -105,8 +92,8 @@ msgstr "选择配置文件"
|
|||
msgid "Clear Log"
|
||||
msgstr "清空日志"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:160
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:165
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:163
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:168
|
||||
msgid "Commonly Used Port"
|
||||
msgstr "常用端口"
|
||||
|
||||
|
@ -130,15 +117,15 @@ msgstr "核心版本"
|
|||
msgid "Cron Expression"
|
||||
msgstr "Cron 表达式"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:228
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:229
|
||||
msgid "DNS Config"
|
||||
msgstr "DNS 配置"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:230
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:231
|
||||
msgid "DNS Listen"
|
||||
msgstr "DNS 监听"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:241
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:242
|
||||
msgid "DNS Mode"
|
||||
msgstr "DNS 模式"
|
||||
|
||||
|
@ -146,27 +133,27 @@ msgstr "DNS 模式"
|
|||
msgid "Debug Log"
|
||||
msgstr "调试日志"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:507
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:508
|
||||
msgid "Destination IP"
|
||||
msgstr "目标 IP"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:511
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:512
|
||||
msgid "Destination IP Geo"
|
||||
msgstr "目标 IP(Geo)"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:508
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:509
|
||||
msgid "Destination Port"
|
||||
msgstr "目标端口"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:157
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:160
|
||||
msgid "Destination TCP Port to Proxy"
|
||||
msgstr "要代理的 TCP 目标端口"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:162
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:165
|
||||
msgid "Destination UDP Port to Proxy"
|
||||
msgstr "要代理的 UDP 目标端口"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:188
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:189
|
||||
msgid "Device Name"
|
||||
msgstr "设备名称"
|
||||
|
||||
|
@ -178,20 +165,20 @@ msgstr "直连模式"
|
|||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:73
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:79
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:85
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:132
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:140
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:206
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:216
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:238
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:267
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:273
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:279
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:285
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:291
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:360
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:366
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:372
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:558
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:133
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:141
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:207
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:217
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:239
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:268
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:274
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:280
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:286
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:292
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:361
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:367
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:373
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:559
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:38
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:45
|
||||
msgid "Disable"
|
||||
|
@ -217,60 +204,60 @@ msgstr "禁用安全路径检查"
|
|||
msgid "Disable TCP Keep Alive"
|
||||
msgstr "禁用 TCP Keep Alive"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:276
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:277
|
||||
msgid "DoH Prefer HTTP/3"
|
||||
msgstr "DoH 优先 HTTP/3"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:308
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:503
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:309
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:504
|
||||
msgid "Domain Name"
|
||||
msgstr "域名"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:510
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:511
|
||||
msgid "Domain Name Geo"
|
||||
msgstr "域名(Geo)"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:505
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:506
|
||||
msgid "Domain Name Keyword"
|
||||
msgstr "域名(关键字)"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:506
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:507
|
||||
msgid "Domain Name Regex"
|
||||
msgstr "域名(正则表达式)"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:504
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:505
|
||||
msgid "Domain Name Suffix"
|
||||
msgstr "域名(后缀)"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:168
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:169
|
||||
msgid "Edit Authentications"
|
||||
msgstr "编辑身份验证"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:222
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:223
|
||||
msgid "Edit DNS Hijacks"
|
||||
msgstr "编辑 DNS 劫持"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:254
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:255
|
||||
msgid "Edit Fake-IP Filters"
|
||||
msgstr "编辑 Fake-IP 过滤列表"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:297
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:298
|
||||
msgid "Edit Hosts"
|
||||
msgstr "编辑 Hosts"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:339
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:340
|
||||
msgid "Edit Nameserver Policies"
|
||||
msgstr "编辑 DNS 服务器查询策略"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:316
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:317
|
||||
msgid "Edit Nameservers"
|
||||
msgstr "编辑 DNS 服务器"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:419
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:420
|
||||
msgid "Edit Rule Providers"
|
||||
msgstr "编辑规则提供者"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:488
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:489
|
||||
msgid "Edit Rules"
|
||||
msgstr "编辑规则"
|
||||
|
||||
|
@ -288,34 +275,38 @@ msgstr "编辑器"
|
|||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:74
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:80
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:86
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:133
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:141
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:176
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:207
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:217
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:239
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:268
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:274
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:280
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:286
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:292
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:305
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:324
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:347
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:357
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:361
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:367
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:373
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:399
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:427
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:496
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:559
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:567
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:134
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:142
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:177
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:208
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:218
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:240
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:269
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:275
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:281
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:287
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:293
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:306
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:325
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:348
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:358
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:362
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:368
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:374
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:400
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:428
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:497
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:560
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:568
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:33
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:66
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:75
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:102
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:120
|
||||
msgid "Enable"
|
||||
msgstr "启用"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:213
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:214
|
||||
msgid "Endpoint Independent NAT"
|
||||
msgstr "独立于端点的 NAT"
|
||||
|
||||
|
@ -327,11 +318,11 @@ msgstr "到期时间"
|
|||
msgid "External Control Config"
|
||||
msgstr "外部控制配置"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:264
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:265
|
||||
msgid "Fake-IP Cache"
|
||||
msgstr "Fake-IP 缓存"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:258
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:259
|
||||
msgid "Fake-IP Filter Mode"
|
||||
msgstr "Fake-IP 过滤模式"
|
||||
|
||||
|
@ -339,7 +330,7 @@ msgstr "Fake-IP 过滤模式"
|
|||
msgid "Fake-IP Ping Hijack"
|
||||
msgstr "Fake-IP Ping 劫持"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:246
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:247
|
||||
msgid "Fake-IP Range"
|
||||
msgstr "Fake-IP 范围"
|
||||
|
||||
|
@ -347,15 +338,15 @@ msgstr "Fake-IP 范围"
|
|||
msgid "Fast Reload"
|
||||
msgstr "快速重载"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:466
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:467
|
||||
msgid "File Format"
|
||||
msgstr "文件格式"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:460
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:461
|
||||
msgid "File Path"
|
||||
msgstr "文件路径"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:454
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:455
|
||||
msgid "File Size Limit"
|
||||
msgstr "文件大小限制"
|
||||
|
||||
|
@ -376,15 +367,15 @@ msgstr "IPv6 保留地址"
|
|||
msgid "File:"
|
||||
msgstr "文件:"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:378
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:379
|
||||
msgid "Force Sniff Domain Name"
|
||||
msgstr "强制嗅探的域名"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:203
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:204
|
||||
msgid "GSO"
|
||||
msgstr "通用分段卸载"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:209
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:210
|
||||
msgid "GSO Max Size"
|
||||
msgstr "分段最大长度"
|
||||
|
||||
|
@ -396,39 +387,39 @@ msgstr "全局配置"
|
|||
msgid "Generate & Download"
|
||||
msgstr "生成并下载"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:537
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:538
|
||||
msgid "GeoData Loader"
|
||||
msgstr "GeoData 加载器"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:531
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:532
|
||||
msgid "GeoIP Format"
|
||||
msgstr "GeoIP 格式"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:552
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:553
|
||||
msgid "GeoIP(ASN) Url"
|
||||
msgstr "GeoIP(ASN) 下载地址"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:549
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:550
|
||||
msgid "GeoIP(DAT) Url"
|
||||
msgstr "GeoIP(DAT) 下载地址"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:546
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:547
|
||||
msgid "GeoIP(MMDB) Url"
|
||||
msgstr "GeoIP(MMDB) 下载地址"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:543
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:544
|
||||
msgid "GeoSite Url"
|
||||
msgstr "GeoSite 下载地址"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:555
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:556
|
||||
msgid "GeoX Auto Update"
|
||||
msgstr "定时更新GeoX文件"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:529
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:530
|
||||
msgid "GeoX Config"
|
||||
msgstr "GeoX 配置"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:561
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:562
|
||||
msgid "GeoX Update Interval"
|
||||
msgstr "GeoX 文件更新间隔"
|
||||
|
||||
|
@ -444,7 +435,11 @@ msgstr "全局模式"
|
|||
msgid "Grant access to nikki procedures"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:143
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:85
|
||||
msgid "Group"
|
||||
msgstr "用户组"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:144
|
||||
msgid "HTTP Port"
|
||||
msgstr "HTTP 端口"
|
||||
|
||||
|
@ -452,10 +447,6 @@ msgstr "HTTP 端口"
|
|||
msgid "How To Use"
|
||||
msgstr "使用说明"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:311
|
||||
msgid "IP"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:49
|
||||
msgid "IPv4 DNS Hijack"
|
||||
msgstr "IPv4 DNS 劫持"
|
||||
|
@ -464,11 +455,6 @@ msgstr "IPv4 DNS 劫持"
|
|||
msgid "IPv4 Proxy"
|
||||
msgstr "IPv4 代理"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:64
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:235
|
||||
msgid "IPv6"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:52
|
||||
msgid "IPv6 DNS Hijack"
|
||||
msgstr "IPv6 DNS 劫持"
|
||||
|
@ -477,20 +463,20 @@ msgstr "IPv6 DNS 劫持"
|
|||
msgid "IPv6 Proxy"
|
||||
msgstr "IPv6 代理"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:385
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:386
|
||||
msgid "Ignore Sniff Domain Name"
|
||||
msgstr "忽略嗅探的域名"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:135
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:136
|
||||
msgid "Inbound Config"
|
||||
msgstr "入站配置"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:117
|
||||
msgid "Interface"
|
||||
msgstr "接口"
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:104
|
||||
msgid "Inbound Interface"
|
||||
msgstr "入站接口"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:67
|
||||
msgid "Lan Proxy"
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:100
|
||||
msgid "LAN Proxy"
|
||||
msgstr "局域网代理"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/profile.js:82
|
||||
|
@ -506,7 +492,7 @@ msgstr "日志"
|
|||
msgid "Log Level"
|
||||
msgstr "日志级别"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:199
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:200
|
||||
msgid "MTU"
|
||||
msgstr "最大传输单元"
|
||||
|
||||
|
@ -514,16 +500,16 @@ msgstr "最大传输单元"
|
|||
msgid "Match Process"
|
||||
msgstr "匹配进程"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:350
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:513
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:351
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:514
|
||||
msgid "Matcher"
|
||||
msgstr "匹配"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:541
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:542
|
||||
msgid "Memory Conservative Loader"
|
||||
msgstr "为内存受限设备优化的加载器"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:151
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:152
|
||||
msgid "Mixed Port"
|
||||
msgstr "混合端口"
|
||||
|
||||
|
@ -531,7 +517,7 @@ msgstr "混合端口"
|
|||
msgid "Mixin Config"
|
||||
msgstr "混入配置"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:565
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:566
|
||||
msgid "Mixin File Content"
|
||||
msgstr "混入文件内容"
|
||||
|
||||
|
@ -540,16 +526,15 @@ msgid "Mixin Option"
|
|||
msgstr "混入选项"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:39
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:72
|
||||
msgid "Mode"
|
||||
msgstr "模式"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:433
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:434
|
||||
msgid "Name"
|
||||
msgstr "名称"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:334
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:353
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:335
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:354
|
||||
msgid "Nameserver"
|
||||
msgstr "DNS 服务器"
|
||||
|
||||
|
@ -558,12 +543,12 @@ msgstr "DNS 服务器"
|
|||
msgid "Nikki"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:523
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:524
|
||||
msgid "No Resolve"
|
||||
msgstr "不解析"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:447
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:516
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:448
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:517
|
||||
msgid "Node"
|
||||
msgstr "节点"
|
||||
|
||||
|
@ -579,55 +564,55 @@ msgstr "打开面板"
|
|||
msgid "Outbound Interface"
|
||||
msgstr "出站接口"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:165
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:166
|
||||
msgid "Overwrite Authentication"
|
||||
msgstr "覆盖身份验证"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:219
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:220
|
||||
msgid "Overwrite DNS Hijack"
|
||||
msgstr "覆盖 DNS 劫持"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:411
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:412
|
||||
msgid "Overwrite Destination"
|
||||
msgstr "将嗅探结果作为连接目标"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:251
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:252
|
||||
msgid "Overwrite Fake-IP Filter"
|
||||
msgstr "覆盖 Fake-IP 过滤列表"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:375
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:376
|
||||
msgid "Overwrite Force Sniff Domain Name"
|
||||
msgstr "覆盖强制嗅探的域名"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:294
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:295
|
||||
msgid "Overwrite Hosts"
|
||||
msgstr "覆盖 Hosts"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:382
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:383
|
||||
msgid "Overwrite Ignore Sniff Domain Name"
|
||||
msgstr "覆盖忽略嗅探的域名"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:313
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:314
|
||||
msgid "Overwrite Nameserver"
|
||||
msgstr "覆盖 DNS 服务器"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:336
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:337
|
||||
msgid "Overwrite Nameserver Policy"
|
||||
msgstr "覆盖 DNS 服务器查询策略"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:389
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:390
|
||||
msgid "Overwrite Sniff By Protocol"
|
||||
msgstr "覆盖按协议嗅探"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:182
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:183
|
||||
msgid "Password"
|
||||
msgstr "密码"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:567
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:568
|
||||
msgid "Please go to the editor tab to edit the file for mixin"
|
||||
msgstr "请前往编辑器标签编辑用于混入的文件"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:408
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:409
|
||||
msgid "Port"
|
||||
msgstr "端口"
|
||||
|
||||
|
@ -635,7 +620,7 @@ msgstr "端口"
|
|||
msgid "Prefer"
|
||||
msgstr "优先"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:509
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:510
|
||||
msgid "Process Name"
|
||||
msgstr "进程名"
|
||||
|
||||
|
@ -648,11 +633,17 @@ msgstr "配置文件"
|
|||
msgid "Profile for Startup"
|
||||
msgstr "用于启动的配置文件"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:402
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:403
|
||||
msgid "Protocol"
|
||||
msgstr "协议"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:97
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:152
|
||||
msgid "Proxy"
|
||||
msgstr "代理"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:29
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:31
|
||||
#: applications/luci-app-nikki/root/usr/share/luci/menu.d/luci-app-nikki.json:37
|
||||
msgid "Proxy Config"
|
||||
msgstr "代理配置"
|
||||
|
@ -669,7 +660,7 @@ msgstr "随机"
|
|||
msgid "Redirect Mode"
|
||||
msgstr "Redirect 模式"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:155
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:156
|
||||
msgid "Redirect Port"
|
||||
msgstr "Redirect 端口"
|
||||
|
||||
|
@ -681,7 +672,7 @@ msgstr "重载服务"
|
|||
msgid "Remote"
|
||||
msgstr "远程"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:270
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:271
|
||||
msgid "Respect Rules"
|
||||
msgstr "遵循分流规则"
|
||||
|
||||
|
@ -693,7 +684,7 @@ msgstr "重启服务"
|
|||
msgid "Router Proxy"
|
||||
msgstr "路由器代理"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:414
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:415
|
||||
msgid "Rule Config"
|
||||
msgstr "规则配置"
|
||||
|
||||
|
@ -705,7 +696,7 @@ msgstr "规则模式"
|
|||
msgid "Rule Provider:"
|
||||
msgstr "规则提供者:"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:502
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:503
|
||||
msgid "Rule Set"
|
||||
msgstr "规则集"
|
||||
|
||||
|
@ -713,11 +704,11 @@ msgstr "规则集"
|
|||
msgid "Running"
|
||||
msgstr "运行中"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:147
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:148
|
||||
msgid "SOCKS Port"
|
||||
msgstr "SOCKS 端口"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:129
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:130
|
||||
msgid "Save Proxy Selection"
|
||||
msgstr "保存节点/策略组选择"
|
||||
|
||||
|
@ -730,27 +721,27 @@ msgstr "定时重启"
|
|||
msgid "Scroll To Bottom"
|
||||
msgstr "滚动到底部"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:392
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:393
|
||||
msgid "Sniff By Protocol"
|
||||
msgstr "按协议嗅探"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:369
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:370
|
||||
msgid "Sniff Pure IP"
|
||||
msgstr "嗅探纯 IP 连接"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:363
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:364
|
||||
msgid "Sniff Redir-Host"
|
||||
msgstr "嗅探 Redir-Host 流量"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:355
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:356
|
||||
msgid "Sniffer Config"
|
||||
msgstr "嗅探器配置"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:192
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:193
|
||||
msgid "Stack"
|
||||
msgstr "栈"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:540
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:541
|
||||
msgid "Standard Loader"
|
||||
msgstr "标准加载器"
|
||||
|
||||
|
@ -792,19 +783,19 @@ msgid "TCP Keep Alive Interval"
|
|||
msgstr "TCP Keep Alive 间隔"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:36
|
||||
msgid "TCP Proxy Mode"
|
||||
msgstr "TCP 代理模式"
|
||||
msgid "TCP Mode"
|
||||
msgstr "TCP 模式"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:40
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:46
|
||||
msgid "TPROXY Mode"
|
||||
msgstr "TPROXY 模式"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:160
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:161
|
||||
msgid "TPROXY Port"
|
||||
msgstr "TPROXY 端口"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:186
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:187
|
||||
msgid "TUN Config"
|
||||
msgstr "TUN 配置"
|
||||
|
||||
|
@ -821,23 +812,19 @@ msgstr "检查配置文件"
|
|||
msgid "Total"
|
||||
msgstr "总量"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:31
|
||||
msgid "Transparent Proxy"
|
||||
msgstr "透明代理"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/app.js:38
|
||||
msgid "Transparent Proxy with Mihomo on OpenWrt."
|
||||
msgstr "在 OpenWrt 上使用 Mihomo 进行透明代理。"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:327
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:436
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:500
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:328
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:437
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:501
|
||||
msgid "Type"
|
||||
msgstr "类型"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:43
|
||||
msgid "UDP Proxy Mode"
|
||||
msgstr "UDP 代理模式"
|
||||
msgid "UDP Mode"
|
||||
msgstr "UDP 模式"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:110
|
||||
msgid "UI Name"
|
||||
|
@ -869,42 +856,42 @@ msgstr "统一延迟"
|
|||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:107
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:111
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:114
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:122
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:127
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:131
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:139
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:145
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:149
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:153
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:157
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:162
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:189
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:194
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:201
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:205
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:211
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:215
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:232
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:237
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:242
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:248
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:260
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:266
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:272
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:278
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:284
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:290
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:359
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:365
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:371
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:533
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:539
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:544
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:547
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:550
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:553
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:557
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:563
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:123
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:128
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:132
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:140
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:146
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:150
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:154
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:158
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:163
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:190
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:195
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:202
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:206
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:212
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:216
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:233
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:238
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:243
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:249
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:261
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:267
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:273
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:279
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:285
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:291
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:360
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:366
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:372
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:534
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:540
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:545
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:548
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:551
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:554
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:558
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:564
|
||||
msgid "Unmodified"
|
||||
msgstr "不修改"
|
||||
|
||||
|
@ -920,7 +907,7 @@ msgstr "更新时间"
|
|||
msgid "Update Dashboard"
|
||||
msgstr "更新面板"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:479
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:480
|
||||
msgid "Update Interval"
|
||||
msgstr "更新间隔"
|
||||
|
||||
|
@ -928,15 +915,15 @@ msgstr "更新间隔"
|
|||
msgid "Upload Profile"
|
||||
msgstr "上传配置文件"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:442
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:443
|
||||
msgid "Url"
|
||||
msgstr "下载地址"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:288
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:289
|
||||
msgid "Use Hosts"
|
||||
msgstr "使用 Hosts"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:282
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:283
|
||||
msgid "Use System Hosts"
|
||||
msgstr "使用系统的 Hosts"
|
||||
|
||||
|
@ -944,10 +931,14 @@ msgstr "使用系统的 Hosts"
|
|||
msgid "Used"
|
||||
msgstr "已使用"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:79
|
||||
msgid "User"
|
||||
msgstr "用户"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/profile.js:70
|
||||
msgid "User Agent"
|
||||
msgstr "用户代理(UA)"
|
||||
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:179
|
||||
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:180
|
||||
msgid "Username"
|
||||
msgstr "用户名"
|
||||
|
|
|
@ -59,8 +59,8 @@ const methods = {
|
|||
},
|
||||
get_identifiers: {
|
||||
call: function() {
|
||||
const users = filter(get_users(), (x) => x != '' && x != 'root');
|
||||
const groups = filter(get_groups(), (x) => x != '' && x != 'root');
|
||||
const users = filter(get_users(), (x) => x != '');
|
||||
const groups = filter(get_groups(), (x) => x != '');
|
||||
const cgroups = filter(get_cgroups(), (x) => x != '' && x != 'nikki');
|
||||
return { users: users, groups: groups, cgroups: cgroups };
|
||||
}
|
||||
|
|
|
@ -5,9 +5,9 @@ PKG_RELEASE:=1
|
|||
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_URL:=https://github.com/MetaCubeX/mihomo.git
|
||||
PKG_SOURCE_DATE:=2025-04-06
|
||||
PKG_SOURCE_VERSION:=9e8f4ada4754ae95b002535acbeb457e40b06731
|
||||
PKG_MIRROR_HASH:=1c8a7d70de0cb903b58eca1937b6561003cae7e76f9f021fd3eb9007b6a1f65f
|
||||
PKG_SOURCE_DATE:=2025-04-12
|
||||
PKG_SOURCE_VERSION:=cedb36df5fe58d5d972b1507c1ab656aca5f046d
|
||||
PKG_MIRROR_HASH:=b2f9fe4e2ebd38036eac0f2c5af79362cb2afbb780c36c236259ecace9db11da
|
||||
|
||||
PKG_LICENSE:=GPL3.0+
|
||||
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-9e8f4ad
|
||||
PKG_BUILD_VERSION:=alpha-cedb36d
|
||||
PKG_BUILD_TIME:=$(shell date -u -Iseconds)
|
||||
|
||||
GO_PKG:=github.com/metacubex/mihomo
|
||||
|
|
|
@ -10,9 +10,9 @@ config config 'config'
|
|||
option 'test_profile' '1'
|
||||
|
||||
config proxy 'proxy'
|
||||
option 'transparent_proxy' '1'
|
||||
option 'tcp_transparent_proxy_mode' 'redirect'
|
||||
option 'udp_transparent_proxy_mode' 'tun'
|
||||
option 'enabled' '1'
|
||||
option 'tcp_mode' 'redirect'
|
||||
option 'udp_mode' 'tun'
|
||||
option 'ipv4_dns_hijack' '1'
|
||||
option 'ipv6_dns_hijack' '1'
|
||||
option 'ipv4_proxy' '1'
|
||||
|
@ -20,30 +20,7 @@ config proxy 'proxy'
|
|||
option 'fake_ip_ping_hijack' '1'
|
||||
option 'router_proxy' '1'
|
||||
option 'lan_proxy' '1'
|
||||
option 'access_control_mode' 'all'
|
||||
option 'acl_ip' ''
|
||||
option 'acl_ip6' ''
|
||||
option 'acl_mac' ''
|
||||
option 'acl_interface' ''
|
||||
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' 'dnsmasq'
|
||||
list 'bypass_group' 'ftp'
|
||||
list 'bypass_group' 'logd'
|
||||
list 'bypass_group' 'nogroup'
|
||||
list 'bypass_group' 'ntp'
|
||||
list 'bypass_group' 'ubus'
|
||||
list 'bypass_cgroup' 'adguardhome'
|
||||
list 'bypass_cgroup' 'aria2'
|
||||
list 'bypass_cgroup' 'dnsmasq'
|
||||
list 'bypass_cgroup' 'netbird'
|
||||
list 'bypass_cgroup' 'qbittorrent'
|
||||
list 'bypass_cgroup' 'tailscale'
|
||||
list 'bypass_cgroup' 'zerotier'
|
||||
list 'lan_inbound_interface' 'lan'
|
||||
list 'bypass_dscp' '4'
|
||||
option 'bypass_china_mainland_ip' '0'
|
||||
option 'proxy_tcp_dport' '0-65535'
|
||||
|
@ -100,6 +77,38 @@ config env 'env'
|
|||
option 'disable_quic_go_gso' '0'
|
||||
option 'disable_quic_go_ecn' '0'
|
||||
|
||||
config router_access_control
|
||||
option 'enabled' '1'
|
||||
list 'user' 'dnsmasq'
|
||||
list 'user' 'ftp'
|
||||
list 'user' 'logd'
|
||||
list 'user' 'nobody'
|
||||
list 'user' 'ntp'
|
||||
list 'user' 'ubus'
|
||||
list 'group' 'dnsmasq'
|
||||
list 'group' 'ftp'
|
||||
list 'group' 'logd'
|
||||
list 'group' 'nogroup'
|
||||
list 'group' 'ntp'
|
||||
list 'group' 'ubus'
|
||||
list 'cgroup' 'adguardhome'
|
||||
list 'cgroup' 'aria2'
|
||||
list 'cgroup' 'dnsmasq'
|
||||
list 'cgroup' 'netbird'
|
||||
list 'cgroup' 'qbittorrent'
|
||||
list 'cgroup' 'sysntpd'
|
||||
list 'cgroup' 'tailscale'
|
||||
list 'cgroup' 'zerotier'
|
||||
option 'proxy' '0'
|
||||
|
||||
config router_access_control
|
||||
option 'enabled' '1'
|
||||
option 'proxy' '1'
|
||||
|
||||
config lan_access_control
|
||||
option 'enabled' '1'
|
||||
option 'proxy' '1'
|
||||
|
||||
config authentication
|
||||
option 'enabled' '1'
|
||||
option 'username' 'nikki'
|
||||
|
|
|
@ -143,11 +143,11 @@ service_started() {
|
|||
fi
|
||||
# load config
|
||||
config_load nikki
|
||||
# check if transparent proxy enabled
|
||||
local transparent_proxy
|
||||
config_get_bool transparent_proxy "proxy" "transparent_proxy" 0
|
||||
if [ "$transparent_proxy" == 0 ]; then
|
||||
log "Transparent Proxy" "Disabled."
|
||||
# check if proxy enabled
|
||||
local enabled
|
||||
config_get_bool enabled "proxy" "enabled" 0
|
||||
if [ "$enabled" == 0 ]; then
|
||||
log "Proxy" "Disabled."
|
||||
return
|
||||
fi
|
||||
# get config
|
||||
|
@ -156,19 +156,19 @@ service_started() {
|
|||
local tun_device
|
||||
config_get tun_device "mixin" "tun_device" "nikki"
|
||||
## proxy config
|
||||
### transparent proxy
|
||||
local tcp_transparent_proxy_mode udp_transparent_proxy_mode ipv4_proxy ipv6_proxy
|
||||
config_get tcp_transparent_proxy_mode "proxy" "tcp_transparent_proxy_mode"
|
||||
config_get udp_transparent_proxy_mode "proxy" "udp_transparent_proxy_mode"
|
||||
### general
|
||||
local tcp_mode udp_mode ipv4_proxy ipv6_proxy
|
||||
config_get tcp_mode "proxy" "tcp_mode"
|
||||
config_get udp_mode "proxy" "udp_mode"
|
||||
config_get_bool ipv4_proxy "proxy" "ipv4_proxy" 0
|
||||
config_get_bool ipv6_proxy "proxy" "ipv6_proxy" 0
|
||||
# prepare config
|
||||
local tproxy_enable; tproxy_enable=0
|
||||
if [[ "$tcp_transparent_proxy_mode" == "tproxy" || "$udp_transparent_proxy_mode" == "tproxy" ]]; then
|
||||
if [[ "$tcp_mode" == "tproxy" || "$udp_mode" == "tproxy" ]]; then
|
||||
tproxy_enable=1
|
||||
fi
|
||||
local tun_enable; tun_enable=0
|
||||
if [[ "$tcp_transparent_proxy_mode" == "tun" || "$udp_transparent_proxy_mode" == "tun" ]]; then
|
||||
if [[ "$tcp_mode" == "tun" || "$udp_mode" == "tun" ]]; then
|
||||
tun_enable=1
|
||||
fi
|
||||
# fix compatible with dockerd
|
||||
|
@ -197,17 +197,17 @@ service_started() {
|
|||
fi
|
||||
fi
|
||||
fi
|
||||
# transparent proxy
|
||||
log "Transparent Proxy" "Enabled."
|
||||
# proxy
|
||||
log "Proxy" "Enabled."
|
||||
# wait for tun device online
|
||||
if [ "$tun_enable" == 1 ]; then
|
||||
log "Transparent Proxy" "Waiting for tun device online..."
|
||||
log "Proxy" "Waiting for tun device online..."
|
||||
local tun_timeout; tun_timeout=15
|
||||
local tun_interval; tun_interval=1
|
||||
while [ "$tun_timeout" -gt 0 ]; do
|
||||
if (ip link show dev "$tun_device" > /dev/null 2>&1); then
|
||||
if [ $(ip -json addr show dev "$tun_device" | tun_device="$tun_device" yq -M '.[] | select(.ifname = strenv(tun_device)) | .addr_info | length') -gt 0 ]; then
|
||||
log "Transparent Proxy" "Tun device is online."
|
||||
log "Proxy" "Tun device is online."
|
||||
break
|
||||
fi
|
||||
fi
|
||||
|
@ -215,7 +215,7 @@ service_started() {
|
|||
sleep "$tun_interval"
|
||||
done
|
||||
if [ "$tun_timeout" -le 0 ]; then
|
||||
log "Transparent Proxy" "Waiting timeout, tun device is not online."
|
||||
log "Proxy" "Waiting timeout, tun device is not online."
|
||||
log "App" "Exit."
|
||||
return
|
||||
fi
|
||||
|
@ -246,9 +246,9 @@ service_started() {
|
|||
utpl -D cgroup_name="$CGROUP_NAME" -D cgroup_id="$CGROUP_ID" -D tproxy_fw_mark="$TPROXY_FW_MARK" -D tun_fw_mark="$TUN_FW_MARK" -S "$HIJACK_UT" | nft -f -
|
||||
# check hijack
|
||||
if (nft list tables | grep -q nikki); then
|
||||
log "Transparent Proxy" "Hijack successful."
|
||||
log "Proxy" "Hijack successful."
|
||||
else
|
||||
log "Transparent Proxy" "Hijack failed."
|
||||
log "Proxy" "Hijack failed."
|
||||
log "App" "Exit."
|
||||
fi
|
||||
}
|
||||
|
|
|
@ -5,11 +5,11 @@
|
|||
|
||||
config_load nikki
|
||||
config_get enabled "config" "enabled" 0
|
||||
config_get tcp_transparent_proxy_mode "proxy" "tcp_transparent_proxy_mode"
|
||||
config_get udp_transparent_proxy_mode "proxy" "udp_transparent_proxy_mode"
|
||||
config_get tcp_mode "proxy" "tcp_mode"
|
||||
config_get udp_mode "proxy" "udp_mode"
|
||||
config_get tun_device "mixin" "tun_device"
|
||||
|
||||
if [ "$enabled" == 1 ] && [[ "$tcp_transparent_proxy_mode" == "tun" || "$udp_transparent_proxy_mode" == "tun" ]]; then
|
||||
if [ "$enabled" == 1 ] && [[ "$tcp_mode" == "tun" || "$udp_mode" == "tun" ]]; then
|
||||
nft insert rule inet fw4 input iifname "$tun_device" counter accept comment "nikki"
|
||||
nft insert rule inet fw4 forward oifname "$tun_device" counter accept comment "nikki"
|
||||
nft insert rule inet fw4 forward iifname "$tun_device" counter accept comment "nikki"
|
||||
|
|
|
@ -30,6 +30,82 @@ mixin_dns_port=$(uci -q get nikki.mixin.dns_port); [ -n "$mixin_dns_port" ] && {
|
|||
uci set nikki.mixin.dns_listen=[::]:$mixin_dns_port
|
||||
}
|
||||
|
||||
# since v1.22.0
|
||||
|
||||
proxy_transparent_proxy=$(uci -q get nikki.proxy.transparent_proxy); [ -n "$proxy_transparent_proxy" ] && {
|
||||
uci rename nikki.proxy.transparent_proxy=enabled
|
||||
uci rename nikki.proxy.tcp_transparent_proxy_mode=tcp_mode
|
||||
uci rename nikki.proxy.udp_transparent_proxy_mode=udp_mode
|
||||
|
||||
uci add nikki router_access_control
|
||||
uci set nikki.@router_access_control[-1].enabled=1
|
||||
proxy_bypass_user=$(uci -q get nikki.proxy.bypass_user); [ -n "$proxy_bypass_user" ] && {
|
||||
for user in $proxy_bypass_user; do
|
||||
uci add_list nikki.@router_access_control[-1].user="$user"
|
||||
done
|
||||
}
|
||||
proxy_bypass_group=$(uci -q get nikki.proxy.bypass_group); [ -n "$proxy_bypass_group" ] && {
|
||||
for group in $proxy_bypass_group; do
|
||||
uci add_list nikki.@router_access_control[-1].group="$group"
|
||||
done
|
||||
}
|
||||
proxy_bypass_cgroup=$(uci -q get nikki.proxy.bypass_cgroup); [ -n "$proxy_bypass_cgroup" ] && {
|
||||
for cgroup in $proxy_bypass_cgroup; do
|
||||
uci add_list nikki.@router_access_control[-1].cgroup="$cgroup"
|
||||
done
|
||||
}
|
||||
uci set nikki.@router_access_control[-1].proxy=0
|
||||
|
||||
uci add nikki router_access_control
|
||||
uci set nikki.@router_access_control[-1].enabled=1
|
||||
uci set nikki.@router_access_control[-1].proxy=1
|
||||
|
||||
uci add_list nikki.proxy.lan_inbound_interface=lan
|
||||
|
||||
proxy_access_control_mode=$(uci -q get nikki.proxy.access_control_mode); [ "$proxy_access_control_mode" != "all" ] && {
|
||||
proxy_acl_ip=$(uci -q get nikki.proxy.acl_ip); [ -n "$proxy_acl_ip" ] && {
|
||||
for ip in $proxy_acl_ip; do
|
||||
uci add nikki lan_access_control
|
||||
uci set nikki.@lan_access_control[-1].enabled=1
|
||||
uci add_list nikki.@lan_access_control[-1].ip="$ip"
|
||||
[ "$proxy_access_control_mode" == "allow" ] && uci set nikki.@lan_access_control[-1].proxy=1
|
||||
[ "$proxy_access_control_mode" == "block" ] && uci set nikki.@lan_access_control[-1].proxy=0
|
||||
done
|
||||
}
|
||||
proxy_acl_ip6=$(uci -q get nikki.proxy.acl_ip6); [ -n "$proxy_acl_ip6" ] && {
|
||||
for ip6 in $proxy_acl_ip6; do
|
||||
uci add nikki lan_access_control
|
||||
uci set nikki.@lan_access_control[-1].enabled=1
|
||||
uci add_list nikki.@lan_access_control[-1].ip6="$ip6"
|
||||
[ "$proxy_access_control_mode" == "allow" ] && uci set nikki.@lan_access_control[-1].proxy=1
|
||||
[ "$proxy_access_control_mode" == "block" ] && uci set nikki.@lan_access_control[-1].proxy=0
|
||||
done
|
||||
}
|
||||
proxy_acl_mac=$(uci -q get nikki.proxy.acl_mac); [ -n "$proxy_acl_mac" ] && {
|
||||
for mac in $proxy_acl_mac; do
|
||||
uci add nikki lan_access_control
|
||||
uci set nikki.@lan_access_control[-1].enabled=1
|
||||
uci add_list nikki.@lan_access_control[-1].mac="$mac"
|
||||
[ "$proxy_access_control_mode" == "allow" ] && uci set nikki.@lan_access_control[-1].proxy=1
|
||||
[ "$proxy_access_control_mode" == "block" ] && uci set nikki.@lan_access_control[-1].proxy=0
|
||||
done
|
||||
}
|
||||
[ "$proxy_access_control_mode" == "block" ] && {
|
||||
uci add nikki lan_access_control
|
||||
uci set nikki.@lan_access_control[-1].enabled=1
|
||||
uci set nikki.@lan_access_control[-1].proxy=1
|
||||
}
|
||||
}
|
||||
|
||||
uci del nikki.proxy.access_control_mode
|
||||
uci del nikki.proxy.acl_ip
|
||||
uci del nikki.proxy.acl_ip6
|
||||
uci del nikki.proxy.acl_mac
|
||||
uci del nikki.proxy.acl_interface
|
||||
uci del nikki.proxy.bypass_user
|
||||
uci del nikki.proxy.bypass_group
|
||||
uci del nikki.proxy.bypass_cgroup
|
||||
}
|
||||
|
||||
# commit
|
||||
uci commit nikki
|
||||
|
|
|
@ -27,32 +27,43 @@
|
|||
|
||||
const tun_device = uci.get('nikki', 'mixin', 'tun_device');
|
||||
|
||||
const tcp_transparent_proxy_mode = uci.get('nikki', 'proxy', 'tcp_transparent_proxy_mode');
|
||||
const udp_transparent_proxy_mode = uci.get('nikki', 'proxy', 'udp_transparent_proxy_mode');
|
||||
const tcp_mode = uci.get('nikki', 'proxy', 'tcp_mode');
|
||||
const udp_mode = uci.get('nikki', 'proxy', 'udp_mode');
|
||||
const ipv4_dns_hijack = uci_bool(uci.get('nikki', 'proxy', 'ipv4_dns_hijack'));
|
||||
const ipv6_dns_hijack = uci_bool(uci.get('nikki', 'proxy', 'ipv6_dns_hijack'));
|
||||
const ipv4_proxy = uci_bool(uci.get('nikki', 'proxy', 'ipv4_proxy'));
|
||||
const ipv6_proxy = uci_bool(uci.get('nikki', 'proxy', 'ipv6_proxy'));
|
||||
const fake_ip_ping_hijack = uci_bool(uci.get('nikki', 'proxy', 'fake_ip_ping_hijack'));
|
||||
|
||||
const router_proxy = uci_bool(uci.get('nikki', 'proxy', 'router_proxy'));
|
||||
const router_access_control = [];
|
||||
uci.foreach('nikki', 'router_access_control', (access_control) => {
|
||||
access_control['enabled'] = uci_bool(access_control['enabled']);
|
||||
access_control['user'] = filter(uci_array(access_control['user']), (x) => index(users, x) >= 0);
|
||||
access_control['group'] = filter(uci_array(access_control['group']), (x) => index(groups, x) >= 0);
|
||||
access_control['cgroup'] = filter(uci_array(access_control['cgroup']), (x) => index(cgroups, x) >= 0);
|
||||
access_control['proxy'] = uci_bool(access_control['proxy']);
|
||||
push(router_access_control, access_control);
|
||||
});
|
||||
|
||||
const lan_proxy = uci_bool(uci.get('nikki', 'proxy', 'lan_proxy'));
|
||||
|
||||
const access_control_mode = uci.get('nikki', 'proxy', 'access_control_mode');
|
||||
const acl_ip = uci_array(uci.get('nikki', 'proxy', 'acl_ip'));
|
||||
const acl_ip6 = uci_array(uci.get('nikki', 'proxy', 'acl_ip6'));
|
||||
const acl_mac = uci_array(uci.get('nikki', 'proxy', 'acl_mac'));
|
||||
const acl_interface = uci_array(uci.get('nikki', 'proxy', 'acl_interface'));
|
||||
|
||||
const bypass_user = filter(uci_array(uci.get('nikki', 'proxy', 'bypass_user')), (x) => x != 'root' && index(users, x) >= 0);
|
||||
const bypass_group = filter(uci_array(uci.get('nikki', 'proxy', 'bypass_group')), (x) => x != 'root' && index(groups, x) >= 0);
|
||||
|
||||
let bypass_cgroup = [];
|
||||
if (cgroups_version == 1) {
|
||||
push(bypass_cgroup, cgroup_id);
|
||||
} else if (cgroups_version == 2) {
|
||||
bypass_cgroup = filter(uci_array(uci.get('nikki', 'proxy', 'bypass_cgroup')), (x) => x != 'nikki' && index(cgroups, x) >= 0);
|
||||
push(bypass_cgroup, cgroup_name);
|
||||
const lan_inbound_interface = uci_array(uci.get('nikki', 'proxy', 'lan_inbound_interface'));
|
||||
const lan_inbound_device = [];
|
||||
for (let interface in lan_inbound_interface) {
|
||||
const device = ubus.call('network.interface', 'status', {'interface': interface})?.l3_device ?? '';
|
||||
if (device != '') {
|
||||
push(lan_inbound_device, device);
|
||||
}
|
||||
}
|
||||
const lan_access_control = [];
|
||||
uci.foreach('nikki', 'lan_access_control', (access_control) => {
|
||||
access_control['enabled'] = uci_bool(access_control['enabled']);
|
||||
access_control['ip'] = uci_array(access_control['ip']);
|
||||
access_control['ip6'] = uci_array(access_control['ip6']);
|
||||
access_control['mac'] = uci_array(access_control['mac']);
|
||||
access_control['proxy'] = uci_bool(access_control['proxy']);
|
||||
push(lan_access_control, access_control);
|
||||
});
|
||||
|
||||
const bypass_dscp = uci_array(uci.get('nikki', 'proxy', 'bypass_dscp'));
|
||||
const bypass_china_mainland_ip = uci_bool(uci.get('nikki', 'proxy', 'bypass_china_mainland_ip'));
|
||||
|
@ -67,14 +78,6 @@
|
|||
push(dns_hijack_nfproto, 'ipv6');
|
||||
}
|
||||
|
||||
const acl_device = [];
|
||||
for (let i = 0; i < length(acl_interface); i++) {
|
||||
const device = ubus.call('network.interface', 'status', {'interface': acl_interface[i]})?.l3_device ?? '';
|
||||
if (device != '') {
|
||||
push(acl_device, device);
|
||||
}
|
||||
}
|
||||
|
||||
const proxy_nfproto = [];
|
||||
if (ipv4_proxy) {
|
||||
push(proxy_nfproto, 'ipv4');
|
||||
|
@ -98,8 +101,8 @@ table inet nikki {
|
|||
flags interval
|
||||
{% if (length(dns_hijack_nfproto) > 0): %}
|
||||
elements = {
|
||||
{% for (let x in dns_hijack_nfproto): %}
|
||||
{{ x }},
|
||||
{% for (let nfproto in dns_hijack_nfproto): %}
|
||||
{{ nfproto }},
|
||||
{% endfor %}
|
||||
}
|
||||
{% endif %}
|
||||
|
@ -110,67 +113,13 @@ table inet nikki {
|
|||
flags interval
|
||||
{% if (length(proxy_nfproto) > 0): %}
|
||||
elements = {
|
||||
{% for (let x in proxy_nfproto): %}
|
||||
{{ x }},
|
||||
{% for (let nfproto in proxy_nfproto): %}
|
||||
{{ nfproto }},
|
||||
{% endfor %}
|
||||
}
|
||||
{% endif %}
|
||||
}
|
||||
|
||||
set bypass_user {
|
||||
type uid
|
||||
flags interval
|
||||
auto-merge
|
||||
{% if (length(bypass_user) > 0): %}
|
||||
elements = {
|
||||
{% for (let x in bypass_user): %}
|
||||
{{ x }},
|
||||
{% endfor %}
|
||||
}
|
||||
{% endif %}
|
||||
}
|
||||
|
||||
set bypass_group {
|
||||
type gid
|
||||
flags interval
|
||||
auto-merge
|
||||
{% if (length(bypass_group) > 0): %}
|
||||
elements = {
|
||||
{% for (let x in bypass_group): %}
|
||||
{{ x }},
|
||||
{% endfor %}
|
||||
}
|
||||
{% endif %}
|
||||
}
|
||||
|
||||
{% if (cgroups_version == 1): %}
|
||||
set bypass_cgroup {
|
||||
typeof meta cgroup
|
||||
flags interval
|
||||
auto-merge
|
||||
{% if (length(bypass_cgroup) > 0): %}
|
||||
elements = {
|
||||
{% for (let x in bypass_cgroup): %}
|
||||
{{ x }},
|
||||
{% endfor %}
|
||||
}
|
||||
{% endif %}
|
||||
}
|
||||
{% elif (cgroups_version == 2): %}
|
||||
set bypass_cgroup {
|
||||
type cgroupsv2
|
||||
flags interval
|
||||
auto-merge
|
||||
{% if (length(bypass_cgroup) > 0): %}
|
||||
elements = {
|
||||
{% for (let x in bypass_cgroup): %}
|
||||
services/{{ x }},
|
||||
{% endfor %}
|
||||
}
|
||||
{% endif %}
|
||||
}
|
||||
{% endif %}
|
||||
|
||||
set reserved_ip {
|
||||
type ipv4_addr
|
||||
flags interval
|
||||
|
@ -183,6 +132,19 @@ table inet nikki {
|
|||
auto-merge
|
||||
}
|
||||
|
||||
set lan_inbound_device {
|
||||
type ifname
|
||||
flags interval
|
||||
auto-merge
|
||||
{% if (length(lan_inbound_device) > 0): %}
|
||||
elements = {
|
||||
{% for (let device in lan_inbound_device): %}
|
||||
{{ device }},
|
||||
{% endfor %}
|
||||
}
|
||||
{% endif %}
|
||||
}
|
||||
|
||||
set china_ip {
|
||||
type ipv4_addr
|
||||
flags interval
|
||||
|
@ -199,8 +161,8 @@ table inet nikki {
|
|||
auto-merge
|
||||
{% if (length(proxy_dport) > 0): %}
|
||||
elements = {
|
||||
{% for (let x in proxy_dport): %}
|
||||
{{ x }},
|
||||
{% for (let dport in proxy_dport): %}
|
||||
{{ dport }},
|
||||
{% endfor %}
|
||||
}
|
||||
{% endif %}
|
||||
|
@ -212,145 +174,215 @@ table inet nikki {
|
|||
auto-merge
|
||||
{% if (length(bypass_dscp) > 0): %}
|
||||
elements = {
|
||||
{% for (let x in bypass_dscp): %}
|
||||
{{ x }},
|
||||
{% for (let dscp in bypass_dscp): %}
|
||||
{{ dscp }},
|
||||
{% endfor %}
|
||||
}
|
||||
{% endif %}
|
||||
}
|
||||
|
||||
set acl_ip {
|
||||
type ipv4_addr
|
||||
flags interval
|
||||
auto-merge
|
||||
{% if (length(acl_ip) > 0): %}
|
||||
elements = {
|
||||
{% for (let x in acl_ip): %}
|
||||
{{ x }},
|
||||
{% endfor %}
|
||||
}
|
||||
chain router_dns_hijack {
|
||||
{% for (let access_control in router_access_control): %}
|
||||
{% if (access_control['enabled']): %}
|
||||
{% if (length(access_control['user']) == 0 && length(access_control['group']) == 0 && length(access_control['cgroup']) == 0): %}
|
||||
meta l4proto { tcp, udp } th dport 53 counter {% if (access_control.proxy == '1'): %} redirect to :{{ dns_port }} {% else %} return {% endif %}
|
||||
|
||||
{% else %}
|
||||
{% if (length(access_control['user']) > 0): %}
|
||||
meta l4proto { tcp, udp } meta skuid { {% for (let user in access_control['user']): %} {{ user }}, {% endfor %} } th dport 53 counter {% if (access_control.proxy == '1'): %} redirect to :{{ dns_port }} {% else %} return {% endif %}
|
||||
|
||||
{% endif %}
|
||||
{% if (length(access_control['group']) > 0): %}
|
||||
meta l4proto { tcp, udp } meta skgid { {% for (let group in access_control['group']): %} {{ group }}, {% endfor %} } th dport 53 counter {% if (access_control.proxy == '1'): %} redirect to :{{ dns_port }} {% else %} return {% endif %}
|
||||
|
||||
{% endif %}
|
||||
{% if (cgroups_version == 2 && length(access_control['cgroup']) > 0): %}
|
||||
meta l4proto { tcp, udp } socket cgroupv2 level 2 { {% for (let cgroup in access_control['cgroup']): %} services/{{ cgroup }}, {% endfor %} } th dport 53 counter {% if (access_control.proxy == '1'): %} redirect to :{{ dns_port }} {% else %} return {% endif %}
|
||||
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
}
|
||||
|
||||
set acl_ip6 {
|
||||
type ipv6_addr
|
||||
flags interval
|
||||
auto-merge
|
||||
{% if (length(acl_ip6) > 0): %}
|
||||
elements = {
|
||||
{% for (let x in acl_ip6): %}
|
||||
{{ x }},
|
||||
{% endfor %}
|
||||
}
|
||||
chain router_redirect {
|
||||
{% for (let access_control in router_access_control): %}
|
||||
{% if (access_control['enabled']): %}
|
||||
{% if (length(access_control['user']) == 0 && length(access_control['group']) == 0 && length(access_control['cgroup']) == 0): %}
|
||||
meta l4proto tcp counter {% if (access_control.proxy == '1'): %} redirect to :{{ redir_port }} {% else %} return {% endif %}
|
||||
|
||||
{% else %}
|
||||
{% if (length(access_control['user']) > 0): %}
|
||||
meta l4proto tcp meta skuid { {% for (let user in access_control['user']): %} {{ user }}, {% endfor %} } counter {% if (access_control.proxy == '1'): %} redirect to :{{ redir_port }} {% else %} return {% endif %}
|
||||
|
||||
{% endif %}
|
||||
{% if (length(access_control['group']) > 0): %}
|
||||
meta l4proto tcp meta skgid { {% for (let group in access_control['group']): %} {{ group }}, {% endfor %} } counter {% if (access_control.proxy == '1'): %} redirect to :{{ redir_port }} {% else %} return {% endif %}
|
||||
|
||||
{% endif %}
|
||||
{% if (cgroups_version == 2 && length(access_control['cgroup']) > 0): %}
|
||||
meta l4proto tcp socket cgroupv2 level 2 { {% for (let cgroup in access_control['cgroup']): %} services/{{ cgroup }}, {% endfor %} } counter {% if (access_control.proxy == '1'): %} redirect to :{{ redir_port }} {% else %} return {% endif %}
|
||||
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
}
|
||||
|
||||
set acl_mac {
|
||||
type ether_addr
|
||||
flags interval
|
||||
auto-merge
|
||||
{% if (length(acl_mac) > 0): %}
|
||||
elements = {
|
||||
{% for (let x in acl_mac): %}
|
||||
{{ x }},
|
||||
{% endfor %}
|
||||
}
|
||||
chain router_tproxy {
|
||||
{% for (let access_control in router_access_control): %}
|
||||
{% if (access_control['enabled']): %}
|
||||
{% if (length(access_control['user']) == 0 && length(access_control['group']) == 0 && length(access_control['cgroup']) == 0): %}
|
||||
meta l4proto { tcp, udp } {% if (access_control.proxy == '1'): %} meta mark set {{ tproxy_fw_mark }} tproxy to :{{ tproxy_port }} counter accept {% else %} counter return {% endif %}
|
||||
|
||||
{% else %}
|
||||
{% if (length(access_control['user']) > 0): %}
|
||||
meta l4proto { tcp, udp } meta skuid { {% for (let user in access_control['user']): %} {{ user }}, {% endfor %} } {% if (access_control.proxy == '1'): %} meta mark set {{ tproxy_fw_mark }} tproxy to :{{ tproxy_port }} counter accept {% else %} counter return {% endif %}
|
||||
|
||||
{% endif %}
|
||||
{% if (length(access_control['group']) > 0): %}
|
||||
meta l4proto { tcp, udp } meta skgid { {% for (let group in access_control['group']): %} {{ group }}, {% endfor %} } {% if (access_control.proxy == '1'): %} meta mark set {{ tproxy_fw_mark }} tproxy to :{{ tproxy_port }} counter accept {% else %} counter return {% endif %}
|
||||
|
||||
{% endif %}
|
||||
{% if (cgroups_version == 2 && length(access_control['cgroup']) > 0): %}
|
||||
meta l4proto { tcp, udp } socket cgroupv2 level 2 { {% for (let cgroup in access_control['cgroup']): %} services/{{ cgroup }}, {% endfor %} } {% if (access_control.proxy == '1'): %} meta mark set {{ tproxy_fw_mark }} tproxy to :{{ tproxy_port }} counter accept {% else %} counter return {% endif %}
|
||||
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
}
|
||||
|
||||
set acl_device {
|
||||
type ifname
|
||||
flags interval
|
||||
auto-merge
|
||||
{% if (length(acl_device) > 0): %}
|
||||
elements = {
|
||||
{% for (let x in acl_device): %}
|
||||
{{ x }},
|
||||
{% endfor %}
|
||||
}
|
||||
chain router_tun {
|
||||
{% for (let access_control in router_access_control): %}
|
||||
{% if (access_control['enabled']): %}
|
||||
{% if (length(access_control['user']) == 0 && length(access_control['group']) == 0 && length(access_control['cgroup']) == 0): %}
|
||||
meta l4proto { tcp, udp } {% if (access_control.proxy == '1'): %} meta mark set {{ tun_fw_mark }} counter accept {% else %} counter return {% endif %}
|
||||
|
||||
{% else %}
|
||||
{% if (length(access_control['user']) > 0): %}
|
||||
meta l4proto { tcp, udp } meta skuid { {% for (let user in access_control['user']): %} {{ user }}, {% endfor %} } {% if (access_control.proxy == '1'): %} meta mark set {{ tun_fw_mark }} counter accept {% else %} counter return {% endif %}
|
||||
|
||||
{% endif %}
|
||||
{% if (length(access_control['group']) > 0): %}
|
||||
meta l4proto { tcp, udp } meta skgid { {% for (let group in access_control['group']): %} {{ group }}, {% endfor %} } {% if (access_control.proxy == '1'): %} meta mark set {{ tun_fw_mark }} counter accept {% else %} counter return {% endif %}
|
||||
|
||||
{% endif %}
|
||||
{% if (cgroups_version == 2 && length(access_control['cgroup']) > 0): %}
|
||||
meta l4proto { tcp, udp } socket cgroupv2 level 2 { {% for (let cgroup in access_control['cgroup']): %} services/{{ cgroup }}, {% endfor %} } {% if (access_control.proxy == '1'): %} meta mark set {{ tun_fw_mark }} counter accept {% else %} counter return {% endif %}
|
||||
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
}
|
||||
|
||||
chain lan_dns_hijack {
|
||||
{% if (access_control_mode == 'all'): %}
|
||||
meta l4proto { tcp, udp } th dport 53 counter redirect to :{{ dns_port }}
|
||||
{% elif (access_control_mode == 'allow'): %}
|
||||
meta l4proto { tcp, udp } th dport 53 ip saddr @acl_ip counter redirect to :{{ dns_port }}
|
||||
meta l4proto { tcp, udp } th dport 53 ip6 saddr @acl_ip6 counter redirect to :{{ dns_port }}
|
||||
meta l4proto { tcp, udp } th dport 53 ether saddr @acl_mac counter redirect to :{{ dns_port }}
|
||||
meta l4proto { tcp, udp } th dport 53 iifname @acl_device counter redirect to :{{ dns_port }}
|
||||
{% elif (access_control_mode == 'block'): %}
|
||||
meta l4proto { tcp, udp } th dport 53 ip saddr @acl_ip counter return
|
||||
meta l4proto { tcp, udp } th dport 53 ip6 saddr @acl_ip6 counter return
|
||||
meta l4proto { tcp, udp } th dport 53 ether saddr @acl_mac counter return
|
||||
meta l4proto { tcp, udp } th dport 53 iifname @acl_device counter return
|
||||
meta l4proto { tcp, udp } th dport 53 counter redirect to :{{ dns_port }}
|
||||
{% for (let access_control in lan_access_control): %}
|
||||
{% if (access_control['enabled']): %}
|
||||
{% if (length(access_control['ip']) == 0 && length(access_control['ip6']) == 0 && length(access_control['mac']) == 0): %}
|
||||
meta l4proto { tcp, udp } th dport 53 counter {% if (access_control.proxy == '1'): %} redirect to :{{ dns_port }} {% else %} return {% endif %}
|
||||
|
||||
{% else %}
|
||||
{% if (length(access_control['ip']) > 0): %}
|
||||
meta l4proto { tcp, udp } ip saddr { {% for (let ip in access_control['ip']): %} {{ ip }}, {% endfor %} } th dport 53 counter {% if (access_control.proxy == '1'): %} redirect to :{{ dns_port }} {% else %} return {% endif %}
|
||||
|
||||
{% endif %}
|
||||
{% if (length(access_control['ip6']) > 0): %}
|
||||
meta l4proto { tcp, udp } ip6 saddr { {% for (let ip6 in access_control['ip6']): %} {{ ip6 }}, {% endfor %} } th dport 53 counter {% if (access_control.proxy == '1'): %} redirect to :{{ dns_port }} {% else %} return {% endif %}
|
||||
|
||||
{% endif %}
|
||||
{% if (length(access_control['mac']) > 0): %}
|
||||
meta l4proto { tcp, udp } ether saddr { {% for (let mac in access_control['mac']): %} {{ mac }}, {% endfor %} } th dport 53 counter {% if (access_control.proxy == '1'): %} redirect to :{{ dns_port }} {% else %} return {% endif %}
|
||||
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
}
|
||||
|
||||
chain lan_redirect {
|
||||
{% if (access_control_mode == 'all'): %}
|
||||
meta l4proto tcp counter redirect to :{{ redir_port }}
|
||||
{% elif (access_control_mode == 'allow'): %}
|
||||
meta l4proto tcp ip saddr @acl_ip counter redirect to :{{ redir_port }}
|
||||
meta l4proto tcp ip6 saddr @acl_ip6 counter redirect to :{{ redir_port }}
|
||||
meta l4proto tcp ether saddr @acl_mac counter redirect to :{{ redir_port }}
|
||||
meta l4proto tcp iifname @acl_device counter redirect to :{{ redir_port }}
|
||||
{% elif (access_control_mode == 'block'): %}
|
||||
meta l4proto tcp ip saddr @acl_ip counter return
|
||||
meta l4proto tcp ip6 saddr @acl_ip6 counter return
|
||||
meta l4proto tcp ether saddr @acl_mac counter return
|
||||
meta l4proto tcp iifname @acl_device counter return
|
||||
meta l4proto tcp counter redirect to :{{ redir_port }}
|
||||
{% for (let access_control in lan_access_control): %}
|
||||
{% if (access_control['enabled']): %}
|
||||
{% if (length(access_control['ip']) == 0 && length(access_control['ip6']) == 0 && length(access_control['mac']) == 0): %}
|
||||
meta l4proto tcp tcp counter {% if (access_control.proxy == '1'): %} redirect to :{{ redir_port }} {% else %} counter return {% endif %}
|
||||
|
||||
{% else %}
|
||||
{% if (length(access_control['ip']) > 0): %}
|
||||
meta l4proto tcp ip saddr { {% for (let ip in access_control['ip']): %} {{ ip }}, {% endfor %} } counter {% if (access_control.proxy == '1'): %} redirect to :{{ redir_port }} {% else %} return {% endif %}
|
||||
|
||||
{% endif %}
|
||||
{% if (length(access_control['ip6']) > 0): %}
|
||||
meta l4proto tcp ip6 saddr { {% for (let ip6 in access_control['ip6']): %} {{ ip6 }}, {% endfor %} } counter {% if (access_control.proxy == '1'): %} redirect to :{{ redir_port }} {% else %} return {% endif %}
|
||||
|
||||
{% endif %}
|
||||
{% if (length(access_control['mac']) > 0): %}
|
||||
meta l4proto tcp ether saddr { {% for (let mac in access_control['mac']): %} {{ mac }}, {% endfor %} } counter {% if (access_control.proxy == '1'): %} redirect to :{{ redir_port }} {% else %} return {% endif %}
|
||||
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
}
|
||||
|
||||
chain lan_tproxy {
|
||||
{% if (access_control_mode == 'all'): %}
|
||||
meta l4proto { tcp, udp } meta mark set {{ tproxy_fw_mark }} tproxy to :{{ tproxy_port }} counter accept
|
||||
{% elif (access_control_mode == 'allow'): %}
|
||||
meta l4proto { tcp, udp } ip saddr @acl_ip meta mark set {{ tproxy_fw_mark }} tproxy ip to :{{ tproxy_port }} counter accept
|
||||
meta l4proto { tcp, udp } ip6 saddr @acl_ip6 meta mark set {{ tproxy_fw_mark }} tproxy ip6 to :{{ tproxy_port }} counter accept
|
||||
meta l4proto { tcp, udp } ether saddr @acl_mac meta mark set {{ tproxy_fw_mark }} tproxy to :{{ tproxy_port }} counter accept
|
||||
meta l4proto { tcp, udp } iifname @acl_device meta mark set {{ tproxy_fw_mark }} tproxy to :{{ tproxy_port }} counter accept
|
||||
{% elif (access_control_mode == 'block'): %}
|
||||
meta l4proto { tcp, udp } ip saddr @acl_ip counter return
|
||||
meta l4proto { tcp, udp } ip6 saddr @acl_ip6 counter return
|
||||
meta l4proto { tcp, udp } ether saddr @acl_mac counter return
|
||||
meta l4proto { tcp, udp } iifname @acl_device counter return
|
||||
meta l4proto { tcp, udp } meta mark set {{ tproxy_fw_mark }} tproxy to :{{ tproxy_port }} counter accept
|
||||
{% for (let access_control in lan_access_control): %}
|
||||
{% if (access_control['enabled']): %}
|
||||
{% if (length(access_control['ip']) == 0 && length(access_control['ip6']) == 0 && length(access_control['mac']) == 0): %}
|
||||
meta l4proto { tcp, udp } {% if (access_control.proxy == '1'): %} meta mark set {{ tproxy_fw_mark }} tproxy to :{{ tproxy_port }} counter accept {% else %} counter return {% endif %}
|
||||
|
||||
{% else %}
|
||||
{% if (length(access_control['ip']) > 0): %}
|
||||
meta l4proto { tcp, udp } ip saddr { {% for (let ip in access_control['ip']): %} {{ ip }}, {% endfor %} } {% if (access_control.proxy == '1'): %} meta mark set {{ tproxy_fw_mark }} tproxy ip to :{{ tproxy_port }} counter accept {% else %} counter return {% endif %}
|
||||
|
||||
{% endif %}
|
||||
{% if (length(access_control['ip6']) > 0): %}
|
||||
meta l4proto { tcp, udp } ip6 saddr { {% for (let ip6 in access_control['ip6']): %} {{ ip6 }}, {% endfor %} } {% if (access_control.proxy == '1'): %} meta mark set {{ tproxy_fw_mark }} tproxy ip6 to :{{ tproxy_port }} counter accept {% else %} counter return {% endif %}
|
||||
|
||||
{% endif %}
|
||||
{% if (length(access_control['mac']) > 0): %}
|
||||
meta l4proto { tcp, udp } ether saddr { {% for (let mac in access_control['mac']): %} {{ mac }}, {% endfor %} } {% if (access_control.proxy == '1'): %} meta mark set {{ tproxy_fw_mark }} tproxy to :{{ tproxy_port }} counter accept {% else %} counter return {% endif %}
|
||||
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
}
|
||||
|
||||
chain lan_tun {
|
||||
{% if (access_control_mode == 'all'): %}
|
||||
meta l4proto { tcp, udp } meta mark set {{ tun_fw_mark }} counter
|
||||
{% elif (access_control_mode == 'allow'): %}
|
||||
meta l4proto { tcp, udp } ip saddr @acl_ip meta mark set {{ tun_fw_mark }} counter
|
||||
meta l4proto { tcp, udp } ip6 saddr @acl_ip6 meta mark set {{ tun_fw_mark }} counter
|
||||
meta l4proto { tcp, udp } ether saddr @acl_mac meta mark set {{ tun_fw_mark }} counter
|
||||
meta l4proto { tcp, udp } iifname @acl_device meta mark set {{ tun_fw_mark }} counter
|
||||
{% elif (access_control_mode == 'block'): %}
|
||||
meta l4proto { tcp, udp } ip saddr @acl_ip counter return
|
||||
meta l4proto { tcp, udp } ip6 saddr @acl_ip6 counter return
|
||||
meta l4proto { tcp, udp } ether saddr @acl_mac counter return
|
||||
meta l4proto { tcp, udp } iifname @acl_device counter return
|
||||
meta l4proto { tcp, udp } meta mark set {{ tun_fw_mark }} counter
|
||||
{% for (let access_control in lan_access_control): %}
|
||||
{% if (access_control['enabled']): %}
|
||||
{% if (length(access_control['ip']) == 0 && length(access_control['ip6']) == 0 && length(access_control['mac']) == 0): %}
|
||||
meta l4proto { tcp, udp } {% if (access_control.proxy == '1'): %} meta mark set {{ tun_fw_mark }} counter accept {% else %}counter return {% endif %}
|
||||
|
||||
{% else %}
|
||||
{% if (length(access_control['ip']) > 0): %}
|
||||
meta l4proto { tcp, udp } ip saddr { {% for (let ip in access_control['ip']): %} {{ ip }}, {% endfor %} } {% if (access_control.proxy == '1'): %} meta mark set {{ tun_fw_mark }} counter accept {% else %}counter return {% endif %}
|
||||
|
||||
{% endif %}
|
||||
{% if (length(access_control['ip6']) > 0): %}
|
||||
meta l4proto { tcp, udp } ip6 saddr { {% for (let ip6 in access_control['ip6']): %} {{ ip6 }}, {% endfor %} } {% if (access_control.proxy == '1'): %} meta mark set {{ tun_fw_mark }} counter accept {% else %}counter return {% endif %}
|
||||
|
||||
{% endif %}
|
||||
{% if (length(access_control['mac']) > 0): %}
|
||||
meta l4proto { tcp, udp } ether saddr { {% for (let mac in access_control['mac']): %} {{ mac }}, {% endfor %} } {% if (access_control.proxy == '1'): %} meta mark set {{ tun_fw_mark }} counter accept {% else %}counter return {% endif %}
|
||||
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
}
|
||||
|
||||
{% if (router_proxy): %}
|
||||
chain nat_output {
|
||||
type nat hook output priority filter; policy accept;
|
||||
{% if (cgroups_version == 1): %}
|
||||
meta cgroup @bypass_cgroup counter return
|
||||
meta cgroup {{ cgroup_id }} counter return
|
||||
{% elif (cgroups_version == 2): %}
|
||||
socket cgroupv2 level 2 @bypass_cgroup counter return
|
||||
socket cgroupv2 level 2 services/{{ cgroup_name }} counter return
|
||||
{% endif %}
|
||||
meta skuid @bypass_user counter return
|
||||
meta skgid @bypass_group counter return
|
||||
meta nfproto @dns_hijack_nfproto meta l4proto { tcp, udp } th dport 53 counter redirect to :{{ dns_port }}
|
||||
{% if (tcp_transparent_proxy_mode == 'redirect'): %}
|
||||
meta nfproto @dns_hijack_nfproto jump router_dns_hijack
|
||||
{% if (tcp_mode == 'redirect'): %}
|
||||
fib daddr type { local, multicast, broadcast, anycast } counter return
|
||||
ct direction reply counter return
|
||||
ip daddr @reserved_ip counter return
|
||||
|
@ -361,7 +393,7 @@ table inet nikki {
|
|||
meta nfproto ipv6 meta l4proto . th dport != @proxy_dport counter return
|
||||
meta l4proto { tcp, udp } ip dscp @bypass_dscp ip daddr != {{ fake_ip_range }} counter return
|
||||
meta l4proto { tcp, udp } ip6 dscp @bypass_dscp counter return
|
||||
meta nfproto @proxy_nfproto meta l4proto tcp counter redirect to :{{ redir_port }}
|
||||
meta nfproto @proxy_nfproto jump router_redirect
|
||||
{% endif %}
|
||||
{% if (fake_ip_ping_hijack): %}
|
||||
ip protocol icmp icmp type echo-request ip daddr {{ fake_ip_range }} counter redirect
|
||||
|
@ -371,12 +403,10 @@ table inet nikki {
|
|||
chain mangle_output {
|
||||
type route hook output priority mangle; policy accept;
|
||||
{% if (cgroups_version == 1): %}
|
||||
meta cgroup @bypass_cgroup counter return
|
||||
meta cgroup {{ cgroup_id }} counter return
|
||||
{% elif (cgroups_version == 2): %}
|
||||
socket cgroupv2 level 2 @bypass_cgroup counter return
|
||||
socket cgroupv2 level 2 services/{{ cgroup_name }} counter return
|
||||
{% endif %}
|
||||
meta skuid @bypass_user counter return
|
||||
meta skgid @bypass_group counter return
|
||||
fib daddr type { local, multicast, broadcast, anycast } counter return
|
||||
ct direction reply counter return
|
||||
ip daddr @reserved_ip counter return
|
||||
|
@ -388,25 +418,25 @@ table inet nikki {
|
|||
meta l4proto { tcp, udp } ip dscp @bypass_dscp ip daddr != {{ fake_ip_range }} counter return
|
||||
meta l4proto { tcp, udp } ip6 dscp @bypass_dscp counter return
|
||||
meta nfproto @dns_hijack_nfproto meta l4proto { tcp, udp } th dport 53 counter return
|
||||
{% if (tcp_transparent_proxy_mode == 'tproxy'): %}
|
||||
meta nfproto @proxy_nfproto meta l4proto tcp meta mark set {{ tproxy_fw_mark }} counter
|
||||
{% elif (tcp_transparent_proxy_mode == 'tun'): %}
|
||||
meta nfproto @proxy_nfproto meta l4proto tcp meta mark set {{ tun_fw_mark }} counter
|
||||
{% if (tcp_mode == 'tproxy'): %}
|
||||
meta nfproto @proxy_nfproto meta l4proto tcp jump router_tproxy
|
||||
{% elif (tcp_mode == 'tun'): %}
|
||||
meta nfproto @proxy_nfproto meta l4proto tcp jump router_tun
|
||||
{% endif %}
|
||||
{% if (udp_transparent_proxy_mode == 'tproxy'): %}
|
||||
meta nfproto @proxy_nfproto meta l4proto udp meta mark set {{ tproxy_fw_mark }} counter
|
||||
{% elif (udp_transparent_proxy_mode == 'tun'): %}
|
||||
meta nfproto @proxy_nfproto meta l4proto udp meta mark set {{ tun_fw_mark }} counter
|
||||
{% if (udp_mode == 'tproxy'): %}
|
||||
meta nfproto @proxy_nfproto meta l4proto udp jump router_tproxy
|
||||
{% elif (udp_mode == 'tun'): %}
|
||||
meta nfproto @proxy_nfproto meta l4proto udp jump router_tun
|
||||
{% endif %}
|
||||
}
|
||||
|
||||
chain mangle_prerouting_router {
|
||||
type filter hook prerouting priority mangle - 1; policy accept;
|
||||
{% if (tcp_transparent_proxy_mode == 'tproxy' || udp_transparent_proxy_mode == 'tproxy'): %}
|
||||
meta l4proto { tcp, udp } iifname lo meta mark {{ tproxy_fw_mark }} tproxy to :{{ tproxy_port }} counter accept
|
||||
{% if (tcp_mode == 'tproxy' || udp_mode == 'tproxy'): %}
|
||||
iifname lo meta l4proto { tcp, udp } meta mark {{ tproxy_fw_mark }} tproxy to :{{ tproxy_port }} counter accept
|
||||
{% endif %}
|
||||
{% if (tcp_transparent_proxy_mode == 'tun' || udp_transparent_proxy_mode == 'tun'): %}
|
||||
meta l4proto { tcp, udp } iifname {{ tun_device }} counter accept
|
||||
{% if (tcp_mode == 'tun' || udp_mode == 'tun'): %}
|
||||
iifname {{ tun_device }} meta l4proto { icmp, tcp, udp } counter accept
|
||||
{% endif %}
|
||||
}
|
||||
{% endif %}
|
||||
|
@ -414,8 +444,8 @@ table inet nikki {
|
|||
{% if (lan_proxy): %}
|
||||
chain dstnat {
|
||||
type nat hook prerouting priority dstnat + 1; policy accept;
|
||||
meta nfproto @dns_hijack_nfproto jump lan_dns_hijack
|
||||
{% if (tcp_transparent_proxy_mode == 'redirect'): %}
|
||||
iifname @lan_inbound_device meta nfproto @dns_hijack_nfproto jump lan_dns_hijack
|
||||
{% if (tcp_mode == 'redirect'): %}
|
||||
fib daddr type { local, multicast, broadcast, anycast } counter return
|
||||
ct direction reply counter return
|
||||
ip daddr @reserved_ip counter return
|
||||
|
@ -426,7 +456,7 @@ table inet nikki {
|
|||
meta nfproto ipv6 meta l4proto . th dport != @proxy_dport counter return
|
||||
meta l4proto { tcp, udp } ip dscp @bypass_dscp ip daddr != {{ fake_ip_range }} counter return
|
||||
meta l4proto { tcp, udp } ip6 dscp @bypass_dscp counter return
|
||||
meta nfproto @proxy_nfproto jump lan_redirect
|
||||
iifname @lan_inbound_device meta nfproto @proxy_nfproto jump lan_redirect
|
||||
{% endif %}
|
||||
{% if (fake_ip_ping_hijack): %}
|
||||
ip protocol icmp icmp type echo-request ip daddr {{ fake_ip_range }} counter redirect
|
||||
|
@ -446,15 +476,15 @@ table inet nikki {
|
|||
meta l4proto { tcp, udp } ip dscp @bypass_dscp ip daddr != {{ fake_ip_range }} counter return
|
||||
meta l4proto { tcp, udp } ip6 dscp @bypass_dscp counter return
|
||||
meta nfproto @dns_hijack_nfproto meta l4proto { tcp, udp } th dport 53 counter return
|
||||
{% if (tcp_transparent_proxy_mode == 'tproxy'): %}
|
||||
meta nfproto @proxy_nfproto meta l4proto tcp jump lan_tproxy
|
||||
{% elif (tcp_transparent_proxy_mode == 'tun'): %}
|
||||
meta nfproto @proxy_nfproto meta l4proto tcp jump lan_tun
|
||||
{% if (tcp_mode == 'tproxy'): %}
|
||||
iifname @lan_inbound_device meta nfproto @proxy_nfproto meta l4proto tcp jump lan_tproxy
|
||||
{% elif (tcp_mode == 'tun'): %}
|
||||
iifname @lan_inbound_device meta nfproto @proxy_nfproto meta l4proto tcp jump lan_tun
|
||||
{% endif %}
|
||||
{% if (udp_transparent_proxy_mode == 'tproxy'): %}
|
||||
meta nfproto @proxy_nfproto meta l4proto udp jump lan_tproxy
|
||||
{% elif (udp_transparent_proxy_mode == 'tun'): %}
|
||||
meta nfproto @proxy_nfproto meta l4proto udp jump lan_tun
|
||||
{% if (udp_mode == 'tproxy'): %}
|
||||
iifname @lan_inbound_device meta nfproto @proxy_nfproto meta l4proto udp jump lan_tproxy
|
||||
{% elif (udp_mode == 'tun'): %}
|
||||
iifname @lan_inbound_device meta nfproto @proxy_nfproto meta l4proto udp jump lan_tun
|
||||
{% endif %}
|
||||
}
|
||||
{% endif %}
|
||||
|
|
|
@ -47,7 +47,7 @@ if (uci_bool(uci.get('nikki', 'mixin', 'authentication'))) {
|
|||
}
|
||||
|
||||
config['tun'] = {};
|
||||
if (uci.get('nikki', 'proxy', 'tcp_transparent_proxy_mode') == 'tun' || uci.get('nikki', 'proxy', 'udp_transparent_proxy_mode') == 'tun') {
|
||||
if (uci.get('nikki', 'proxy', 'tcp_mode') == 'tun' || uci.get('nikki', 'proxy', 'udp_mode') == 'tun') {
|
||||
config['tun']['enable'] = true;
|
||||
config['tun']['auto-route'] = false;
|
||||
config['tun']['auto-redirect'] = false;
|
||||
|
|
Loading…
Reference in New Issue