diff --git a/ddns-go/Makefile b/ddns-go/Makefile
index 65ec8938c..217edf023 100644
--- a/ddns-go/Makefile
+++ b/ddns-go/Makefile
@@ -5,8 +5,8 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=ddns-go
-PKG_VERSION:=6.16.13
-PKG_RELEASE:=11
+PKG_VERSION:=6.17.0
+PKG_RELEASE:=12
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://codeload.github.com/jeessy2/ddns-go/tar.gz/v$(PKG_VERSION)?
diff --git a/luci-app-mosdns/Makefile b/luci-app-mosdns/Makefile
index 8f78bfb74..6365a2dc5 100644
--- a/luci-app-mosdns/Makefile
+++ b/luci-app-mosdns/Makefile
@@ -1,8 +1,8 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=luci-app-mosdns
-PKG_VERSION:=1.7.1
-PKG_RELEASE:=5
+PKG_VERSION:=1.7.2
+PKG_RELEASE:=6
LUCI_TITLE:=LuCI Support for mosdns
LUCI_PKGARCH:=all
diff --git a/luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js b/luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js
index 1c9c0bd09..0425528c7 100644
--- a/luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js
+++ b/luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js
@@ -356,7 +356,7 @@ return view.extend({
o.default = false;
o = s.taboption('advanced', form.DynamicList, 'ad_source', _('ADblock Source'),
- _('When using custom rule sources, please use rule types supported by MosDNS (domain lists).') +
+ _('When using custom rule sources, please use rule types supported by MosDNS (domain list or AdGuardHome rules).') +
'
' +
_('Support for local files, such as: file:///var/mosdns/example.txt'));
o.depends('adblock', '1');
diff --git a/luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js b/luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js
index 5cdb48773..4d5867d72 100644
--- a/luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js
+++ b/luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js
@@ -3,25 +3,80 @@
'require fs';
'require ui';
'require view';
+'require rpc';
+
+var callStartUpdate = rpc.declare({
+ object: 'luci.mosdns',
+ method: 'start_update',
+ expect: { '': {} }
+});
+
+var callGetUpdateLog = rpc.declare({
+ object: 'luci.mosdns',
+ method: 'get_update_log',
+ expect: { '': {} }
+});
return view.extend({
handleUpdate: function () {
- ui.showModal(_('Updating...'), [
+ var logTextarea = E('textarea', {
+ 'class': 'cbi-input-textarea',
+ 'readonly': 'readonly',
+ 'style': 'width: 100%; height: 300px; font-family: monospace; font-size: 12px; margin-top: 10px;',
+ 'placeholder': _('Starting update...')
+ });
+
+ var closeButton = E('button', {
+ 'class': 'btn',
+ 'style': 'display: none;',
+ 'click': ui.hideModal
+ }, _('Close'));
+
+ ui.showModal(_('Updating Database...'), [
E('p', { 'class': 'spinning' }, _('Please wait, this may take a few moments...')),
+ logTextarea,
+ E('div', { 'class': 'right' }, [ closeButton ])
]);
- return fs.exec('/usr/share/mosdns/mosdns.uc', ['update'])
- .then(function (res) {
- ui.hideModal();
- if (res.code === 0) {
- ui.addNotification(null, E('p', _('Update success')), 'info');
- } else {
- ui.addNotification(null, E('p', res.stderr + '
' + res.stdout), 'warn');
- ui.addNotification(null, E('p', _('Update failed, Please check the network status')), 'error');
+
+ var pollLog = function() {
+ return callGetUpdateLog().then(function(res) {
+ if (res && res.log) {
+ logTextarea.value = res.log;
+ logTextarea.scrollTop = logTextarea.scrollHeight;
+
+ if (res.log.match(/UPDATE_FINISHED/)) {
+ ui.hideModal();
+ ui.addNotification(null, E('p', _('Update success')), 'info');
+ return false;
+ }
+
+ if (res.log.match(/Another update is already in progress/)) {
+ ui.hideModal();
+ ui.addNotification(null, E('p', _('Another update is already in progress.')), 'warn');
+ return false;
+ }
}
- }).catch(function (e) {
- ui.hideModal();
- ui.addNotification(null, E('p', _('Update failed: %s').format(e.message)), 'error');
+ return true;
});
+ };
+
+ return callStartUpdate().then(function(res) {
+ if (res.success) {
+ var interval = window.setInterval(function() {
+ pollLog().then(function(continuePolling) {
+ if (!continuePolling) {
+ window.clearInterval(interval);
+ }
+ });
+ }, 1000);
+ } else {
+ ui.hideModal();
+ ui.addNotification(null, E('p', res.error || _('Failed to start update.')), 'error');
+ }
+ }).catch(function(e) {
+ ui.hideModal();
+ ui.addNotification(null, E('p', _('Update failed: %s').format(e.message)), 'error');
+ });
},
render: function () {
@@ -61,7 +116,7 @@ return view.extend({
o.value('geoip', _('Full'));
o.value('geoip-only-cn-private', _('Little'));
o.rmempty = false;
- o.default = 'geoip';
+ o.default = 'geoip-only-cn-private';
o = s.option(form.Value, 'github_proxy', _('GitHub Proxy'),
_('Update data files with GitHub Proxy, leave blank to disable proxy downloads.'));
diff --git a/luci-app-mosdns/po/templates/mosdns.pot b/luci-app-mosdns/po/templates/mosdns.pot
index dd4f165c4..80d8a32b6 100644
--- a/luci-app-mosdns/po/templates/mosdns.pot
+++ b/luci-app-mosdns/po/templates/mosdns.pot
@@ -1,471 +1,464 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR , YEAR.
-#
-#, fuzzy
msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-20 09:23+0800\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME \n"
-"Language-Team: LANGUAGE \n"
-"Language: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=CHARSET\n"
-"Content-Transfer-Encoding: 8bit\n"
+msgstr "Content-Type: text/plain; charset=UTF-8"
-#: htdocs/luci-static/resources/view/mosdns/basic.js:31
-#: htdocs/luci-static/resources/view/mosdns/basic.js:33
-#: htdocs/luci-static/resources/view/mosdns/basic.js:110
-#: htdocs/luci-static/resources/view/mosdns/logs.js:70
-msgid "MosDNS"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:31
-msgid "RUNNING"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:33
-msgid "NOT RUNNING"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:95
-msgid "Flushing DNS Cache Success."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:97
-msgid "Flushing DNS Cache Failed, Please check if MosDNS is running."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:111
-msgid "MosDNS is a plugin-based DNS forwarder/traffic splitter."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:133
-msgid "Collecting data..."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:139
-msgid "Basic Options"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:140
-msgid "Advanced Options"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:141
-msgid "Cloudflare Options"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:142
-msgid "API Options"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:143
-msgid "GeoData Export"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:146
-#: htdocs/luci-static/resources/view/mosdns/basic.js:370
-msgid "Enabled"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:150
-msgid "Config File"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:151
-msgid "Default Config"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:152
-msgid "Custom Config"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:155
-msgid "Listen Port"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:160
-msgid "Listen Address"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:164
-msgid "Log Level"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:165
-msgid "Debug"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:166
-msgid "Info"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:167
-msgid "Warning"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:168
-msgid "Error"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:172
-msgid "Log File"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:177
-msgid "DNS Forward"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:177
-msgid "Forward Dnsmasq Domain Name resolution requests to MosDNS"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:181
-msgid "DNS redirect"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:181
-msgid "Force redirect all local DNS queries to MosDNS, a.k.a. DNS Hijacking"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:186
-msgid "China DNS prefer IPv4"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:187
-msgid ""
-"IPv4 is preferred for China DNS resolution of dual-stack addresses, and is "
-"not affected when the destination is IPv6 only"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:191
-msgid "Remote DNS prefer IPv4"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:192
-msgid ""
-"IPv4 is preferred for Remote / Streaming Media DNS resolution of dual-stack "
-"addresses, and is not affected when the destination is IPv6 only"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:196
-msgid "Custom China DNS"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:196
-msgid "Follow WAN interface DNS if not enabled"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:200
-msgid "Apple domains optimization"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:201
-msgid ""
-"For Apple domains equipped with Chinese mainland CDN, always responsive to "
-"Chinese CDN IP addresses"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:205
-msgid "China DNS server"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:206
-#: htdocs/luci-static/resources/view/mosdns/basic.js:254
-msgid "Tencent Public DNS (119.29.29.29)"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:207
-#: htdocs/luci-static/resources/view/mosdns/basic.js:255
-msgid "Tencent Public DNS (119.28.28.28)"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:208
-#: htdocs/luci-static/resources/view/mosdns/basic.js:256
-msgid "Aliyun Public DNS (223.5.5.5)"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:209
-#: htdocs/luci-static/resources/view/mosdns/basic.js:257
-msgid "Aliyun Public DNS (223.6.6.6)"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:210
-msgid "TrafficRoute Public DNS (180.184.1.1)"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:211
-msgid "TrafficRoute Public DNS (180.184.2.2)"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:212
-#: htdocs/luci-static/resources/view/mosdns/basic.js:258
-msgid "Xinfeng Public DNS (114.114.114.114)"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:213
-#: htdocs/luci-static/resources/view/mosdns/basic.js:259
-msgid "Xinfeng Public DNS (114.114.115.115)"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:214
-#: htdocs/luci-static/resources/view/mosdns/basic.js:260
-msgid "Baidu Public DNS (180.76.76.76)"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:215
-msgid "Tencent Public DNS (DNS over HTTPS)"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:216
-msgid "Aliyun Public DNS (DNS over QUIC)"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:217
-msgid "Aliyun Public DNS (DNS over HTTPS)"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:218
-msgid "Aliyun Public DNS (DNS over HTTP/3)"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:219
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:219
msgid "360 Public DNS (DNS over HTTPS)"
msgstr ""
-#: htdocs/luci-static/resources/view/mosdns/basic.js:223
-msgid "Remote DNS server"
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:358
+msgid "ADblock Source"
msgstr ""
-#: htdocs/luci-static/resources/view/mosdns/basic.js:224
-#: htdocs/luci-static/resources/view/mosdns/basic.js:241
-#: htdocs/luci-static/resources/view/mosdns/basic.js:262
-msgid "CloudFlare Public DNS (1.1.1.1)"
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:399
+msgid "API Listen port"
msgstr ""
-#: htdocs/luci-static/resources/view/mosdns/basic.js:225
-#: htdocs/luci-static/resources/view/mosdns/basic.js:242
-msgid "CloudFlare Public DNS (1.0.0.1)"
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:142
+msgid "API Options"
msgstr ""
-#: htdocs/luci-static/resources/view/mosdns/basic.js:226
-#: htdocs/luci-static/resources/view/mosdns/basic.js:243
-#: htdocs/luci-static/resources/view/mosdns/basic.js:261
-msgid "Google Public DNS (8.8.8.8)"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:227
-#: htdocs/luci-static/resources/view/mosdns/basic.js:244
-msgid "Google Public DNS (8.8.4.4)"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:228
-#: htdocs/luci-static/resources/view/mosdns/basic.js:245
-msgid "Quad9 Public DNS (9.9.9.9)"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:229
-#: htdocs/luci-static/resources/view/mosdns/basic.js:246
-msgid "Quad9 Public DNS (149.112.112.112)"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:230
-#: htdocs/luci-static/resources/view/mosdns/basic.js:247
-msgid "Cisco Public DNS (208.67.222.222)"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:231
-#: htdocs/luci-static/resources/view/mosdns/basic.js:248
-msgid "Cisco Public DNS (208.67.220.220)"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:235
-msgid "Custom Stream Media DNS"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:236
-msgid "Netflix, Disney+, Hulu and streaming media rules list will use this DNS"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:240
-msgid "Streaming Media DNS server"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:252
-msgid "Bootstrap DNS servers"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:253
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:31
msgid ""
-"Bootstrap DNS servers are used to resolve IP addresses of the DoH/DoT "
-"resolvers you specify as upstreams"
+"Added domain names always permit resolution using 'local DNS' with the "
+"highest priority (one domain per line, supports domain matching rules)."
msgstr ""
-#: htdocs/luci-static/resources/view/mosdns/basic.js:267
-msgid "Concurrent"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:268
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:121
msgid ""
-"DNS query request concurrency, The number of upstream DNS servers that are "
-"allowed to initiate requests at the same time"
+"Added domain names will always use 'Local DNS' for resolution, with a forced "
+"TTL of 5 seconds, and results will not be cached (one domain per line, "
+"supports domain matching rules)."
msgstr ""
-#: htdocs/luci-static/resources/view/mosdns/basic.js:273
-msgid "Idle Timeout"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:274
-msgid "DoH/TCP/DoT Connection Multiplexing idle timeout (default 30 seconds)"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:279
-msgid "TCP/DoT Connection Multiplexing"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:280
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:91
msgid ""
-"Enable TCP/DoT RFC 7766 new Query Pipelining connection multiplexing mode"
+"Added domain names will always use 'Remote DNS' for resolution (one domain "
+"per line, supports domain matching rules)."
msgstr ""
-#: htdocs/luci-static/resources/view/mosdns/basic.js:285
-msgid "Disable TLS Certificate"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:286
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:61
msgid ""
-"Disable TLS Servers certificate validation, Can be useful if system CA "
-"certificate expires or the system time is out of order"
+"Added domain names will block DNS resolution (one domain per line, supports "
+"domain matching rules)."
msgstr ""
-#: htdocs/luci-static/resources/view/mosdns/basic.js:292
-msgid "Enable EDNS client subnet"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:297
-msgid "IP Address"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:298
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:211
msgid ""
-"Please provide the IP address you use when accessing foreign websites. This "
-"IP subnet (0/24) will be used as the ECS address for Remote / Streaming "
-"Media DNS requests"
+"Added domain names will block PTR requests (one domain per line, supports "
+"domain matching rules)."
msgstr ""
-#: htdocs/luci-static/resources/view/mosdns/basic.js:299
-msgid ""
-"This feature is typically used when using a self-built DNS server as an "
-"Remote / Streaming Media DNS upstream (requires support from the upstream "
-"server)"
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:140
+msgid "Advanced Options"
msgstr ""
-#: htdocs/luci-static/resources/view/mosdns/basic.js:303
-msgid "Prevent DNS Leaks"
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:208
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:256
+msgid "Aliyun Public DNS (223.5.5.5)"
msgstr ""
-#: htdocs/luci-static/resources/view/mosdns/basic.js:304
-msgid "Enable this option fallback policy forces forwarding to remote DNS"
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:209
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:257
+msgid "Aliyun Public DNS (223.6.6.6)"
msgstr ""
-#: htdocs/luci-static/resources/view/mosdns/basic.js:309
-msgid "Enable DNS Cache"
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:218
+msgid "Aliyun Public DNS (DNS over HTTP/3)"
msgstr ""
-#: htdocs/luci-static/resources/view/mosdns/basic.js:314
-msgid "DNS Cache Size"
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:217
+msgid "Aliyun Public DNS (DNS over HTTPS)"
msgstr ""
-#: htdocs/luci-static/resources/view/mosdns/basic.js:319
-msgid "Lazy Cache TTL"
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:216
+msgid "Aliyun Public DNS (DNS over QUIC)"
msgstr ""
-#: htdocs/luci-static/resources/view/mosdns/basic.js:320
-msgid ""
-"Lazy cache survival time (in second). To disable Lazy Cache, please set to 0."
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:55
+msgid "Another update is already in progress."
msgstr ""
-#: htdocs/luci-static/resources/view/mosdns/basic.js:325
-msgid "Cache Dump"
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:200
+msgid "Apple domains optimization"
msgstr ""
-#: htdocs/luci-static/resources/view/mosdns/basic.js:326
-msgid "Save the cache locally and reload the cache dump on the next startup"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:332
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:332
msgid "Auto Save Cache Interval"
msgstr ""
-#: htdocs/luci-static/resources/view/mosdns/basic.js:337
-msgid "Minimum TTL"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:338
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:86
msgid ""
-"Modify the Minimum TTL value (seconds) for DNS answer results, 0 indicating "
-"no modification"
+"Automatically update GeoIP and GeoSite databases as well as ad filtering "
+"rules through scheduled tasks."
msgstr ""
-#: htdocs/luci-static/resources/view/mosdns/basic.js:343
-msgid "Maximum TTL"
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:214
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:260
+msgid "Baidu Public DNS (180.76.76.76)"
msgstr ""
-#: htdocs/luci-static/resources/view/mosdns/basic.js:344
-msgid ""
-"Modify the Maximum TTL value (seconds) for DNS answer results, 0 indicating "
-"no modification"
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:139
+msgid "Basic Options"
msgstr ""
-#: htdocs/luci-static/resources/view/mosdns/basic.js:349
-msgid "Disable RR Type 65 (HTTPS/SVCB)"
+#: luci-app-mosdns/root/usr/share/luci/menu.d/luci-app-mosdns.json:14
+msgid "Basic Setting"
msgstr ""
-#: htdocs/luci-static/resources/view/mosdns/basic.js:350
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:350
msgid ""
"Block DNS RR Type 65 records (HTTPS/SVCB, used for HTTP/3, ECH, etc.), force "
"using only A/AAAA records."
msgstr ""
-#: htdocs/luci-static/resources/view/mosdns/basic.js:354
-msgid "Enable DNS ADblock"
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:19
+msgid "Block Lists"
msgstr ""
-#: htdocs/luci-static/resources/view/mosdns/basic.js:358
-msgid "ADblock Source"
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:24
+msgid "Block PTR"
msgstr ""
-#: htdocs/luci-static/resources/view/mosdns/basic.js:359
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:252
+msgid "Bootstrap DNS servers"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:253
msgid ""
-"When using custom rule sources, please use rule types supported by MosDNS "
-"(domain lists)."
+"Bootstrap DNS servers are used to resolve IP addresses of the DoH/DoT "
+"resolvers you specify as upstreams"
msgstr ""
-#: htdocs/luci-static/resources/view/mosdns/basic.js:361
-msgid "Support for local files, such as: file:///var/mosdns/example.txt"
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:325
+msgid "Cache Dump"
msgstr ""
-#: htdocs/luci-static/resources/view/mosdns/basic.js:371
-msgid ""
-"Match the parsing result with the Cloudflare IP ranges, and when there is a "
-"successful match, use the 'Custom IP' as the parsing result "
-"(experimental feature)"
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:130
+msgid "Check And Update"
msgstr ""
-#: htdocs/luci-static/resources/view/mosdns/basic.js:377
-msgid "Custom IP"
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:128
+msgid "Check And Update GeoData."
msgstr ""
-#: htdocs/luci-static/resources/view/mosdns/basic.js:382
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:186
+msgid "China DNS prefer IPv4"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:205
+msgid "China DNS server"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:231
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:248
+msgid "Cisco Public DNS (208.67.220.220)"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:230
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:247
+msgid "Cisco Public DNS (208.67.222.222)"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/logs.js:65
+msgid "Clear logs"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:33
+msgid "Close"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:225
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:242
+msgid "CloudFlare Public DNS (1.0.0.1)"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:224
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:241
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:262
+msgid "CloudFlare Public DNS (1.1.1.1)"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:382
msgid "Cloudflare IP Ranges"
msgstr ""
-#: htdocs/luci-static/resources/view/mosdns/basic.js:383
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:141
+msgid "Cloudflare Options"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:133
+msgid "Collecting data..."
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:267
+msgid "Concurrent"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:150
+msgid "Config File"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:430
+msgid "Configuration Editor"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:196
+msgid "Custom China DNS"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:152
+msgid "Custom Config"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:151
+msgid ""
+"Custom Hosts rewrite, for example: baidu.com 10.0.0.1 (one rule per line, "
+"supports domain matching rules)."
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:377
+msgid "Custom IP"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:235
+msgid "Custom Stream Media DNS"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:21
+msgid "DDNS Lists"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:314
+msgid "DNS Cache Size"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:177
+msgid "DNS Forward"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:268
+msgid ""
+"DNS query request concurrency, The number of upstream DNS servers that are "
+"allowed to initiate requests at the same time"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:181
+msgid "DNS redirect"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:129
+msgid "Database Update"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:165
+msgid "Debug"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:151
+msgid "Default Config"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:349
+msgid "Disable RR Type 65 (HTTPS/SVCB)"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:285
+msgid "Disable TLS Certificate"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:286
+msgid ""
+"Disable TLS Servers certificate validation, Can be useful if system CA "
+"certificate expires or the system time is out of order"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:274
+msgid "DoH/TCP/DoT Connection Multiplexing idle timeout (default 30 seconds)"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:91
+msgid "Enable Auto Database Update"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:354
+msgid "Enable DNS ADblock"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:309
+msgid "Enable DNS Cache"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:292
+msgid "Enable EDNS client subnet"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:280
+msgid ""
+"Enable TCP/DoT RFC 7766 new Query Pipelining connection multiplexing mode"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:304
+msgid "Enable this option fallback policy forces forwarding to remote DNS"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:146
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:370
+msgid "Enabled"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:463
+msgid "Enter the GeoIP.dat category to be exported, Allow add multiple tags"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:458
+msgid "Enter the GeoSite.dat category to be exported, Allow add multiple tags"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:168
+msgid "Error"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:95
+msgid "Every Day"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:100
+msgid "Every Friday"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:96
+msgid "Every Monday"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:101
+msgid "Every Saturday"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:102
+msgid "Every Sunday"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:99
+msgid "Every Thursday"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:97
+msgid "Every Tuesday"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:98
+msgid "Every Wednesday"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:459
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:464
+msgid "Export directory: /var/mosdns"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/logs.js:43
+msgid "Failed to clean logs."
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:74
+msgid "Failed to start update."
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:407
+msgid "Flush DNS Cache"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:97
+msgid "Flushing DNS Cache Failed, Please check if MosDNS is running."
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:95
+msgid "Flushing DNS Cache Success."
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:405
+msgid ""
+"Flushing DNS Cache will clear any IP addresses or DNS records from MosDNS "
+"cache."
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:196
+msgid "Follow WAN interface DNS if not enabled"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:201
+msgid ""
+"For Apple domains equipped with Chinese mainland CDN, always responsive to "
+"Chinese CDN IP addresses"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:181
+msgid "Force redirect all local DNS queries to MosDNS, a.k.a. DNS Hijacking"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:177
+msgid "Forward Dnsmasq Domain Name resolution requests to MosDNS"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:116
+msgid "Full"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:114
+msgid "Full: includes all Countries and Private IP addresses."
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:143
+msgid "GeoData Export"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:462
+msgid "GeoIP Tags"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:111
+msgid "GeoIP Type"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:457
+msgid "GeoSite Tags"
+msgstr ""
+
+#: luci-app-mosdns/root/usr/share/luci/menu.d/luci-app-mosdns.json:30
+msgid "Geodata Update"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:121
+msgid "GitHub Proxy"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:227
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:244
+msgid "Google Public DNS (8.8.4.4)"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:226
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:243
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:261
+msgid "Google Public DNS (8.8.8.8)"
+msgstr ""
+
+#: luci-app-mosdns/root/usr/share/rpcd/acl.d/luci-app-mosdns.json:3
+msgid "Grant UCI access for luci-app-mosdns"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:20
+msgid "Grey Lists"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:22
+msgid "Hosts"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:297
+msgid "IP Address"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:383
msgid ""
"IPv4 CIDR: https://www.cloudflare.com/ips-v4
IPv6 CIDR: "
msgstr ""
-#: htdocs/luci-static/resources/view/mosdns/basic.js:402
-msgid "API Listen port"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:408
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:187
msgid ""
-"Flushing DNS Cache will clear any IP addresses or DNS records from MosDNS "
-"cache."
+"IPv4 is preferred for China DNS resolution of dual-stack addresses, and is "
+"not affected when the destination is IPv6 only"
msgstr ""
-#: htdocs/luci-static/resources/view/mosdns/basic.js:410
-msgid "Flush DNS Cache"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:433
-msgid "Configuration Editor"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:434
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:192
msgid ""
-"This is the content of the file '/etc/mosdns/config_custom.yaml' from which "
-"your MosDNS configuration will be generated. Only accepts "
-"configuration content in yaml format."
+"IPv4 is preferred for Remote / Streaming Media DNS resolution of dual-stack "
+"addresses, and is not affected when the destination is IPv6 only"
msgstr ""
-#: htdocs/luci-static/resources/view/mosdns/basic.js:455
-#: htdocs/luci-static/resources/view/mosdns/rules.js:53
-#: htdocs/luci-static/resources/view/mosdns/rules.js:59
-#: htdocs/luci-static/resources/view/mosdns/rules.js:83
-#: htdocs/luci-static/resources/view/mosdns/rules.js:89
-#: htdocs/luci-static/resources/view/mosdns/rules.js:113
-#: htdocs/luci-static/resources/view/mosdns/rules.js:119
-#: htdocs/luci-static/resources/view/mosdns/rules.js:143
-#: htdocs/luci-static/resources/view/mosdns/rules.js:149
-#: htdocs/luci-static/resources/view/mosdns/rules.js:173
-#: htdocs/luci-static/resources/view/mosdns/rules.js:179
-#: htdocs/luci-static/resources/view/mosdns/rules.js:203
-#: htdocs/luci-static/resources/view/mosdns/rules.js:209
-#: htdocs/luci-static/resources/view/mosdns/rules.js:233
-#: htdocs/luci-static/resources/view/mosdns/rules.js:239
-#: htdocs/luci-static/resources/view/mosdns/rules.js:263
-#: htdocs/luci-static/resources/view/mosdns/rules.js:269
-#, javascript-format
-msgid "Unable to save contents: %s"
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:273
+msgid "Idle Timeout"
msgstr ""
-#: htdocs/luci-static/resources/view/mosdns/basic.js:460
-msgid "GeoSite Tags"
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:166
+msgid "Info"
msgstr ""
-#: htdocs/luci-static/resources/view/mosdns/basic.js:461
-msgid "Enter the GeoSite.dat category to be exported, Allow add multiple tags"
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:319
+msgid "Lazy Cache TTL"
msgstr ""
-#: htdocs/luci-static/resources/view/mosdns/basic.js:462
-#: htdocs/luci-static/resources/view/mosdns/basic.js:467
-msgid "Export directory: /var/mosdns"
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:320
+msgid ""
+"Lazy cache survival time (in second). To disable Lazy Cache, please set to 0."
msgstr ""
-#: htdocs/luci-static/resources/view/mosdns/basic.js:465
-msgid "GeoIP Tags"
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:160
+msgid "Listen Address"
msgstr ""
-#: htdocs/luci-static/resources/view/mosdns/basic.js:466
-msgid "Enter the GeoIP.dat category to be exported, Allow add multiple tags"
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:155
+msgid "Listen Port"
msgstr ""
-#: htdocs/luci-static/resources/view/mosdns/logs.js:27
-msgid "No log data."
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:117
+msgid "Little"
msgstr ""
-#: htdocs/luci-static/resources/view/mosdns/logs.js:43
-msgid "Failed to clean logs."
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:112
+msgid "Little: only include Mainland China and Private IP addresses."
msgstr ""
-#: htdocs/luci-static/resources/view/mosdns/logs.js:65
-msgid "Clear logs"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/logs.js:70
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/logs.js:70
msgid "Log Data"
msgstr ""
-#: htdocs/luci-static/resources/view/mosdns/logs.js:75
-#, javascript-format
-msgid "Refresh every %s seconds."
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:172
+msgid "Log File"
msgstr ""
-#: htdocs/luci-static/resources/view/mosdns/rules.js:17
-msgid "Rule Settings"
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:164
+msgid "Log Level"
msgstr ""
-#: htdocs/luci-static/resources/view/mosdns/rules.js:18
-msgid "The list of rules only apply to 'Default Config' profiles."
+#: luci-app-mosdns/root/usr/share/luci/menu.d/luci-app-mosdns.json:38
+msgid "Logs"
msgstr ""
-#: htdocs/luci-static/resources/view/mosdns/rules.js:24
-msgid "White Lists"
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:371
+msgid ""
+"Match the parsing result with the Cloudflare IP ranges, and when there is a "
+"successful match, use the 'Custom IP' as the parsing result (experimental "
+"feature)"
msgstr ""
-#: htdocs/luci-static/resources/view/mosdns/rules.js:25
-msgid "Block Lists"
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:343
+msgid "Maximum TTL"
msgstr ""
-#: htdocs/luci-static/resources/view/mosdns/rules.js:26
-msgid "Grey Lists"
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:337
+msgid "Minimum TTL"
msgstr ""
-#: htdocs/luci-static/resources/view/mosdns/rules.js:27
-msgid "DDNS Lists"
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:344
+msgid ""
+"Modify the Maximum TTL value (seconds) for DNS answer results, 0 indicating "
+"no modification"
msgstr ""
-#: htdocs/luci-static/resources/view/mosdns/rules.js:28
-msgid "Hosts"
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:338
+msgid ""
+"Modify the Minimum TTL value (seconds) for DNS answer results, 0 indicating "
+"no modification"
msgstr ""
-#: htdocs/luci-static/resources/view/mosdns/rules.js:29
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:31
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:33
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:110
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/logs.js:70
+#: luci-app-mosdns/root/usr/share/luci/menu.d/luci-app-mosdns.json:3
+msgid "MosDNS"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:111
+msgid "MosDNS is a plugin-based DNS forwarder/traffic splitter."
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:33
+msgid "NOT RUNNING"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:236
+msgid "Netflix, Disney+, Hulu and streaming media rules list will use this DNS"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/logs.js:27
+msgid "No log data."
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:298
+msgid ""
+"Please provide the IP address you use when accessing foreign websites. This "
+"IP subnet (0/24) will be used as the ECS address for Remote / Streaming "
+"Media DNS requests"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:36
+msgid "Please wait, this may take a few moments..."
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:303
+msgid "Prevent DNS Leaks"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:229
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:246
+msgid "Quad9 Public DNS (149.112.112.112)"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:228
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:245
+msgid "Quad9 Public DNS (9.9.9.9)"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:31
+msgid "RUNNING"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:23
msgid "Redirect"
msgstr ""
-#: htdocs/luci-static/resources/view/mosdns/rules.js:30
-msgid "Block PTR"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/rules.js:31
-msgid "Streaming Media"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/rules.js:37
-msgid ""
-"Added domain names always permit resolution using 'local DNS' with the "
-"highest priority (one domain per line, supports domain matching rules)."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/rules.js:67
-msgid ""
-"Added domain names will block DNS resolution (one domain per line, supports "
-"domain matching rules)."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/rules.js:97
-msgid ""
-"Added domain names will always use 'Remote DNS' for resolution (one domain "
-"per line, supports domain matching rules)."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/rules.js:127
-msgid ""
-"Added domain names will always use 'Local DNS' for resolution, with a forced "
-"TTL of 5 seconds, and results will not be cached (one domain per line, "
-"supports domain matching rules)."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/rules.js:157
-msgid ""
-"Custom Hosts rewrite, for example: baidu.com 10.0.0.1 (one rule per line, "
-"supports domain matching rules)."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/rules.js:187
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:181
msgid ""
"Redirecting requests for domain names. Request domain A, but return records "
"for domain B, for example: baidu.com qq.com (one rule per line)."
msgstr ""
-#: htdocs/luci-static/resources/view/mosdns/rules.js:217
-msgid ""
-"Added domain names will block PTR requests (one domain per line, supports "
-"domain matching rules)."
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/logs.js:75
+msgid "Refresh every %s seconds."
msgstr ""
-#: htdocs/luci-static/resources/view/mosdns/rules.js:247
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:191
+msgid "Remote DNS prefer IPv4"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:223
+msgid "Remote DNS server"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:11
+msgid "Rule Settings"
+msgstr ""
+
+#: luci-app-mosdns/root/usr/share/luci/menu.d/luci-app-mosdns.json:22
+msgid "Rules"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:326
+msgid "Save the cache locally and reload the cache dump on the next startup"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:26
+msgid "Starting update..."
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:25
+msgid "Streaming Media"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:240
+msgid "Streaming Media DNS server"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:361
+msgid "Support for local files, such as: file:///var/mosdns/example.txt"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:279
+msgid "TCP/DoT Connection Multiplexing"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:207
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:255
+msgid "Tencent Public DNS (119.28.28.28)"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:206
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:254
+msgid "Tencent Public DNS (119.29.29.29)"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:215
+msgid "Tencent Public DNS (DNS over HTTPS)"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:12
+msgid "The list of rules only apply to 'Default Config' profiles."
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:299
+msgid ""
+"This feature is typically used when using a self-built DNS server as an "
+"Remote / Streaming Media DNS upstream (requires support from the upstream "
+"server)"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:431
+msgid ""
+"This is the content of the file '/etc/mosdns/config_custom.yaml' from which "
+"your MosDNS configuration will be generated. Only accepts configuration "
+"content in yaml format."
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:210
+msgid "TrafficRoute Public DNS (180.184.1.1)"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:211
+msgid "TrafficRoute Public DNS (180.184.2.2)"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:452
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:47
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:53
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:77
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:83
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:107
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:113
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:137
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:143
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:167
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:173
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:197
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:203
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:227
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:233
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:257
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:263
+msgid "Unable to save contents: %s"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:94
+msgid "Update Cycle"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:85
+msgid "Update GeoIP & GeoSite databases"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:105
+msgid "Update Time"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:122
+msgid ""
+"Update data files with GitHub Proxy, leave blank to disable proxy downloads."
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:78
+msgid "Update failed: %s"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:49
+msgid "Update success"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:35
+msgid "Updating Database..."
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:167
+msgid "Warning"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:241
msgid ""
"When enabling 'Custom Stream Media DNS', added domains will always use the "
"'Streaming Media DNS server' for resolution (one domain per line, supports "
"domain matching rules)."
msgstr ""
-#: htdocs/luci-static/resources/view/mosdns/rules.js:284
-#: htdocs/luci-static/resources/view/mosdns/rules.js:288
-#, javascript-format
-msgid "Failed to restart mosdns: %s"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/update.js:9
-msgid "Updating..."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/update.js:10
-msgid "Please wait, this may take a few moments..."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/update.js:16
-msgid "Update success"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/update.js:19
-msgid "Update failed, Please check the network status"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/update.js:23
-#, javascript-format
-msgid "Update failed: %s"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/update.js:30
-msgid "Update GeoIP & GeoSite databases"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/update.js:31
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:359
msgid ""
-"Automatically update GeoIP and GeoSite databases as well as ad filtering "
-"rules through scheduled tasks."
+"When using custom rule sources, please use rule types supported by MosDNS "
+"(domain list or AdGuardHome rules)."
msgstr ""
-#: htdocs/luci-static/resources/view/mosdns/update.js:36
-msgid "Enable Auto Database Update"
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:18
+msgid "White Lists"
msgstr ""
-#: htdocs/luci-static/resources/view/mosdns/update.js:39
-msgid "Update Cycle"
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:212
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:258
+msgid "Xinfeng Public DNS (114.114.114.114)"
msgstr ""
-#: htdocs/luci-static/resources/view/mosdns/update.js:40
-msgid "Every Day"
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:213
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:259
+msgid "Xinfeng Public DNS (114.114.115.115)"
msgstr ""
-#: htdocs/luci-static/resources/view/mosdns/update.js:41
-msgid "Every Monday"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/update.js:42
-msgid "Every Tuesday"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/update.js:43
-msgid "Every Wednesday"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/update.js:44
-msgid "Every Thursday"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/update.js:45
-msgid "Every Friday"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/update.js:46
-msgid "Every Saturday"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/update.js:47
-msgid "Every Sunday"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/update.js:50
-msgid "Update Time"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/update.js:56
-msgid "GeoIP Type"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/update.js:57
-msgid "Little: only include Mainland China and Private IP addresses."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/update.js:59
-msgid "Full: includes all Countries and Private IP addresses."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/update.js:61
-msgid "Full"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/update.js:62
-msgid "Little"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/update.js:66
-msgid "GitHub Proxy"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/update.js:67
-msgid ""
-"Update data files with GitHub Proxy, leave blank to disable proxy downloads."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/update.js:68
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:123
msgid "https://gh-proxy.com"
msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/update.js:73
-msgid "Check And Update GeoData."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/update.js:74
-msgid "Database Update"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/update.js:75
-msgid "Check And Update"
-msgstr ""
-
-#: root/usr/share/luci/menu.d/luci-app-mosdns.json:14
-msgid "Basic Setting"
-msgstr ""
-
-#: root/usr/share/luci/menu.d/luci-app-mosdns.json:22
-msgid "Rules"
-msgstr ""
-
-#: root/usr/share/luci/menu.d/luci-app-mosdns.json:30
-msgid "Geodata Update"
-msgstr ""
-
-#: root/usr/share/luci/menu.d/luci-app-mosdns.json:38
-msgid "Logs"
-msgstr ""
diff --git a/luci-app-mosdns/po/zh_Hans/mosdns.po b/luci-app-mosdns/po/zh_Hans/mosdns.po
index 00d434c9b..742b8c305 100644
--- a/luci-app-mosdns/po/zh_Hans/mosdns.po
+++ b/luci-app-mosdns/po/zh_Hans/mosdns.po
@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-03-20 09:23+0800\n"
-"PO-Revision-Date: 2026-03-19 20:33+0800\n"
+"PO-Revision-Date: 2026-05-01 09:13+0800\n"
"Last-Translator: sbwml \n"
"Language-Team: Chinese\n"
"Language: zh_Hans\n"
@@ -11,605 +11,23 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-#: htdocs/luci-static/resources/view/mosdns/basic.js:31
-#: htdocs/luci-static/resources/view/mosdns/basic.js:33
-#: htdocs/luci-static/resources/view/mosdns/basic.js:110
-#: htdocs/luci-static/resources/view/mosdns/logs.js:70
-msgid "MosDNS"
-msgstr "MosDNS"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:31
-msgid "RUNNING"
-msgstr "运行中"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:33
-msgid "NOT RUNNING"
-msgstr "未运行"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:95
-msgid "Flushing DNS Cache Success."
-msgstr "刷新 DNS 缓存成功"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:97
-msgid "Flushing DNS Cache Failed, Please check if MosDNS is running."
-msgstr "刷新 DNS 缓存失败,请检查 MosDNS 状态是否在运行中。"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:111
-msgid "MosDNS is a plugin-based DNS forwarder/traffic splitter."
-msgstr "MosDNS 是一个插件化的 DNS 转发/分流器。"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:133
-msgid "Collecting data..."
-msgstr "获取数据中..."
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:139
-msgid "Basic Options"
-msgstr "基本选项"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:140
-msgid "Advanced Options"
-msgstr "高级选项"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:141
-msgid "Cloudflare Options"
-msgstr "Cloudflare 选项"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:142
-msgid "API Options"
-msgstr "API 选项"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:143
-msgid "GeoData Export"
-msgstr "GeoData 导出"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:146
-#: htdocs/luci-static/resources/view/mosdns/basic.js:370
-msgid "Enabled"
-msgstr "启用"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:150
-msgid "Config File"
-msgstr "配置文件"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:151
-msgid "Default Config"
-msgstr "内置预设"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:152
-msgid "Custom Config"
-msgstr "自定义"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:155
-msgid "Listen Port"
-msgstr "监听端口"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:160
-msgid "Listen Address"
-msgstr "监听地址"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:164
-msgid "Log Level"
-msgstr "日志等级"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:165
-msgid "Debug"
-msgstr "调试"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:166
-msgid "Info"
-msgstr "信息"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:167
-msgid "Warning"
-msgstr "警告"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:168
-msgid "Error"
-msgstr "错误"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:172
-msgid "Log File"
-msgstr "日志文件"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:177
-msgid "DNS Forward"
-msgstr "DNS 转发"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:177
-msgid "Forward Dnsmasq Domain Name resolution requests to MosDNS"
-msgstr "将 Dnsmasq 域名解析请求转发到 MosDNS 服务器"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:181
-msgid "DNS redirect"
-msgstr "DNS 重定向"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:181
-msgid "Force redirect all local DNS queries to MosDNS, a.k.a. DNS Hijacking"
-msgstr "强制将所有本地 DNS 查询重定向到 MosDNS,即 DNS 劫持。"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:186
-msgid "China DNS prefer IPv4"
-msgstr "国内 DNS 首选 IPv4"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:187
-msgid ""
-"IPv4 is preferred for China DNS resolution of dual-stack addresses, and is "
-"not affected when the destination is IPv6 only"
-msgstr "国内 DNS 解析双栈地址时首选 IPv4,目标仅 IPv6 时不受影响"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:191
-msgid "Remote DNS prefer IPv4"
-msgstr "远程 DNS 首选 IPv4"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:192
-msgid ""
-"IPv4 is preferred for Remote / Streaming Media DNS resolution of dual-stack "
-"addresses, and is not affected when the destination is IPv6 only"
-msgstr "远程 / 流媒体 DNS 解析双栈地址时首选 IPv4,目标仅 IPv6 时不受影响"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:196
-msgid "Custom China DNS"
-msgstr "自定义国内 DNS"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:196
-msgid "Follow WAN interface DNS if not enabled"
-msgstr "不启用则使用 WAN 接口 DNS"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:200
-msgid "Apple domains optimization"
-msgstr "Apple 域名解析优化"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:201
-msgid ""
-"For Apple domains equipped with Chinese mainland CDN, always responsive to "
-"Chinese CDN IP addresses"
-msgstr "配备中国大陆 CDN 的 Apple 域名,始终应答中国大陆 CDN 地址"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:205
-msgid "China DNS server"
-msgstr "国内 DNS 服务器"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:206
-#: htdocs/luci-static/resources/view/mosdns/basic.js:254
-msgid "Tencent Public DNS (119.29.29.29)"
-msgstr "腾讯公共 DNS(119.29.29.29)"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:207
-#: htdocs/luci-static/resources/view/mosdns/basic.js:255
-msgid "Tencent Public DNS (119.28.28.28)"
-msgstr "腾讯公共 DNS(119.28.28.28)"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:208
-#: htdocs/luci-static/resources/view/mosdns/basic.js:256
-msgid "Aliyun Public DNS (223.5.5.5)"
-msgstr "阿里云公共 DNS(223.5.5.5)"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:209
-#: htdocs/luci-static/resources/view/mosdns/basic.js:257
-msgid "Aliyun Public DNS (223.6.6.6)"
-msgstr "阿里云公共 DNS(223.6.6.6)"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:210
-msgid "TrafficRoute Public DNS (180.184.1.1)"
-msgstr "火山引擎公共 DNS(180.184.1.1)"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:211
-msgid "TrafficRoute Public DNS (180.184.2.2)"
-msgstr "火山引擎公共 DNS(180.184.2.2)"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:212
-#: htdocs/luci-static/resources/view/mosdns/basic.js:258
-msgid "Xinfeng Public DNS (114.114.114.114)"
-msgstr "信风公共 DNS(114.114.114.114)"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:213
-#: htdocs/luci-static/resources/view/mosdns/basic.js:259
-msgid "Xinfeng Public DNS (114.114.115.115)"
-msgstr "信风公共 DNS(114.114.115.115)"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:214
-#: htdocs/luci-static/resources/view/mosdns/basic.js:260
-msgid "Baidu Public DNS (180.76.76.76)"
-msgstr "百度公共 DNS(180.76.76.76)"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:215
-msgid "Tencent Public DNS (DNS over HTTPS)"
-msgstr "腾讯公共 DNS(DNS over HTTPS)"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:216
-msgid "Aliyun Public DNS (DNS over QUIC)"
-msgstr "阿里云公共 DNS(DNS over QUIC)"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:217
-msgid "Aliyun Public DNS (DNS over HTTPS)"
-msgstr "阿里云公共 DNS(DNS over HTTPS)"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:218
-msgid "Aliyun Public DNS (DNS over HTTP/3)"
-msgstr "阿里云公共 DNS(DNS over HTTP/3)"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:219
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:219
msgid "360 Public DNS (DNS over HTTPS)"
msgstr "360 安全 DNS(DNS over HTTPS)"
-#: htdocs/luci-static/resources/view/mosdns/basic.js:223
-msgid "Remote DNS server"
-msgstr "远程 DNS 服务器"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:224
-#: htdocs/luci-static/resources/view/mosdns/basic.js:241
-#: htdocs/luci-static/resources/view/mosdns/basic.js:262
-msgid "CloudFlare Public DNS (1.1.1.1)"
-msgstr "CloudFlare 公共 DNS(1.1.1.1)"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:225
-#: htdocs/luci-static/resources/view/mosdns/basic.js:242
-msgid "CloudFlare Public DNS (1.0.0.1)"
-msgstr "CloudFlare 公共 DNS(1.0.0.1)"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:226
-#: htdocs/luci-static/resources/view/mosdns/basic.js:243
-#: htdocs/luci-static/resources/view/mosdns/basic.js:261
-msgid "Google Public DNS (8.8.8.8)"
-msgstr "谷歌公共 DNS(8.8.8.8)"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:227
-#: htdocs/luci-static/resources/view/mosdns/basic.js:244
-msgid "Google Public DNS (8.8.4.4)"
-msgstr "谷歌公共 DNS(8.8.4.4)"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:228
-#: htdocs/luci-static/resources/view/mosdns/basic.js:245
-msgid "Quad9 Public DNS (9.9.9.9)"
-msgstr "Quad9 公共 DNS(9.9.9.9)"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:229
-#: htdocs/luci-static/resources/view/mosdns/basic.js:246
-msgid "Quad9 Public DNS (149.112.112.112)"
-msgstr "Quad9 公共 DNS(149.112.112.112)"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:230
-#: htdocs/luci-static/resources/view/mosdns/basic.js:247
-msgid "Cisco Public DNS (208.67.222.222)"
-msgstr "思科公共 DNS(208.67.222.222)"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:231
-#: htdocs/luci-static/resources/view/mosdns/basic.js:248
-msgid "Cisco Public DNS (208.67.220.220)"
-msgstr "思科公共 DNS(208.67.220.220)"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:235
-msgid "Custom Stream Media DNS"
-msgstr "自定义流媒体 DNS"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:236
-msgid "Netflix, Disney+, Hulu and streaming media rules list will use this DNS"
-msgstr "自定义 Netflix、Disney+、Hulu 以及 “流媒体” 规则列表的 DNS 服务器"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:240
-msgid "Streaming Media DNS server"
-msgstr "流媒体 DNS 服务器"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:252
-msgid "Bootstrap DNS servers"
-msgstr "Bootstrap DNS 服务器"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:253
-msgid ""
-"Bootstrap DNS servers are used to resolve IP addresses of the DoH/DoT "
-"resolvers you specify as upstreams"
-msgstr "Bootstrap DNS 服务器用于解析您指定为上游的 DoH / DoT 解析器的 IP 地址"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:267
-msgid "Concurrent"
-msgstr "DNS 服务器并发数(默认 2)"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:268
-msgid ""
-"DNS query request concurrency, The number of upstream DNS servers that are "
-"allowed to initiate requests at the same time"
-msgstr "DNS 查询请求并发数,允许同时发起请求的上游 DNS 服务器数量"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:273
-msgid "Idle Timeout"
-msgstr "空闲超时"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:274
-msgid "DoH/TCP/DoT Connection Multiplexing idle timeout (default 30 seconds)"
-msgstr "DoH/TCP/DoT 连接复用空闲保持时间(默认 30 秒)"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:279
-msgid "TCP/DoT Connection Multiplexing"
-msgstr "TCP/DoT 连接复用"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:280
-msgid ""
-"Enable TCP/DoT RFC 7766 new Query Pipelining connection multiplexing mode"
-msgstr "启用 TCP/DoT RFC 7766 新型 Query Pipelining 连接复用模式"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:285
-msgid "Disable TLS Certificate"
-msgstr "禁用 TLS 证书"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:286
-msgid ""
-"Disable TLS Servers certificate validation, Can be useful if system CA "
-"certificate expires or the system time is out of order"
-msgstr ""
-"禁用 TLS 服务器证书验证,当系统 CA 证书过期或系统时间错乱时,本选项可能会有用"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:292
-msgid "Enable EDNS client subnet"
-msgstr "启用 EDNS 客户端子网"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:297
-msgid "IP Address"
-msgstr "IP 地址"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:298
-msgid ""
-"Please provide the IP address you use when accessing foreign websites. This "
-"IP subnet (0/24) will be used as the ECS address for Remote / Streaming "
-"Media DNS requests"
-msgstr ""
-"请提供您在访问国外网站时使用的 IP 地址,这个 IP 子网(0/24)将用作 远程 / 流"
-"媒体 DNS 请求的 ECS 地址"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:299
-msgid ""
-"This feature is typically used when using a self-built DNS server as an "
-"Remote / Streaming Media DNS upstream (requires support from the upstream "
-"server)"
-msgstr ""
-"此功能通常在使用自建 DNS 服务器作为 远程 / 流媒体 DNS 上游时使用(需要上游服"
-"务器的支持)"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:303
-msgid "Prevent DNS Leaks"
-msgstr "防止 DNS 泄漏"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:304
-msgid "Enable this option fallback policy forces forwarding to remote DNS"
-msgstr "启用此选项 fallback 策略会强制转发到远程 DNS"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:309
-msgid "Enable DNS Cache"
-msgstr "启用 DNS 缓存"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:314
-msgid "DNS Cache Size"
-msgstr "DNS 缓存大小"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:319
-msgid "Lazy Cache TTL"
-msgstr "乐观缓存 TTL"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:320
-msgid ""
-"Lazy cache survival time (in second). To disable Lazy Cache, please set to 0."
-msgstr "乐观缓存生存时间(单位:秒),要禁用乐观缓存,请设置为 0"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:325
-msgid "Cache Dump"
-msgstr "自动保存缓存"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:326
-msgid "Save the cache locally and reload the cache dump on the next startup"
-msgstr "保存缓存到本地文件,以供下次启动时重新载入使用"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:332
-msgid "Auto Save Cache Interval"
-msgstr "自动保存缓存间隔(秒)"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:337
-msgid "Minimum TTL"
-msgstr "覆盖最小 TTL 值(默认 0)"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:338
-msgid ""
-"Modify the Minimum TTL value (seconds) for DNS answer results, 0 indicating "
-"no modification"
-msgstr "修改 DNS 应答结果的最小 TTL 值 (秒),0 表示不修改"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:343
-msgid "Maximum TTL"
-msgstr "覆盖最大 TTL 值(默认 0)"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:344
-msgid ""
-"Modify the Maximum TTL value (seconds) for DNS answer results, 0 indicating "
-"no modification"
-msgstr "修改 DNS 应答结果的最大 TTL 值(秒),0 表示不修改"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:349
-msgid "Disable RR Type 65 (HTTPS/SVCB)"
-msgstr "禁用 RR Type 65 (HTTPS/SVCB)"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:350
-msgid ""
-"Block DNS RR Type 65 records (HTTPS/SVCB, used for HTTP/3, ECH, etc.), force "
-"using only A/AAAA records."
-msgstr ""
-"屏蔽 DNS 类型 65 记录(HTTPS/SVCB,用于 HTTP/3、ECH 等),强制仅使用 A/AAAA "
-"解析。"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:354
-msgid "Enable DNS ADblock"
-msgstr "启用 DNS 广告过滤"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:358
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:358
msgid "ADblock Source"
msgstr "广告过滤规则来源"
-#: htdocs/luci-static/resources/view/mosdns/basic.js:359
-msgid ""
-"When using custom rule sources, please use rule types supported by MosDNS "
-"(domain lists)."
-msgstr "使用自定义规则来源时,请使用 MosDNS 支持的规则类型(域名列表)"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:361
-msgid "Support for local files, such as: file:///var/mosdns/example.txt"
-msgstr "支持本地文件,例如:file:///var/mosdns/example.txt"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:371
-#, fuzzy
-msgid ""
-"Match the parsing result with the Cloudflare IP ranges, and when there is a "
-"successful match, use the 'Custom IP' as the parsing result "
-"(experimental feature)"
-msgstr ""
-"将解析结果与 Cloudflare IP 范围进行匹配,当匹配成功时,使用 “自选 IP” 作为解"
-"析结果(实验性功能)"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:377
-msgid "Custom IP"
-msgstr "自选 IP"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:382
-msgid "Cloudflare IP Ranges"
-msgstr "Cloudflare IP 范围"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:383
-msgid ""
-"IPv4 CIDR: https://www.cloudflare.com/ips-v4
IPv6 CIDR: https://www.cloudflare.com/ips-"
-"v6"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:402
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:399
msgid "API Listen port"
msgstr "API 监听端口"
-#: htdocs/luci-static/resources/view/mosdns/basic.js:408
-msgid ""
-"Flushing DNS Cache will clear any IP addresses or DNS records from MosDNS "
-"cache."
-msgstr "刷新 DNS 缓存会清空 MosDNS 所有 IP 地址和 DNS 解析缓存。"
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:142
+msgid "API Options"
+msgstr "API 选项"
-#: htdocs/luci-static/resources/view/mosdns/basic.js:410
-msgid "Flush DNS Cache"
-msgstr "刷新 DNS 缓存"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:433
-msgid "Configuration Editor"
-msgstr "配置编辑器"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:434
-#, fuzzy
-msgid ""
-"This is the content of the file '/etc/mosdns/config_custom.yaml' from which "
-"your MosDNS configuration will be generated. Only accepts "
-"configuration content in yaml format."
-msgstr ""
-"这是文件 “/etc/mosdns/config_custom.yaml” 的内容,您的 MosDNS 配置将从此文件"
-"生成。仅接受 yaml 格式的配置内容。"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:455
-#: htdocs/luci-static/resources/view/mosdns/rules.js:53
-#: htdocs/luci-static/resources/view/mosdns/rules.js:59
-#: htdocs/luci-static/resources/view/mosdns/rules.js:83
-#: htdocs/luci-static/resources/view/mosdns/rules.js:89
-#: htdocs/luci-static/resources/view/mosdns/rules.js:113
-#: htdocs/luci-static/resources/view/mosdns/rules.js:119
-#: htdocs/luci-static/resources/view/mosdns/rules.js:143
-#: htdocs/luci-static/resources/view/mosdns/rules.js:149
-#: htdocs/luci-static/resources/view/mosdns/rules.js:173
-#: htdocs/luci-static/resources/view/mosdns/rules.js:179
-#: htdocs/luci-static/resources/view/mosdns/rules.js:203
-#: htdocs/luci-static/resources/view/mosdns/rules.js:209
-#: htdocs/luci-static/resources/view/mosdns/rules.js:233
-#: htdocs/luci-static/resources/view/mosdns/rules.js:239
-#: htdocs/luci-static/resources/view/mosdns/rules.js:263
-#: htdocs/luci-static/resources/view/mosdns/rules.js:269
-#, javascript-format
-msgid "Unable to save contents: %s"
-msgstr "无法保存内容:%s"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:460
-msgid "GeoSite Tags"
-msgstr "GeoSite 标签"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:461
-msgid "Enter the GeoSite.dat category to be exported, Allow add multiple tags"
-msgstr "填写需要导出的 GeoSite.dat 类别条目,允许添加多个标签"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:462
-#: htdocs/luci-static/resources/view/mosdns/basic.js:467
-msgid "Export directory: /var/mosdns"
-msgstr "导出目录:/var/mosdns"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:465
-msgid "GeoIP Tags"
-msgstr "GeoIP 标签"
-
-#: htdocs/luci-static/resources/view/mosdns/basic.js:466
-msgid "Enter the GeoIP.dat category to be exported, Allow add multiple tags"
-msgstr "输入需要导出的 GeoIP.dat 类别条目,允许添加多个标签"
-
-#: htdocs/luci-static/resources/view/mosdns/logs.js:27
-msgid "No log data."
-msgstr "无日志数据。"
-
-#: htdocs/luci-static/resources/view/mosdns/logs.js:43
-#, fuzzy
-msgid "Failed to clean logs."
-msgstr "无法重启 MosDNS:%s"
-
-#: htdocs/luci-static/resources/view/mosdns/logs.js:65
-msgid "Clear logs"
-msgstr "清空日志"
-
-#: htdocs/luci-static/resources/view/mosdns/logs.js:70
-msgid "Log Data"
-msgstr "日志数据"
-
-#: htdocs/luci-static/resources/view/mosdns/logs.js:75
-#, javascript-format
-msgid "Refresh every %s seconds."
-msgstr "每 %s 秒刷新。"
-
-#: htdocs/luci-static/resources/view/mosdns/rules.js:17
-msgid "Rule Settings"
-msgstr "自定义规则列表"
-
-#: htdocs/luci-static/resources/view/mosdns/rules.js:18
-msgid "The list of rules only apply to 'Default Config' profiles."
-msgstr "规则列表仅适用于 “内置预设” 配置文件。"
-
-#: htdocs/luci-static/resources/view/mosdns/rules.js:24
-msgid "White Lists"
-msgstr "白名单"
-
-#: htdocs/luci-static/resources/view/mosdns/rules.js:25
-msgid "Block Lists"
-msgstr "黑名单"
-
-#: htdocs/luci-static/resources/view/mosdns/rules.js:26
-msgid "Grey Lists"
-msgstr "灰名单"
-
-#: htdocs/luci-static/resources/view/mosdns/rules.js:27
-msgid "DDNS Lists"
-msgstr "DDNS 域名"
-
-#: htdocs/luci-static/resources/view/mosdns/rules.js:28
-msgid "Hosts"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/rules.js:29
-msgid "Redirect"
-msgstr "重定向"
-
-#: htdocs/luci-static/resources/view/mosdns/rules.js:30
-msgid "Block PTR"
-msgstr "PTR 黑名单"
-
-#: htdocs/luci-static/resources/view/mosdns/rules.js:31
-msgid "Streaming Media"
-msgstr "流媒体"
-
-#: htdocs/luci-static/resources/view/mosdns/rules.js:37
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:31
msgid ""
"Added domain names always permit resolution using 'local DNS' with the "
"highest priority (one domain per line, supports domain matching rules)."
@@ -617,20 +35,7 @@ msgstr ""
"加入的域名始终允许使用 “本地 DNS” 进行解析,且优先级最高(每个域名一行,支持"
"域名匹配规则)"
-#: htdocs/luci-static/resources/view/mosdns/rules.js:67
-msgid ""
-"Added domain names will block DNS resolution (one domain per line, supports "
-"domain matching rules)."
-msgstr "加入的域名将屏蔽 DNS 解析(每个域名一行,支持域名匹配规则)"
-
-#: htdocs/luci-static/resources/view/mosdns/rules.js:97
-msgid ""
-"Added domain names will always use 'Remote DNS' for resolution (one domain "
-"per line, supports domain matching rules)."
-msgstr ""
-"加入的域名始终使用 “远程 DNS” 进行解析(每个域名一行,支持域名匹配规则)"
-
-#: htdocs/luci-static/resources/view/mosdns/rules.js:127
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:121
msgid ""
"Added domain names will always use 'Local DNS' for resolution, with a forced "
"TTL of 5 seconds, and results will not be cached (one domain per line, "
@@ -639,14 +44,598 @@ msgstr ""
"加入的域名始终使用 “本地 DNS” 进行解析,并且强制 TTL 5 秒,解析结果不会进入缓"
"存(每个域名一行,支持域名匹配规则)"
-#: htdocs/luci-static/resources/view/mosdns/rules.js:157
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:91
+msgid ""
+"Added domain names will always use 'Remote DNS' for resolution (one domain "
+"per line, supports domain matching rules)."
+msgstr ""
+"加入的域名始终使用 “远程 DNS” 进行解析(每个域名一行,支持域名匹配规则)"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:61
+msgid ""
+"Added domain names will block DNS resolution (one domain per line, supports "
+"domain matching rules)."
+msgstr "加入的域名将屏蔽 DNS 解析(每个域名一行,支持域名匹配规则)"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:211
+msgid ""
+"Added domain names will block PTR requests (one domain per line, supports "
+"domain matching rules)."
+msgstr "加入的域名将阻止 PTR 请求(每个域名一行,支持域名匹配规则)"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:140
+msgid "Advanced Options"
+msgstr "高级选项"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:208
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:256
+msgid "Aliyun Public DNS (223.5.5.5)"
+msgstr "阿里云公共 DNS(223.5.5.5)"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:209
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:257
+msgid "Aliyun Public DNS (223.6.6.6)"
+msgstr "阿里云公共 DNS(223.6.6.6)"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:218
+msgid "Aliyun Public DNS (DNS over HTTP/3)"
+msgstr "阿里云公共 DNS(DNS over HTTP/3)"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:217
+msgid "Aliyun Public DNS (DNS over HTTPS)"
+msgstr "阿里云公共 DNS(DNS over HTTPS)"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:216
+msgid "Aliyun Public DNS (DNS over QUIC)"
+msgstr "阿里云公共 DNS(DNS over QUIC)"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:55
+msgid "Another update is already in progress."
+msgstr "另一个更新正在进行中。"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:200
+msgid "Apple domains optimization"
+msgstr "Apple 域名解析优化"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:332
+msgid "Auto Save Cache Interval"
+msgstr "自动保存缓存间隔(秒)"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:86
+msgid ""
+"Automatically update GeoIP and GeoSite databases as well as ad filtering "
+"rules through scheduled tasks."
+msgstr "通过定时任务自动更新 GeoIP 和 GeoSite 数据库以及广告过滤规则。"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:214
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:260
+msgid "Baidu Public DNS (180.76.76.76)"
+msgstr "百度公共 DNS(180.76.76.76)"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:139
+msgid "Basic Options"
+msgstr "基本选项"
+
+#: luci-app-mosdns/root/usr/share/luci/menu.d/luci-app-mosdns.json:14
+msgid "Basic Setting"
+msgstr "基本设置"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:350
+msgid ""
+"Block DNS RR Type 65 records (HTTPS/SVCB, used for HTTP/3, ECH, etc.), force "
+"using only A/AAAA records."
+msgstr ""
+"屏蔽 DNS 类型 65 记录(HTTPS/SVCB,用于 HTTP/3、ECH 等),强制仅使用 A/AAAA "
+"解析。"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:19
+msgid "Block Lists"
+msgstr "黑名单"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:24
+msgid "Block PTR"
+msgstr "PTR 黑名单"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:252
+msgid "Bootstrap DNS servers"
+msgstr "Bootstrap DNS 服务器"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:253
+msgid ""
+"Bootstrap DNS servers are used to resolve IP addresses of the DoH/DoT "
+"resolvers you specify as upstreams"
+msgstr "Bootstrap DNS 服务器用于解析您指定为上游的 DoH / DoT 解析器的 IP 地址"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:325
+msgid "Cache Dump"
+msgstr "自动保存缓存"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:130
+msgid "Check And Update"
+msgstr "检查并更新"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:128
+msgid "Check And Update GeoData."
+msgstr "检查并更新 GeoData 数据库。"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:186
+msgid "China DNS prefer IPv4"
+msgstr "国内 DNS 首选 IPv4"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:205
+msgid "China DNS server"
+msgstr "国内 DNS 服务器"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:231
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:248
+msgid "Cisco Public DNS (208.67.220.220)"
+msgstr "思科公共 DNS(208.67.220.220)"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:230
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:247
+msgid "Cisco Public DNS (208.67.222.222)"
+msgstr "思科公共 DNS(208.67.222.222)"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/logs.js:65
+msgid "Clear logs"
+msgstr "清空日志"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:33
+msgid "Close"
+msgstr "关闭"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:225
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:242
+msgid "CloudFlare Public DNS (1.0.0.1)"
+msgstr "CloudFlare 公共 DNS(1.0.0.1)"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:224
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:241
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:262
+msgid "CloudFlare Public DNS (1.1.1.1)"
+msgstr "CloudFlare 公共 DNS(1.1.1.1)"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:382
+msgid "Cloudflare IP Ranges"
+msgstr "Cloudflare IP 范围"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:141
+msgid "Cloudflare Options"
+msgstr "Cloudflare 选项"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:133
+msgid "Collecting data..."
+msgstr "获取数据中..."
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:267
+msgid "Concurrent"
+msgstr "DNS 服务器并发数(默认 2)"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:150
+msgid "Config File"
+msgstr "配置文件"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:430
+msgid "Configuration Editor"
+msgstr "配置编辑器"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:196
+msgid "Custom China DNS"
+msgstr "自定义国内 DNS"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:152
+msgid "Custom Config"
+msgstr "自定义"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:151
msgid ""
"Custom Hosts rewrite, for example: baidu.com 10.0.0.1 (one rule per line, "
"supports domain matching rules)."
msgstr ""
"自定义 Hosts 重写,如:baidu.com 10.0.0.1(每个规则一行,支持域名匹配规则)"
-#: htdocs/luci-static/resources/view/mosdns/rules.js:187
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:377
+msgid "Custom IP"
+msgstr "自选 IP"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:235
+msgid "Custom Stream Media DNS"
+msgstr "自定义流媒体 DNS"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:21
+msgid "DDNS Lists"
+msgstr "DDNS 域名"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:314
+msgid "DNS Cache Size"
+msgstr "DNS 缓存大小"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:177
+msgid "DNS Forward"
+msgstr "DNS 转发"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:268
+msgid ""
+"DNS query request concurrency, The number of upstream DNS servers that are "
+"allowed to initiate requests at the same time"
+msgstr "DNS 查询请求并发数,允许同时发起请求的上游 DNS 服务器数量"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:181
+msgid "DNS redirect"
+msgstr "DNS 重定向"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:129
+msgid "Database Update"
+msgstr "数据库更新"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:165
+msgid "Debug"
+msgstr "调试"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:151
+msgid "Default Config"
+msgstr "内置预设"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:349
+msgid "Disable RR Type 65 (HTTPS/SVCB)"
+msgstr "禁用 RR Type 65 (HTTPS/SVCB)"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:285
+msgid "Disable TLS Certificate"
+msgstr "禁用 TLS 证书"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:286
+msgid ""
+"Disable TLS Servers certificate validation, Can be useful if system CA "
+"certificate expires or the system time is out of order"
+msgstr ""
+"禁用 TLS 服务器证书验证,当系统 CA 证书过期或系统时间错乱时,本选项可能会有用"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:274
+msgid "DoH/TCP/DoT Connection Multiplexing idle timeout (default 30 seconds)"
+msgstr "DoH/TCP/DoT 连接复用空闲保持时间(默认 30 秒)"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:91
+msgid "Enable Auto Database Update"
+msgstr "启用自动更新"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:354
+msgid "Enable DNS ADblock"
+msgstr "启用 DNS 广告过滤"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:309
+msgid "Enable DNS Cache"
+msgstr "启用 DNS 缓存"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:292
+msgid "Enable EDNS client subnet"
+msgstr "启用 EDNS 客户端子网"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:280
+msgid ""
+"Enable TCP/DoT RFC 7766 new Query Pipelining connection multiplexing mode"
+msgstr "启用 TCP/DoT RFC 7766 新型 Query Pipelining 连接复用模式"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:304
+msgid "Enable this option fallback policy forces forwarding to remote DNS"
+msgstr "启用此选项 fallback 策略会强制转发到远程 DNS"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:146
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:370
+msgid "Enabled"
+msgstr "启用"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:463
+msgid "Enter the GeoIP.dat category to be exported, Allow add multiple tags"
+msgstr "输入需要导出的 GeoIP.dat 类别条目,允许添加多个标签"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:458
+msgid "Enter the GeoSite.dat category to be exported, Allow add multiple tags"
+msgstr "填写需要导出的 GeoSite.dat 类别条目,允许添加多个标签"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:168
+msgid "Error"
+msgstr "错误"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:95
+msgid "Every Day"
+msgstr "每天"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:100
+msgid "Every Friday"
+msgstr "每周五"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:96
+msgid "Every Monday"
+msgstr "每周一"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:101
+msgid "Every Saturday"
+msgstr "每周六"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:102
+msgid "Every Sunday"
+msgstr "每周日"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:99
+msgid "Every Thursday"
+msgstr "每周四"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:97
+msgid "Every Tuesday"
+msgstr "每周二"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:98
+msgid "Every Wednesday"
+msgstr "每周三"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:459
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:464
+msgid "Export directory: /var/mosdns"
+msgstr "导出目录:/var/mosdns"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/logs.js:43
+msgid "Failed to clean logs."
+msgstr "清理日志失败:%s"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:74
+msgid "Failed to start update."
+msgstr "启动更新失败"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:407
+msgid "Flush DNS Cache"
+msgstr "刷新 DNS 缓存"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:97
+msgid "Flushing DNS Cache Failed, Please check if MosDNS is running."
+msgstr "刷新 DNS 缓存失败,请检查 MosDNS 状态是否在运行中。"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:95
+msgid "Flushing DNS Cache Success."
+msgstr "刷新 DNS 缓存成功"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:405
+msgid ""
+"Flushing DNS Cache will clear any IP addresses or DNS records from MosDNS "
+"cache."
+msgstr "刷新 DNS 缓存会清空 MosDNS 所有 IP 地址和 DNS 解析缓存。"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:196
+msgid "Follow WAN interface DNS if not enabled"
+msgstr "不启用则使用 WAN 接口 DNS"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:201
+msgid ""
+"For Apple domains equipped with Chinese mainland CDN, always responsive to "
+"Chinese CDN IP addresses"
+msgstr "配备中国大陆 CDN 的 Apple 域名,始终应答中国大陆 CDN 地址"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:181
+msgid "Force redirect all local DNS queries to MosDNS, a.k.a. DNS Hijacking"
+msgstr "强制将所有本地 DNS 查询重定向到 MosDNS,即 DNS 劫持。"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:177
+msgid "Forward Dnsmasq Domain Name resolution requests to MosDNS"
+msgstr "将 Dnsmasq 域名解析请求转发到 MosDNS 服务器"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:116
+msgid "Full"
+msgstr "全量"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:114
+msgid "Full: includes all Countries and Private IP addresses."
+msgstr "全量:包含所有国家和私有 IP 地址。"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:143
+msgid "GeoData Export"
+msgstr "GeoData 导出"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:462
+msgid "GeoIP Tags"
+msgstr "GeoIP 标签"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:111
+msgid "GeoIP Type"
+msgstr "GeoIP 类型"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:457
+msgid "GeoSite Tags"
+msgstr "GeoSite 标签"
+
+#: luci-app-mosdns/root/usr/share/luci/menu.d/luci-app-mosdns.json:30
+msgid "Geodata Update"
+msgstr "更新数据库"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:121
+msgid "GitHub Proxy"
+msgstr "GitHub 代理"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:227
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:244
+msgid "Google Public DNS (8.8.4.4)"
+msgstr "谷歌公共 DNS(8.8.4.4)"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:226
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:243
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:261
+msgid "Google Public DNS (8.8.8.8)"
+msgstr "谷歌公共 DNS(8.8.8.8)"
+
+#: luci-app-mosdns/root/usr/share/rpcd/acl.d/luci-app-mosdns.json:3
+msgid "Grant UCI access for luci-app-mosdns"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:20
+msgid "Grey Lists"
+msgstr "灰名单"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:22
+msgid "Hosts"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:297
+msgid "IP Address"
+msgstr "IP 地址"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:383
+msgid ""
+"IPv4 CIDR: https://www.cloudflare.com/ips-v4
IPv6 CIDR: https://www.cloudflare.com/ips-"
+"v6"
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:187
+msgid ""
+"IPv4 is preferred for China DNS resolution of dual-stack addresses, and is "
+"not affected when the destination is IPv6 only"
+msgstr "国内 DNS 解析双栈地址时首选 IPv4,目标仅 IPv6 时不受影响"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:192
+msgid ""
+"IPv4 is preferred for Remote / Streaming Media DNS resolution of dual-stack "
+"addresses, and is not affected when the destination is IPv6 only"
+msgstr "远程 / 流媒体 DNS 解析双栈地址时首选 IPv4,目标仅 IPv6 时不受影响"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:273
+msgid "Idle Timeout"
+msgstr "空闲超时"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:166
+msgid "Info"
+msgstr "信息"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:319
+msgid "Lazy Cache TTL"
+msgstr "乐观缓存 TTL"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:320
+msgid ""
+"Lazy cache survival time (in second). To disable Lazy Cache, please set to 0."
+msgstr "乐观缓存生存时间(单位:秒),要禁用乐观缓存,请设置为 0"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:160
+msgid "Listen Address"
+msgstr "监听地址"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:155
+msgid "Listen Port"
+msgstr "监听端口"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:117
+msgid "Little"
+msgstr "轻量"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:112
+msgid "Little: only include Mainland China and Private IP addresses."
+msgstr "轻量:仅包含中国大陆和私有 IP 地址。"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/logs.js:70
+msgid "Log Data"
+msgstr "日志数据"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:172
+msgid "Log File"
+msgstr "日志文件"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:164
+msgid "Log Level"
+msgstr "日志等级"
+
+#: luci-app-mosdns/root/usr/share/luci/menu.d/luci-app-mosdns.json:38
+msgid "Logs"
+msgstr "日志"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:371
+#, fuzzy
+msgid ""
+"Match the parsing result with the Cloudflare IP ranges, and when there is a "
+"successful match, use the 'Custom IP' as the parsing result (experimental "
+"feature)"
+msgstr ""
+"将解析结果与 Cloudflare IP 范围进行匹配,当匹配成功时,使用 “自选 IP” 作为解"
+"析结果(实验性功能)"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:343
+msgid "Maximum TTL"
+msgstr "覆盖最大 TTL 值(默认 0)"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:337
+msgid "Minimum TTL"
+msgstr "覆盖最小 TTL 值(默认 0)"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:344
+msgid ""
+"Modify the Maximum TTL value (seconds) for DNS answer results, 0 indicating "
+"no modification"
+msgstr "修改 DNS 应答结果的最大 TTL 值(秒),0 表示不修改"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:338
+msgid ""
+"Modify the Minimum TTL value (seconds) for DNS answer results, 0 indicating "
+"no modification"
+msgstr "修改 DNS 应答结果的最小 TTL 值 (秒),0 表示不修改"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:31
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:33
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:110
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/logs.js:70
+#: luci-app-mosdns/root/usr/share/luci/menu.d/luci-app-mosdns.json:3
+msgid "MosDNS"
+msgstr "MosDNS"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:111
+msgid "MosDNS is a plugin-based DNS forwarder/traffic splitter."
+msgstr "MosDNS 是一个插件化的 DNS 转发/分流器。"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:33
+msgid "NOT RUNNING"
+msgstr "未运行"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:236
+msgid "Netflix, Disney+, Hulu and streaming media rules list will use this DNS"
+msgstr "自定义 Netflix、Disney+、Hulu 以及 “流媒体” 规则列表的 DNS 服务器"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/logs.js:27
+msgid "No log data."
+msgstr "无日志数据。"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:298
+msgid ""
+"Please provide the IP address you use when accessing foreign websites. This "
+"IP subnet (0/24) will be used as the ECS address for Remote / Streaming "
+"Media DNS requests"
+msgstr ""
+"请提供您在访问国外网站时使用的 IP 地址,这个 IP 子网(0/24)将用作 远程 / 流"
+"媒体 DNS 请求的 ECS 地址"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:36
+msgid "Please wait, this may take a few moments..."
+msgstr "请稍候,这可能需要一点时间..."
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:303
+msgid "Prevent DNS Leaks"
+msgstr "防止 DNS 泄漏"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:229
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:246
+msgid "Quad9 Public DNS (149.112.112.112)"
+msgstr "Quad9 公共 DNS(149.112.112.112)"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:228
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:245
+msgid "Quad9 Public DNS (9.9.9.9)"
+msgstr "Quad9 公共 DNS(9.9.9.9)"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:31
+msgid "RUNNING"
+msgstr "运行中"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:23
+msgid "Redirect"
+msgstr "重定向"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:181
msgid ""
"Redirecting requests for domain names. Request domain A, but return records "
"for domain B, for example: baidu.com qq.com (one rule per line)."
@@ -654,13 +643,148 @@ msgstr ""
"重定向请求的域名。请求域名 A,但返回域名 B 的记录,如:baidu.com qq.com(每个"
"规则一行)"
-#: htdocs/luci-static/resources/view/mosdns/rules.js:217
-msgid ""
-"Added domain names will block PTR requests (one domain per line, supports "
-"domain matching rules)."
-msgstr "加入的域名将阻止 PTR 请求(每个域名一行,支持域名匹配规则)"
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/logs.js:75
+msgid "Refresh every %s seconds."
+msgstr "每 %s 秒刷新。"
-#: htdocs/luci-static/resources/view/mosdns/rules.js:247
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:191
+msgid "Remote DNS prefer IPv4"
+msgstr "远程 DNS 首选 IPv4"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:223
+msgid "Remote DNS server"
+msgstr "远程 DNS 服务器"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:11
+msgid "Rule Settings"
+msgstr "自定义规则列表"
+
+#: luci-app-mosdns/root/usr/share/luci/menu.d/luci-app-mosdns.json:22
+msgid "Rules"
+msgstr "规则列表"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:326
+msgid "Save the cache locally and reload the cache dump on the next startup"
+msgstr "保存缓存到本地文件,以供下次启动时重新载入使用"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:26
+msgid "Starting update..."
+msgstr ""
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:25
+msgid "Streaming Media"
+msgstr "流媒体"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:240
+msgid "Streaming Media DNS server"
+msgstr "流媒体 DNS 服务器"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:361
+msgid "Support for local files, such as: file:///var/mosdns/example.txt"
+msgstr "支持本地文件,例如:file:///var/mosdns/example.txt"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:279
+msgid "TCP/DoT Connection Multiplexing"
+msgstr "TCP/DoT 连接复用"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:207
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:255
+msgid "Tencent Public DNS (119.28.28.28)"
+msgstr "腾讯公共 DNS(119.28.28.28)"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:206
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:254
+msgid "Tencent Public DNS (119.29.29.29)"
+msgstr "腾讯公共 DNS(119.29.29.29)"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:215
+msgid "Tencent Public DNS (DNS over HTTPS)"
+msgstr "腾讯公共 DNS(DNS over HTTPS)"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:12
+msgid "The list of rules only apply to 'Default Config' profiles."
+msgstr "规则列表仅适用于 “内置预设” 配置文件。"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:299
+msgid ""
+"This feature is typically used when using a self-built DNS server as an "
+"Remote / Streaming Media DNS upstream (requires support from the upstream "
+"server)"
+msgstr ""
+"此功能通常在使用自建 DNS 服务器作为 远程 / 流媒体 DNS 上游时使用(需要上游服"
+"务器的支持)"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:431
+msgid ""
+"This is the content of the file '/etc/mosdns/config_custom.yaml' from which "
+"your MosDNS configuration will be generated. Only accepts configuration "
+"content in yaml format."
+msgstr ""
+"这是文件 “/etc/mosdns/config_custom.yaml” 的内容,您的 MosDNS 配置将从此文件"
+"生成。仅接受 yaml 格式的配置内容。"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:210
+msgid "TrafficRoute Public DNS (180.184.1.1)"
+msgstr "火山引擎公共 DNS(180.184.1.1)"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:211
+msgid "TrafficRoute Public DNS (180.184.2.2)"
+msgstr "火山引擎公共 DNS(180.184.2.2)"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:452
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:47
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:53
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:77
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:83
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:107
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:113
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:137
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:143
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:167
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:173
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:197
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:203
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:227
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:233
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:257
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:263
+msgid "Unable to save contents: %s"
+msgstr "无法保存内容:%s"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:94
+msgid "Update Cycle"
+msgstr "更新周期"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:85
+msgid "Update GeoIP & GeoSite databases"
+msgstr "更新广告规则、GeoIP & GeoSite 数据库"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:105
+msgid "Update Time"
+msgstr "更新时间"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:122
+msgid ""
+"Update data files with GitHub Proxy, leave blank to disable proxy downloads."
+msgstr "通过 GitHub 代理更新数据文件,留空则禁用代理下载。"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:78
+msgid "Update failed: %s"
+msgstr "更新失败: %s"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:49
+msgid "Update success"
+msgstr "更新成功"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:35
+msgid "Updating Database..."
+msgstr "更新数据库..."
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:167
+msgid "Warning"
+msgstr "警告"
+
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:241
msgid ""
"When enabling 'Custom Stream Media DNS', added domains will always use the "
"'Streaming Media DNS server' for resolution (one domain per line, supports "
@@ -669,144 +793,28 @@ msgstr ""
"启用 “自定义流媒体 DNS” 时,加入的域名始终使用 “流媒体 DNS 服务器” 进行解析"
"(每个域名一行,支持域名匹配规则)"
-#: htdocs/luci-static/resources/view/mosdns/rules.js:284
-#: htdocs/luci-static/resources/view/mosdns/rules.js:288
-#, javascript-format
-msgid "Failed to restart mosdns: %s"
-msgstr "无法重启 MosDNS:%s"
-
-#: htdocs/luci-static/resources/view/mosdns/update.js:9
-msgid "Updating..."
-msgstr "更新中..."
-
-#: htdocs/luci-static/resources/view/mosdns/update.js:10
-msgid "Please wait, this may take a few moments..."
-msgstr "请稍候,这可能需要一点时间..."
-
-#: htdocs/luci-static/resources/view/mosdns/update.js:16
-msgid "Update success"
-msgstr "更新成功"
-
-#: htdocs/luci-static/resources/view/mosdns/update.js:19
-msgid "Update failed, Please check the network status"
-msgstr "更新失败,请检查网络状态"
-
-#: htdocs/luci-static/resources/view/mosdns/update.js:23
-#, fuzzy, javascript-format
-msgid "Update failed: %s"
-msgstr "更新失败: %s"
-
-#: htdocs/luci-static/resources/view/mosdns/update.js:30
-msgid "Update GeoIP & GeoSite databases"
-msgstr "更新广告规则、GeoIP & GeoSite 数据库"
-
-#: htdocs/luci-static/resources/view/mosdns/update.js:31
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:359
msgid ""
-"Automatically update GeoIP and GeoSite databases as well as ad filtering "
-"rules through scheduled tasks."
-msgstr "通过定时任务自动更新 GeoIP 和 GeoSite 数据库以及广告过滤规则。"
+"When using custom rule sources, please use rule types supported by MosDNS "
+"(domain list or AdGuardHome rules)."
+msgstr ""
+"使用自定义规则来源时,请使用 MosDNS 支持的规则类型(域名列表或 AdGuardHome 规"
+"则)"
-#: htdocs/luci-static/resources/view/mosdns/update.js:36
-msgid "Enable Auto Database Update"
-msgstr "启用自动更新"
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:18
+msgid "White Lists"
+msgstr "白名单"
-#: htdocs/luci-static/resources/view/mosdns/update.js:39
-msgid "Update Cycle"
-msgstr "更新周期"
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:212
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:258
+msgid "Xinfeng Public DNS (114.114.114.114)"
+msgstr "信风公共 DNS(114.114.114.114)"
-#: htdocs/luci-static/resources/view/mosdns/update.js:40
-msgid "Every Day"
-msgstr "每天"
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:213
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:259
+msgid "Xinfeng Public DNS (114.114.115.115)"
+msgstr "信风公共 DNS(114.114.115.115)"
-#: htdocs/luci-static/resources/view/mosdns/update.js:41
-msgid "Every Monday"
-msgstr "每周一"
-
-#: htdocs/luci-static/resources/view/mosdns/update.js:42
-msgid "Every Tuesday"
-msgstr "每周二"
-
-#: htdocs/luci-static/resources/view/mosdns/update.js:43
-msgid "Every Wednesday"
-msgstr "每周三"
-
-#: htdocs/luci-static/resources/view/mosdns/update.js:44
-msgid "Every Thursday"
-msgstr "每周四"
-
-#: htdocs/luci-static/resources/view/mosdns/update.js:45
-msgid "Every Friday"
-msgstr "每周五"
-
-#: htdocs/luci-static/resources/view/mosdns/update.js:46
-msgid "Every Saturday"
-msgstr "每周六"
-
-#: htdocs/luci-static/resources/view/mosdns/update.js:47
-msgid "Every Sunday"
-msgstr "每周日"
-
-#: htdocs/luci-static/resources/view/mosdns/update.js:50
-msgid "Update Time"
-msgstr "更新时间"
-
-#: htdocs/luci-static/resources/view/mosdns/update.js:56
-msgid "GeoIP Type"
-msgstr "GeoIP 类型"
-
-#: htdocs/luci-static/resources/view/mosdns/update.js:57
-msgid "Little: only include Mainland China and Private IP addresses."
-msgstr "轻量:仅包含中国大陆和私有 IP 地址。"
-
-#: htdocs/luci-static/resources/view/mosdns/update.js:59
-msgid "Full: includes all Countries and Private IP addresses."
-msgstr "全量:包含所有国家和私有 IP 地址。"
-
-#: htdocs/luci-static/resources/view/mosdns/update.js:61
-msgid "Full"
-msgstr "全量"
-
-#: htdocs/luci-static/resources/view/mosdns/update.js:62
-msgid "Little"
-msgstr "轻量"
-
-#: htdocs/luci-static/resources/view/mosdns/update.js:66
-msgid "GitHub Proxy"
-msgstr "GitHub 代理"
-
-#: htdocs/luci-static/resources/view/mosdns/update.js:67
-msgid ""
-"Update data files with GitHub Proxy, leave blank to disable proxy downloads."
-msgstr "通过 GitHub 代理更新数据文件,留空则禁用代理下载。"
-
-#: htdocs/luci-static/resources/view/mosdns/update.js:68
+#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:123
msgid "https://gh-proxy.com"
msgstr ""
-
-#: htdocs/luci-static/resources/view/mosdns/update.js:73
-msgid "Check And Update GeoData."
-msgstr "检查并更新 GeoData 数据库。"
-
-#: htdocs/luci-static/resources/view/mosdns/update.js:74
-msgid "Database Update"
-msgstr "数据库更新"
-
-#: htdocs/luci-static/resources/view/mosdns/update.js:75
-msgid "Check And Update"
-msgstr "检查并更新"
-
-#: root/usr/share/luci/menu.d/luci-app-mosdns.json:14
-msgid "Basic Setting"
-msgstr "基本设置"
-
-#: root/usr/share/luci/menu.d/luci-app-mosdns.json:22
-msgid "Rules"
-msgstr "规则列表"
-
-#: root/usr/share/luci/menu.d/luci-app-mosdns.json:30
-msgid "Geodata Update"
-msgstr "更新数据库"
-
-#: root/usr/share/luci/menu.d/luci-app-mosdns.json:38
-msgid "Logs"
-msgstr "日志"
diff --git a/luci-app-mosdns/root/etc/config/mosdns b/luci-app-mosdns/root/etc/config/mosdns
index a00820b21..f448e6b84 100644
--- a/luci-app-mosdns/root/etc/config/mosdns
+++ b/luci-app-mosdns/root/etc/config/mosdns
@@ -6,6 +6,7 @@ config mosdns 'config'
option geo_auto_update '0'
option geo_update_week_time '*'
option geo_update_day_time '2'
+ option geoip_type 'geoip-only-cn-private'
option configfile '/var/etc/mosdns.json'
option log_level 'info'
option log_file '/var/log/mosdns.log'
diff --git a/luci-app-mosdns/root/etc/init.d/mosdns b/luci-app-mosdns/root/etc/init.d/mosdns
index 59d8073dd..07675bfd8 100755
--- a/luci-app-mosdns/root/etc/init.d/mosdns
+++ b/luci-app-mosdns/root/etc/init.d/mosdns
@@ -126,7 +126,7 @@ generate_config() {
# plugin: blocklist
json_add_object
json_add_string "tag" "blocklist"
- json_add_string "type" "domain_set"
+ json_add_string "type" "adblock_set"
json_add_object "args"
json_add_array "files"
json_add_string "" "/etc/mosdns/rule/blocklist.txt"
@@ -176,7 +176,7 @@ generate_config() {
# plugin: adlist
json_add_object
json_add_string "tag" "adlist"
- json_add_string "type" "domain_set"
+ json_add_string "type" "adblock_set"
json_add_object "args"
json_add_array "files"
adlist=$($MOSDNS_SCRIPT get_adlist)
diff --git a/luci-app-mosdns/root/usr/share/mosdns/mosdns.uc b/luci-app-mosdns/root/usr/share/mosdns/mosdns.uc
index cf0a537a4..487a369c8 100755
--- a/luci-app-mosdns/root/usr/share/mosdns/mosdns.uc
+++ b/luci-app-mosdns/root/usr/share/mosdns/mosdns.uc
@@ -2,7 +2,7 @@
'use strict';
-import { popen, mkdir, unlink, writefile, open, stat} from 'fs';
+import { popen, mkdir, unlink, writefile, open, stat, stdout } from 'fs';
import { cursor } from 'uci';
import { connect } from 'ubus';
@@ -148,6 +148,7 @@ function update_adlist() {
}
print(`Downloading ${mirror}${url}\n`);
+ stdout.flush();
let curl_res = exec_sys(`curl --connect-timeout 5 -m 90 --ipv4 -kfSLo "${ad_tmpdir}/${filename}" "${mirror}${url}"`);
if (curl_res.code !== 0) download_failed = true;
}
@@ -191,6 +192,7 @@ function update_geodat() {
let geoip_url = mirror + "https://github.com/Loyalsoldier/geoip/releases/latest/download/" + geoip_type + ".dat";
print(`Downloading ${geoip_url}.sha256sum\n`);
+ stdout.flush();
if (exec_sys(`curl --connect-timeout 5 -m 20 --ipv4 -kfSLo "${tmpdir}/geoip.dat.sha256sum" "${geoip_url}.sha256sum"`).code !== 0) {
exec_sys(`rm -rf "${tmpdir}"`); exit(1);
}
@@ -203,8 +205,10 @@ function update_geodat() {
if (geoip_sum_local === geoip_sum_remote) {
print("geoip.dat is up to date.\n");
+ stdout.flush();
} else {
print(`Downloading ${geoip_url}\n`);
+ stdout.flush();
if (exec_sys(`curl --connect-timeout 5 -m 120 --ipv4 -kfSLo "${tmpdir}/geoip.dat" "${geoip_url}"`).code !== 0) {
exec_sys(`rm -rf "${tmpdir}"`); exit(1);
}
@@ -221,6 +225,7 @@ function update_geodat() {
let geosite_url = mirror + "https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geosite.dat";
print(`Downloading ${geosite_url}.sha256sum\n`);
+ stdout.flush();
if (exec_sys(`curl --connect-timeout 5 -m 20 --ipv4 -kfSLo "${tmpdir}/geosite.dat.sha256sum" "${geosite_url}.sha256sum"`).code !== 0) {
exec_sys(`rm -rf "${tmpdir}"`); exit(1);
}
@@ -233,8 +238,10 @@ function update_geodat() {
if (geosite_sum_local === geosite_sum_remote) {
print("geosite.dat is up to date.\n");
+ stdout.flush();
} else {
print(`Downloading ${geosite_url}\n`);
+ stdout.flush();
if (exec_sys(`curl --connect-timeout 5 -m 120 --ipv4 -kfSLo "${tmpdir}/geosite.dat" "${geosite_url}"`).code !== 0) {
exec_sys(`rm -rf "${tmpdir}"`); exit(1);
}
@@ -313,9 +320,23 @@ switch (action) {
get_adlist();
break;
case "update":
- update_geodat();
- update_adlist();
- v2dat_dump();
+ if (stat('/var/lock/mosdns_update.lock')) {
+ print("Another update is already in progress.\n");
+ exit(1);
+ }
+ writefile('/var/lock/mosdns_update.lock', '');
+ try {
+ update_geodat();
+ update_adlist();
+ v2dat_dump();
+ print("UPDATE_FINISHED\n");
+ stdout.flush();
+ } catch (e) {
+ print("Update failed: " + e + "\n");
+ print("UPDATE_FINISHED\n");
+ stdout.flush();
+ }
+ unlink('/var/lock/mosdns_update.lock');
break;
case "update_adlist":
update_adlist();
diff --git a/luci-app-mosdns/root/usr/share/rpcd/acl.d/luci-app-mosdns.json b/luci-app-mosdns/root/usr/share/rpcd/acl.d/luci-app-mosdns.json
index 438fefcc3..9c7d23ad8 100644
--- a/luci-app-mosdns/root/usr/share/rpcd/acl.d/luci-app-mosdns.json
+++ b/luci-app-mosdns/root/usr/share/rpcd/acl.d/luci-app-mosdns.json
@@ -18,7 +18,9 @@
"clean_log",
"flush_cache",
"get_version",
- "print_log"
+ "print_log",
+ "get_update_log",
+ "start_update"
]
},
"uci": [ "mosdns" ]
diff --git a/luci-app-mosdns/root/usr/share/rpcd/ucode/luci.mosdns b/luci-app-mosdns/root/usr/share/rpcd/ucode/luci.mosdns
index 25247d21b..9804ad583 100644
--- a/luci-app-mosdns/root/usr/share/rpcd/ucode/luci.mosdns
+++ b/luci-app-mosdns/root/usr/share/rpcd/ucode/luci.mosdns
@@ -119,6 +119,35 @@ const methods = {
return { error: res.stdout };
}
}
+ },
+
+ start_update: {
+ call: function() {
+ try {
+ if (stat('/var/lock/mosdns_update.lock')) {
+ return { success: false, error: 'Another update is already in progress.' };
+ }
+ exec_sys('echo "" > /var/log/mosdns_update.log');
+ exec_sys('{ /usr/share/mosdns/mosdns.uc update; rm -f /var/lock/mosdns_update.lock; echo "UPDATE_FINISHED"; } > /var/log/mosdns_update.log 2>&1 &');
+ return { success: true };
+ } catch (e) {
+ return { success: false, error: String(e) };
+ }
+ }
+ },
+
+ get_update_log: {
+ call: function() {
+ try {
+ if (stat('/var/log/mosdns_update.log')) {
+ return { log: readfile('/var/log/mosdns_update.log') };
+ } else {
+ return { log: '' };
+ }
+ } catch (e) {
+ return { error: String(e) };
+ }
+ }
}
};
diff --git a/luci-app-passwall/Makefile b/luci-app-passwall/Makefile
index 71596a3f2..b19f5340c 100644
--- a/luci-app-passwall/Makefile
+++ b/luci-app-passwall/Makefile
@@ -8,7 +8,7 @@ include $(TOPDIR)/rules.mk
PKG_NAME:=luci-app-passwall
PKG_VERSION:=26.4.15
-PKG_RELEASE:=105
+PKG_RELEASE:=106
PKG_PO_VERSION:=$(PKG_VERSION)
PKG_CONFIG_DEPENDS:= \
diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/client/acl_config.lua b/luci-app-passwall/luasrc/model/cbi/passwall/client/acl_config.lua
index 456321405..3227e3f19 100644
--- a/luci-app-passwall/luasrc/model/cbi/passwall/client/acl_config.lua
+++ b/luci-app-passwall/luasrc/model/cbi/passwall/client/acl_config.lua
@@ -610,7 +610,7 @@ o.validate = function(self, value, t)
local _dns_mode = s.fields["dns_mode"]:formvalue(t)
local _tcp_node = s.fields["tcp_node"]:formvalue(t)
if _dns_mode and _tcp_node then
- if (m:get(_tcp_node, "type") or ""):lower() ~= _dns_mode then
+ if (m:get(_tcp_node, "type") or ""):lower() ~= _dns_mode and not _tcp_node:find("Socks_") then
return nil, translatef("TCP node must be '%s' type to use FakeDNS.", _dns_mode)
end
end
diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/client/global.lua b/luci-app-passwall/luasrc/model/cbi/passwall/client/global.lua
index bb4e95a63..dfa7994a9 100644
--- a/luci-app-passwall/luasrc/model/cbi/passwall/client/global.lua
+++ b/luci-app-passwall/luasrc/model/cbi/passwall/client/global.lua
@@ -486,7 +486,7 @@ o.validate = function(self, value, t)
end
local _tcp_node = s.fields["tcp_node"]:formvalue(t)
if _dns_mode and _tcp_node then
- if (m:get(_tcp_node, "type") or ""):lower() ~= _dns_mode then
+ if (m:get(_tcp_node, "type") or ""):lower() ~= _dns_mode and not _tcp_node:find("Socks_") then
return nil, translatef("TCP node must be '%s' type to use FakeDNS.", _dns_mode)
end
end
diff --git a/luci-app-passwall/luasrc/passwall/util_sing-box.lua b/luci-app-passwall/luasrc/passwall/util_sing-box.lua
index 374e5628e..f3abedbd2 100644
--- a/luci-app-passwall/luasrc/passwall/util_sing-box.lua
+++ b/luci-app-passwall/luasrc/passwall/util_sing-box.lua
@@ -1706,8 +1706,7 @@ function gen_config(var)
end
end)
else
- local _node = node or node_id
- COMMON.default_outbound_tag = gen_outbound_get_tag(flag, _node, nil, {
+ COMMON.default_outbound_tag = gen_outbound_get_tag(flag, node or node_id, nil, {
fragment = singbox_settings.fragment == "1" or nil,
record_fragment = singbox_settings.record_fragment == "1" or nil,
run_socks_instance = not no_run
diff --git a/luci-app-passwall/luasrc/passwall/util_xray.lua b/luci-app-passwall/luasrc/passwall/util_xray.lua
index 00b05d070..753a4ce77 100644
--- a/luci-app-passwall/luasrc/passwall/util_xray.lua
+++ b/luci-app-passwall/luasrc/passwall/util_xray.lua
@@ -1424,8 +1424,7 @@ function gen_config(var)
rules = rules
}
else
- local _node = node or node_id
- COMMON.default_outbound_tag = gen_outbound_get_tag(flag, _node, nil, {
+ COMMON.default_outbound_tag = gen_outbound_get_tag(flag, node or node_id, nil, {
fragment = xray_settings.fragment == "1" or nil,
noise = xray_settings.noise == "1" or nil,
run_socks_instance = not no_run
diff --git a/luci-app-passwall/root/usr/share/passwall/app.sh b/luci-app-passwall/root/usr/share/passwall/app.sh
index cb9e4aa6b..34f3c200c 100755
--- a/luci-app-passwall/root/usr/share/passwall/app.sh
+++ b/luci-app-passwall/root/usr/share/passwall/app.sh
@@ -1660,8 +1660,17 @@ acl_app() {
set_cache_var "ACL_${sid}_dns_port" "${GLOBAL_DNSMASQ_PORT}"
set_cache_var "ACL_${sid}_tcp_default" "1"
else
- local type=$(echo $(config_n_get $tcp_node type) | tr 'A-Z' 'a-z')
- local protocol=$(config_n_get $tcp_node protocol)
+ local type protocol
+ if [ "$(config_get_type ${tcp_node#Socks_})" = "socks" ]; then
+ if [ "${dns_mode}" = "xray" ]; then
+ type="xray"
+ elif [ "${dns_mode}" = "sing-box" ]; then
+ type="sing-box"
+ fi
+ else
+ type=$(echo $(config_n_get $tcp_node type) | tr 'A-Z' 'a-z')
+ protocol=$(config_n_get $tcp_node protocol)
+ fi
#兼容旧模式,择机移除
[ "$v2ray_dns_mode" = "tcp+doh" ] && v2ray_dns_mode="tcp"
([ "$type" = "sing-box" ] || [ "$type" = "xray" ]) && [ "$protocol" = "_shunt" ] && [ "$type" != "$dns_mode" ] && {
@@ -1743,7 +1752,7 @@ acl_app() {
lua $APP_PATH/helper_dnsmasq.lua add_rule -FLAG ${sid} -TMP_DNSMASQ_PATH ${dnsmasq_conf_path} -DNSMASQ_CONF_FILE ${dnsmasq_conf} \
-LISTEN_PORT ${dnsmasq_port} -DEFAULT_DNS ${DEFAULT_DNS} -LOCAL_DNS $LOCAL_DNS \
-USE_DIRECT_LIST "${use_direct_list}" -USE_PROXY_LIST "${use_proxy_list}" -USE_BLOCK_LIST "${use_block_list}" -USE_GFW_LIST "${use_gfw_list}" -CHN_LIST "${chn_list}" \
- -TUN_DNS "127.0.0.1#${_dns_port}" -REMOTE_FAKEDNS 0 -USE_DEFAULT_DNS "${use_default_dns:-direct}" -CHINADNS_DNS ${_china_ng_listen:-0} \
+ -TUN_DNS "127.0.0.1#${_dns_port}" -REMOTE_FAKEDNS ${remote_fakedns:-0} -USE_DEFAULT_DNS "${use_default_dns:-direct}" -CHINADNS_DNS ${_china_ng_listen:-0} \
-TCP_NODE $tcp_node -DEFAULT_PROXY_MODE ${tcp_proxy_mode} -NO_PROXY_IPV6 ${dnsmasq_filter_proxy_ipv6:-0} -NFTFLAG ${nftflag:-0} \
-NO_LOGIC_LOG 1
ln_run "$(first_type dnsmasq)" "dnsmasq_${sid}" "/dev/null" -C ${dnsmasq_conf} -x ${acl_path}/dnsmasq.pid
@@ -1783,7 +1792,7 @@ acl_app() {
[ "$filter_proxy_ipv6" = "1" ] && remote_dns_query_strategy="UseIPv4"
remote_dns_doh=${remote_dns_doh:-https://1.1.1.1/dns-query}
_extra_param="${_extra_param} dns_listen_port=${_dns_port} remote_dns_protocol=${v2ray_dns_mode} remote_dns_udp_server=${remote_dns} remote_dns_tcp_server=${remote_dns}"
- _extra_param="${_extra_param} remote_dns_doh=${remote_dns_doh} remote_dns_query_strategy=${remote_dns_query_strategy} remote_dns_client_ip=${remote_dns_client_ip}"
+ _extra_param="${_extra_param} remote_dns_doh=${remote_dns_doh} remote_dns_query_strategy=${remote_dns_query_strategy} remote_fakedns=${remote_fakedns:-0} remote_dns_client_ip=${remote_dns_client_ip}"
}
_extra_param="${_extra_param} tcp_proxy_way=$TCP_PROXY_WAY"
[ -n "$udp_node" ] && ([ "$udp_node" = "tcp" ] || [ "$udp_node" = "$tcp_node" ]) && {
@@ -1849,7 +1858,16 @@ acl_app() {
set_cache_var "node_${udp_node}_redir_port" "${redir_port}"
udp_port=$redir_port
- local type=$(echo $(config_n_get $udp_node type) | tr 'A-Z' 'a-z')
+ local type
+ if [ "$(config_get_type ${udp_node#Socks_})" = "socks" ]; then
+ if [ "${dns_mode}" = "xray" ]; then
+ type="xray"
+ elif [ "${dns_mode}" = "sing-box" ]; then
+ type="sing-box"
+ fi
+ else
+ type=$(echo $(config_n_get $udp_node type) | tr 'A-Z' 'a-z')
+ fi
if [ -n "${type}" ] && ([ "${type}" = "sing-box" ] || [ "${type}" = "xray" ]); then
config_file="acl/${udp_node}_UDP_${redir_port}.json"
config_file="$TMP_PATH/$config_file"
diff --git a/luci-app-passwall2/Makefile b/luci-app-passwall2/Makefile
index 37d4eec27..ec5d2a93b 100644
--- a/luci-app-passwall2/Makefile
+++ b/luci-app-passwall2/Makefile
@@ -6,8 +6,8 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=luci-app-passwall2
-PKG_VERSION:=26.4.20
-PKG_RELEASE:=40
+PKG_VERSION:=26.5.1
+PKG_RELEASE:=41
PKG_PO_VERSION:=$(PKG_VERSION)
PKG_CONFIG_DEPENDS:= \
diff --git a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/shunt_rules.lua b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/shunt_rules.lua
index e93018136..e154fa84c 100644
--- a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/shunt_rules.lua
+++ b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/shunt_rules.lua
@@ -61,6 +61,7 @@ end
protocol = s:option(MultiValue, "protocol", translate("Protocol"))
protocol:value("http")
protocol:value("tls")
+protocol:value("quic")
protocol:value("bittorrent")
protocol.widget = "checkbox"
protocol.default = nil
diff --git a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/hysteria2.lua b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/hysteria2.lua
index f50db48a8..9d05dbbb6 100644
--- a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/hysteria2.lua
+++ b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/hysteria2.lua
@@ -51,7 +51,6 @@ o = s:option(Flag, _n("tls_allowInsecure"), translate("allowInsecure"), translat
o.default = "0"
o = s:option(Value, _n("tls_pinSHA256"), translate("PinSHA256"),translate("Certificate fingerprint"))
-o.rewrite_option = o.option
o = s:option(Value, _n("up_mbps"), translate("Max upload Mbps"))
o.rewrite_option = o.option
diff --git a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/ray.lua b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/ray.lua
index 27b9f40a3..cb0d9ae1f 100644
--- a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/ray.lua
+++ b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/ray.lua
@@ -374,7 +374,7 @@ if api.compare_versions(os.date("%Y.%m.%d"), "<", "2026.6.1") then
end
if api.compare_versions(xray_version, ">=", "26.1.31") then
- o = s:option(Value, _n("tls_CertSha"), translate("TLS Chain Fingerprint (SHA256)"), translate("Once set, connects only when the server’s chain fingerprint matches."))
+ o = s:option(Value, _n("tls_pinSHA256"), translate("TLS Chain Fingerprint (SHA256)"))
o:depends({ [_n("tls")] = true, [_n("reality")] = false })
o:depends({ [_n("protocol")] = "hysteria2" })
@@ -506,6 +506,11 @@ o:depends({ [_n("transport")] = "mkcp" })
o = s:option(Value, _n("mkcp_domain"), translate("Camouflage Domain"), translate("Use it together with the DNS disguised type. You can fill in any domain."))
o:depends({ [_n("mkcp_guise")] = "dns" })
+o = s:option(Value, _n("mkcp_mtu"), translate("KCP MTU"))
+o.datatype = "uinteger"
+o.default = 1350
+o:depends({ [_n("transport")] = "mkcp" })
+
o = s:option(Value, _n("mkcp_seed"), translate("KCP Seed"))
o:depends({ [_n("transport")] = "mkcp" })
diff --git a/luci-app-passwall2/luasrc/model/cbi/passwall2/server/type/ray.lua b/luci-app-passwall2/luasrc/model/cbi/passwall2/server/type/ray.lua
index cb2aba71c..a20b03bb7 100644
--- a/luci-app-passwall2/luasrc/model/cbi/passwall2/server/type/ray.lua
+++ b/luci-app-passwall2/luasrc/model/cbi/passwall2/server/type/ray.lua
@@ -356,6 +356,11 @@ o:depends({ [_n("transport")] = "mkcp" })
o = s:option(Value, _n("mkcp_domain"), translate("Camouflage Domain"), translate("Use it together with the DNS disguised type. You can fill in any domain."))
o:depends({ [_n("mkcp_guise")] = "dns" })
+o = s:option(Value, _n("mkcp_mtu"), translate("KCP MTU"))
+o.datatype = "uinteger"
+o.default = 1350
+o:depends({ [_n("transport")] = "mkcp" })
+
o = s:option(Value, _n("mkcp_seed"), translate("KCP Seed"))
o:depends({ [_n("transport")] = "mkcp" })
diff --git a/luci-app-passwall2/luasrc/passwall2/api.lua b/luci-app-passwall2/luasrc/passwall2/api.lua
index 3a3e43ef9..5bcfcfbef 100644
--- a/luci-app-passwall2/luasrc/passwall2/api.lua
+++ b/luci-app-passwall2/luasrc/passwall2/api.lua
@@ -122,21 +122,17 @@ function get_new_port()
end
function exec_call(cmd)
- local process = io.popen(cmd .. '; echo -e "\n$?"')
- local lines = {}
- local result = ""
- local return_code
- for line in process:lines() do
- lines[#lines + 1] = line
+ math.randomseed(os.time())
+ local tag = "\x01__RC__" .. tostring(math.random(100000, 999999)) .. "\x01"
+ local f = io.popen('(' .. cmd .. '); printf "\\n' .. tag .. '%d" "$?"')
+ local out = f:read("*a") or ""
+ f:close()
+ local rc = out:match(tag .. "(%d+)%s*$")
+ if not rc then
+ return 255, trim(out)
end
- process:close()
- if #lines > 0 then
- return_code = lines[#lines]
- for i = 1, #lines - 1 do
- result = result .. lines[i] .. ((i == #lines - 1) and "" or "\n")
- end
- end
- return tonumber(return_code), trim(result)
+ out = out:gsub("\n?" .. tag .. "%d+%s*$", "")
+ return tonumber(rc), trim(out)
end
function base64Decode(text)
diff --git a/luci-app-passwall2/luasrc/passwall2/util_hysteria2.lua b/luci-app-passwall2/luasrc/passwall2/util_hysteria2.lua
index a06928a4c..6fd0103bb 100644
--- a/luci-app-passwall2/luasrc/passwall2/util_hysteria2.lua
+++ b/luci-app-passwall2/luasrc/passwall2/util_hysteria2.lua
@@ -93,7 +93,7 @@ function gen_config(var)
tls = {
sni = node.tls_serverName,
insecure = (node.tls_allowInsecure == "1") and true or false,
- pinSHA256 = (node.hysteria2_tls_pinSHA256) and node.hysteria2_tls_pinSHA256 or nil,
+ pinSHA256 = (node.tls_pinSHA256) and node.tls_pinSHA256 or nil,
},
quic = {
initStreamReceiveWindow = (node.hysteria2_recv_window) and tonumber(node.hysteria2_recv_window) or nil,
diff --git a/luci-app-passwall2/luasrc/passwall2/util_xray.lua b/luci-app-passwall2/luasrc/passwall2/util_xray.lua
index 5ccfba884..273c668f0 100644
--- a/luci-app-passwall2/luasrc/passwall2/util_xray.lua
+++ b/luci-app-passwall2/luasrc/passwall2/util_xray.lua
@@ -173,14 +173,14 @@ function gen_outbound(flag, node, tag, proxy_table)
tlsSettings = (node.stream_security == "tls") and {
serverName = node.tls_serverName,
allowInsecure = (function()
- if node.tls_CertSha and node.tls_CertSha ~= "" then return nil end
+ if node.tls_pinSHA256 and node.tls_pinSHA256 ~= "" then return nil end
if api.compare_versions(os.date("%Y.%m.%d"), "<", "2026.6.1") and node.tls_allowInsecure == "1" then return true end
end)(),
fingerprint = (node.type == "Xray" and node.utls == "1" and node.fingerprint and node.fingerprint ~= "") and node.fingerprint or nil,
pinnedPeerCertSha256 = (function()
if api.compare_versions(xray_version, "<", "26.1.31") then return nil end
- if not node.tls_CertSha then return "" end
- return node.tls_CertSha
+ if not node.tls_pinSHA256 then return "" end
+ return node.tls_pinSHA256
end)(),
verifyPeerCertByName = (function()
if api.compare_versions(xray_version, "<", "26.1.31") then return nil end
@@ -217,7 +217,7 @@ function gen_outbound(flag, node, tag, proxy_table)
}
} or nil,
kcpSettings = (node.transport == "mkcp") and {
- mtu = 1350,
+ mtu = (node.mkcp_mtu and node.mkcp_mtu ~= "") and tonumber(node.mkcp_mtu) or 1350,
tti = 50,
uplinkCapacity = 12,
downlinkCapacity = 100,
@@ -470,7 +470,6 @@ function gen_outbound(flag, node, tag, proxy_table)
finalQuery = true,
disableCache = false,
serveStale = true,
- serveExpiredTTL = 30,
}
end
@@ -674,7 +673,7 @@ function gen_config_server(node)
}
} or nil,
kcpSettings = (node.transport == "mkcp") and {
- mtu = 1350,
+ mtu = (node.mkcp_mtu and node.mkcp_mtu ~= "") and tonumber(node.mkcp_mtu) or 1350,
tti = 50,
uplinkCapacity = 12,
downlinkCapacity = 100,
@@ -1639,7 +1638,6 @@ function gen_config(var)
finalQuery = true,
disableCache = false,
serveStale = true,
- serveExpiredTTL = 30,
})
end
end
@@ -1738,6 +1736,7 @@ function gen_config(var)
end
end
local dns_block_mode = "host"
+ dns_block_mode = ""
if dns_block_mode == "host" and dns_outboundTag == "blackhole" then
for d_i, d_k in ipairs(value.domain) do
dns.hosts[d_k] = "0.0.0.0"
@@ -2162,7 +2161,6 @@ function gen_front_dns_config(var)
finalQuery = true,
disableCache = false,
serveStale = true,
- serveExpiredTTL = 30,
})
end
end
diff --git a/luci-app-passwall2/luasrc/view/passwall2/global/footer.htm b/luci-app-passwall2/luasrc/view/passwall2/global/footer.htm
index b5c8becf4..590e45a4d 100644
--- a/luci-app-passwall2/luasrc/view/passwall2/global/footer.htm
+++ b/luci-app-passwall2/luasrc/view/passwall2/global/footer.htm
@@ -16,6 +16,22 @@ local appname = api.appname
display: none !important;
visibility: hidden !important;
}
+
+@media screen and (max-width: 1152px) {
+ #cbi-<%=appname%>-socks .cbi-section-table-titles {
+ display: none !important;
+ }
+}
+
+@media screen and (min-width: 1152px) {
+ #cbi-<%=appname%>-socks input[id*=".<%=appname%>."][id$=".port"],
+ #cbi-<%=appname%>-socks input[id*=".<%=appname%>."][id$=".http_port"] {
+ width: 100px !important;
+ min-width: unset !important;
+ max-width: unset !important;
+ text-align: center !important;
+ }
+}
\ No newline at end of file
diff --git a/luci-app-passwall2/luasrc/view/passwall2/haproxy/js.htm b/luci-app-passwall2/luasrc/view/passwall2/haproxy/js.htm
index 8109b4cc8..aca4d853b 100644
--- a/luci-app-passwall2/luasrc/view/passwall2/haproxy/js.htm
+++ b/luci-app-passwall2/luasrc/view/passwall2/haproxy/js.htm
@@ -1,7 +1,8 @@
<%
local api = require "luci.passwall2.api"
+local appname = api.appname
-%>
-
+
\ No newline at end of file
diff --git a/luci-app-passwall2/luasrc/view/passwall2/node_config/link_share_man.htm b/luci-app-passwall2/luasrc/view/passwall2/node_config/link_share_man.htm
index d1941043b..e6631f3be 100644
--- a/luci-app-passwall2/luasrc/view/passwall2/node_config/link_share_man.htm
+++ b/luci-app-passwall2/luasrc/view/passwall2/node_config/link_share_man.htm
@@ -306,7 +306,7 @@ local current_node = map:get(section)
params += opt.query("alpn", dom_prefix + "alpn");
params += opt.query("sni", dom_prefix + "tls_serverName");
params += opt.query("allowinsecure", dom_prefix + "tls_allowInsecure");
- params += opt.query("pcs", dom_prefix + "tls_CertSha");
+ params += opt.query("pcs", dom_prefix + "tls_pinSHA256");
params += opt.query("vcn", dom_prefix + "tls_CertByName");
params += opt.query("ech", dom_prefix + "ech_config");
}
@@ -499,7 +499,7 @@ local current_node = map:get(section)
params += opt.query("alpn", dom_prefix + "alpn");
params += opt.query("sni", dom_prefix + "tls_serverName");
params += opt.query("allowinsecure", dom_prefix + "tls_allowInsecure");
- params += opt.query("pcs", dom_prefix + "tls_CertSha");
+ params += opt.query("pcs", dom_prefix + "tls_pinSHA256");
params += opt.query("vcn", dom_prefix + "tls_CertByName");
params += opt.query("ech", dom_prefix + "ech_config");
}
@@ -570,7 +570,7 @@ local current_node = map:get(section)
params += opt.query("alpn", dom_prefix + "alpn");
params += opt.query("sni", dom_prefix + "tls_serverName");
params += opt.query("allowinsecure", dom_prefix + "tls_allowInsecure");
- params += opt.query("pcs", dom_prefix + "tls_CertSha");
+ params += opt.query("pcs", dom_prefix + "tls_pinSHA256");
params += opt.query("vcn", dom_prefix + "tls_CertByName");
params += opt.query("ech", dom_prefix + "ech_config");
}
@@ -591,14 +591,14 @@ local current_node = map:get(section)
var params = "";
params += opt.query("sni", dom_prefix + "tls_serverName");
params += opt.query("insecure", dom_prefix + "tls_allowInsecure");
- params += opt.query("pcs", dom_prefix + "tls_CertSha");
+ params += opt.query("pinSHA256", dom_prefix + "tls_pinSHA256");
+ params += opt.query("pcs", dom_prefix + "tls_pinSHA256");
params += opt.query("vcn", dom_prefix + "tls_CertByName");
var v_password = null;
if (v_type === "Hysteria2") {
v_password = opt.get("hysteria2_auth_password");
- params += opt.query("pinSHA256", "hysteria2_tls_pinSHA256");
var dom_obfs = opt.get("hysteria2_obfs");
if (dom_obfs && dom_obfs.value != "") {
params += "&obfs=" + "salamander";
@@ -1069,7 +1069,7 @@ local current_node = map:get(section)
}
opt.set(dom_prefix + 'ech', !!queryParam.ech);
opt.set(dom_prefix + 'ech_config', queryParam.ech || '');
- opt.set(dom_prefix + 'tls_CertSha', queryParam.pcs || '');
+ opt.set(dom_prefix + 'tls_pinSHA256', queryParam.pcs || '');
opt.set(dom_prefix + 'tls_CertByName', queryParam.vcn || '');
}
@@ -1308,7 +1308,7 @@ local current_node = map:get(section)
if (queryParam.security === "tls") {
opt.set(dom_prefix + 'tls_serverName', queryParam.peer || queryParam.sni || "");
opt.set(dom_prefix + 'alpn', queryParam.alpn || 'default');
- opt.set(dom_prefix + 'tls_CertSha', queryParam.pcs || '');
+ opt.set(dom_prefix + 'tls_pinSHA256', queryParam.pcs || '');
opt.set(dom_prefix + 'tls_CertByName', queryParam.vcn || '');
}
opt.set(
@@ -1472,7 +1472,7 @@ local current_node = map:get(section)
}
opt.set(dom_prefix + 'ech', !!queryParam.ech);
opt.set(dom_prefix + 'ech_config', queryParam.ech || '');
- opt.set(dom_prefix + 'tls_CertSha', queryParam.pcs || '');
+ opt.set(dom_prefix + 'tls_pinSHA256', queryParam.pcs || '');
opt.set(dom_prefix + 'tls_CertByName', queryParam.vcn || '');
}
@@ -1613,9 +1613,6 @@ local current_node = map:get(section)
if (queryParam["obfs-password"] || queryParam["obfs_password"]) {
opt.set(dom_prefix + 'obfs', queryParam["obfs-password"] || queryParam["obfs_password"]);
}
- if (queryParam.pinSHA256) {
- opt.set(dom_prefix + 'tls_pinSHA256', queryParam.pinSHA256);
- }
opt.set(dom_prefix + 'hop', queryParam.mport || "");
}
@@ -1627,7 +1624,7 @@ local current_node = map:get(section)
dom_prefix + 'tls_allowInsecure',
!((queryParam.allowinsecure ?? '0') === '0' && (queryParam.allowInsecure ?? '0') === '0' && (queryParam.insecure ?? '0') === '0')
);
- opt.set(dom_prefix + 'tls_CertSha', queryParam.pcs || '');
+ opt.set(dom_prefix + 'tls_pinSHA256', queryParam.pcs || queryParam.pinSHA256 || '');
opt.set(dom_prefix + 'tls_CertByName', queryParam.vcn || '');
if (m.hash) {
opt.set('remarks', decodeURIComponent(m.hash.substr(1)));
diff --git a/luci-app-passwall2/luasrc/view/passwall2/node_subscribe/js.htm b/luci-app-passwall2/luasrc/view/passwall2/node_subscribe/js.htm
index df342368b..a090a2ead 100644
--- a/luci-app-passwall2/luasrc/view/passwall2/node_subscribe/js.htm
+++ b/luci-app-passwall2/luasrc/view/passwall2/node_subscribe/js.htm
@@ -34,6 +34,12 @@ table .cbi-button-down,
background-color: rgba(131, 191, 255, 0.7) !important;
box-shadow: 0 4px 6px rgba(0,0,0,0.1);
}
+
+@media screen and (max-width: 1152px) {
+ #cbi-<%=api.appname%>-subscribe_list .cbi-section-table-titles {
+ display: none !important;
+ }
+}