🍕 Sync 2025-11-10 00:09:51

This commit is contained in:
actions-user
2025-11-10 00:09:51 +08:00
parent 8bc21f4bc5
commit 2f6d17f5dc
25 changed files with 2264 additions and 440 deletions

View File

@@ -10,7 +10,7 @@ LUCI_DEPENDS:=+luci-base +luci-lib-jsonc +curl +bandix
PKG_MAINTAINER:=timsaya PKG_MAINTAINER:=timsaya
PKG_VERSION:=0.6.3 PKG_VERSION:=0.8.0
PKG_RELEASE:=1 PKG_RELEASE:=1
include $(TOPDIR)/feeds/luci/luci.mk include $(TOPDIR)/feeds/luci/luci.mk

File diff suppressed because it is too large Load Diff

View File

@@ -10,12 +10,15 @@ const translations = {
'基本设置': '基本设置', '基本设置': '基本设置',
'流量监控设置': '流量监控设置', '流量监控设置': '流量监控设置',
'连接监控设置': '连接监控设置', '连接监控设置': '连接监控设置',
'DNS监控设置': 'DNS监控设置',
'Bandix 基本配置': 'Bandix 基本配置', 'Bandix 基本配置': 'Bandix 基本配置',
'配置 Bandix 服务的基本参数': '配置 Bandix 服务的基本参数', '配置 Bandix 服务的基本参数': '配置 Bandix 服务的基本参数',
'Bandix 流量监控配置': 'Bandix 流量监控配置', 'Bandix 流量监控配置': 'Bandix 流量监控配置',
'配置流量监控相关参数': '配置流量监控相关参数', '配置流量监控相关参数': '配置流量监控相关参数',
'Bandix 连接监控配置': 'Bandix 连接监控配置', 'Bandix 连接监控配置': 'Bandix 连接监控配置',
'配置连接监控相关参数': '配置连接监控相关参数', '配置连接监控相关参数': '配置连接监控相关参数',
'Bandix DNS监控配置': 'Bandix DNS监控配置',
'配置DNS监控相关参数': '配置DNS监控相关参数',
'启用': '启用', '启用': '启用',
'启用 Bandix 流量监控服务': '启用 Bandix 流量监控服务', '启用 Bandix 流量监控服务': '启用 Bandix 流量监控服务',
'启用流量监控': '启用流量监控', '启用流量监控': '启用流量监控',
@@ -56,6 +59,9 @@ const translations = {
'数据目录': '数据目录', '数据目录': '数据目录',
'Bandix 数据存储目录': 'Bandix 数据存储目录', 'Bandix 数据存储目录': 'Bandix 数据存储目录',
'启用 Bandix 连接监控功能': '启用 Bandix 连接监控功能', '启用 Bandix 连接监控功能': '启用 Bandix 连接监控功能',
'启用 Bandix DNS监控功能': '启用 Bandix DNS监控功能',
'DNS最大记录数': 'DNS最大记录数',
'设置DNS查询记录的最大保存数量': '设置DNS查询记录的最大保存数量超过此数量将删除最旧的记录',
'持久化历史数据': '持久化历史数据', '持久化历史数据': '持久化历史数据',
'启用数据持久化功能': '启用数据持久化功能,只有启用此选项后才会持久化到磁盘' '启用数据持久化功能': '启用数据持久化功能,只有启用此选项后才会持久化到磁盘'
}, },
@@ -63,12 +69,15 @@ const translations = {
'基本设置': '基本設置', '基本设置': '基本設置',
'流量监控设置': '流量監控設置', '流量监控设置': '流量監控設置',
'连接监控设置': '連接監控設置', '连接监控设置': '連接監控設置',
'DNS监控设置': 'DNS監控設置',
'Bandix 基本配置': 'Bandix 基本配置', 'Bandix 基本配置': 'Bandix 基本配置',
'配置 Bandix 服务的基本参数': '配置 Bandix 服務的基本參數', '配置 Bandix 服务的基本参数': '配置 Bandix 服務的基本參數',
'Bandix 流量监控配置': 'Bandix 流量監控配置', 'Bandix 流量监控配置': 'Bandix 流量監控配置',
'配置流量监控相关参数': '配置流量監控相關參數', '配置流量监控相关参数': '配置流量監控相關參數',
'Bandix 连接监控配置': 'Bandix 連接監控配置', 'Bandix 连接监控配置': 'Bandix 連接監控配置',
'配置连接监控相关参数': '配置連接監控相關參數', '配置连接监控相关参数': '配置連接監控相關參數',
'Bandix DNS监控配置': 'Bandix DNS監控配置',
'配置DNS监控相关参数': '配置DNS監控相關參數',
'启用': '啟用', '启用': '啟用',
'启用 Bandix 流量监控服务': '啟用 Bandix 流量監控服務', '启用 Bandix 流量监控服务': '啟用 Bandix 流量監控服務',
'启用流量监控': '啟用流量監控', '启用流量监控': '啟用流量監控',
@@ -109,6 +118,9 @@ const translations = {
'数据目录': '數據目錄', '数据目录': '數據目錄',
'Bandix 数据存储目录': 'Bandix 數據存儲目錄', 'Bandix 数据存储目录': 'Bandix 數據存儲目錄',
'启用 Bandix 连接监控功能': '啟用 Bandix 連接監控功能', '启用 Bandix 连接监控功能': '啟用 Bandix 連接監控功能',
'启用 Bandix DNS监控功能': '啟用 Bandix DNS監控功能',
'DNS最大记录数': 'DNS最大記錄數',
'设置DNS查询记录的最大保存数量': '設定DNS查詢記錄的最大保存數量超過此數量將刪除最舊的記錄',
'持久化历史数据': '持久化歷史數據', '持久化历史数据': '持久化歷史數據',
'启用数据持久化功能': '啟用數據持久化功能,只有啟用此選項後才會持久化到磁碟' '启用数据持久化功能': '啟用數據持久化功能,只有啟用此選項後才會持久化到磁碟'
}, },
@@ -116,16 +128,20 @@ const translations = {
'基本设置': 'Basic Settings', '基本设置': 'Basic Settings',
'流量监控设置': 'Traffic Monitor Settings', '流量监控设置': 'Traffic Monitor Settings',
'连接监控设置': 'Connection Monitor Settings', '连接监控设置': 'Connection Monitor Settings',
'DNS监控设置': 'DNS Monitor Settings',
'Bandix 基本配置': 'Bandix Basic Configuration', 'Bandix 基本配置': 'Bandix Basic Configuration',
'配置 Bandix 服务的基本参数': 'Configure basic parameters for Bandix service', '配置 Bandix 服务的基本参数': 'Configure basic parameters for Bandix service',
'Bandix 流量监控配置': 'Bandix Traffic Monitor Configuration', 'Bandix 流量监控配置': 'Bandix Traffic Monitor Configuration',
'配置流量监控相关参数': 'Configure traffic monitoring related parameters', '配置流量监控相关参数': 'Configure traffic monitoring related parameters',
'Bandix 连接监控配置': 'Bandix Connection Monitor Configuration', 'Bandix 连接监控配置': 'Bandix Connection Monitor Configuration',
'配置连接监控相关参数': 'Configure connection monitoring related parameters', '配置连接监控相关参数': 'Configure connection monitoring related parameters',
'Bandix DNS监控配置': 'Bandix DNS Monitor Configuration',
'配置DNS监控相关参数': 'Configure DNS monitoring related parameters',
'启用': 'Enable', '启用': 'Enable',
'启用 Bandix 流量监控服务': 'Enable Bandix Traffic Monitor Service', '启用 Bandix 流量监控服务': 'Enable Bandix Traffic Monitor Service',
'启用流量监控': 'Enable Traffic Monitoring', '启用流量监控': 'Enable Traffic Monitoring',
'启用连接监控': 'Enable Connection Monitoring', '启用连接监控': 'Enable Connection Monitoring',
'启用DNS监控': 'Enable DNS Monitoring',
'界面语言': 'Interface Language', '界面语言': 'Interface Language',
'选择 Bandix 流量监控的显示语言': 'Select the display language for Bandix Traffic Monitor', '选择 Bandix 流量监控的显示语言': 'Select the display language for Bandix Traffic Monitor',
'简体中文': 'Simplified Chinese', '简体中文': 'Simplified Chinese',
@@ -162,6 +178,9 @@ const translations = {
'数据目录': 'Data Directory', '数据目录': 'Data Directory',
'Bandix 数据存储目录': 'Bandix data storage directory', 'Bandix 数据存储目录': 'Bandix data storage directory',
'启用 Bandix 连接监控功能': 'Enable Bandix connection monitoring', '启用 Bandix 连接监控功能': 'Enable Bandix connection monitoring',
'启用 Bandix DNS监控功能': 'Enable Bandix DNS monitoring',
'DNS最大记录数': 'DNS Max Records',
'设置DNS查询记录的最大保存数量': 'Set the maximum number of DNS query records to keep. Older records will be deleted when this limit is exceeded',
'持久化历史数据': 'Persist History Data', '持久化历史数据': 'Persist History Data',
'启用数据持久化功能': 'Enable data persistence functionality, data will only be persisted to disk when this option is enabled' '启用数据持久化功能': 'Enable data persistence functionality, data will only be persisted to disk when this option is enabled'
}, },
@@ -169,16 +188,20 @@ const translations = {
'基本设置': 'Paramètres de Base', '基本设置': 'Paramètres de Base',
'流量监控设置': 'Paramètres de Surveillance du Trafic', '流量监控设置': 'Paramètres de Surveillance du Trafic',
'连接监控设置': 'Paramètres de Surveillance des Connexions', '连接监控设置': 'Paramètres de Surveillance des Connexions',
'DNS监控设置': 'Paramètres de Surveillance DNS',
'Bandix 基本配置': 'Configuration de Base Bandix', 'Bandix 基本配置': 'Configuration de Base Bandix',
'配置 Bandix 服务的基本参数': 'Configurer les paramètres de base du service Bandix', '配置 Bandix 服务的基本参数': 'Configurer les paramètres de base du service Bandix',
'Bandix 流量监控配置': 'Configuration de Surveillance du Trafic Bandix', 'Bandix 流量监控配置': 'Configuration de Surveillance du Trafic Bandix',
'配置流量监控相关参数': 'Configurer les paramètres liés à la surveillance du trafic', '配置流量监控相关参数': 'Configurer les paramètres liés à la surveillance du trafic',
'Bandix 连接监控配置': 'Configuration de Surveillance des Connexions Bandix', 'Bandix 连接监控配置': 'Configuration de Surveillance des Connexions Bandix',
'配置连接监控相关参数': 'Configurer les paramètres liés à la surveillance des connexions', '配置连接监控相关参数': 'Configurer les paramètres liés à la surveillance des connexions',
'Bandix DNS监控配置': 'Configuration de Surveillance DNS Bandix',
'配置DNS监控相关参数': 'Configurer les paramètres liés à la surveillance DNS',
'启用': 'Activer', '启用': 'Activer',
'启用 Bandix 流量监控服务': 'Activer le Service de Surveillance du Trafic Bandix', '启用 Bandix 流量监控服务': 'Activer le Service de Surveillance du Trafic Bandix',
'启用流量监控': 'Activer la Surveillance du Trafic', '启用流量监控': 'Activer la Surveillance du Trafic',
'启用连接监控': 'Activer la Surveillance des Connexions', '启用连接监控': 'Activer la Surveillance des Connexions',
'启用DNS监控': 'Activer la Surveillance DNS',
'界面语言': 'Langue de l\'Interface', '界面语言': 'Langue de l\'Interface',
'选择 Bandix 流量监控的显示语言': 'Sélectionner la langue d\'affichage pour le Moniteur de Trafic Bandix', '选择 Bandix 流量监控的显示语言': 'Sélectionner la langue d\'affichage pour le Moniteur de Trafic Bandix',
'简体中文': 'Chinois Simplifié', '简体中文': 'Chinois Simplifié',
@@ -215,6 +238,9 @@ const translations = {
'数据目录': 'Répertoire de Données', '数据目录': 'Répertoire de Données',
'Bandix 数据存储目录': 'Répertoire de stockage de données Bandix', 'Bandix 数据存储目录': 'Répertoire de stockage de données Bandix',
'启用 Bandix 连接监控功能': 'Activer la surveillance des connexions Bandix', '启用 Bandix 连接监控功能': 'Activer la surveillance des connexions Bandix',
'启用 Bandix DNS监控功能': 'Activer la surveillance DNS Bandix',
'DNS最大记录数': 'Nombre Maximum d\'Enregistrements DNS',
'设置DNS查询记录的最大保存数量': 'Définir le nombre maximum d\'enregistrements de requêtes DNS à conserver. Les enregistrements plus anciens seront supprimés lorsque cette limite est dépassée',
'持久化历史数据': 'Persister les Données Historiques', '持久化历史数据': 'Persister les Données Historiques',
'启用数据持久化功能': 'Activer la fonctionnalité de persistance des données, les données ne seront persistées sur le disque que lorsque cette option est activée' '启用数据持久化功能': 'Activer la fonctionnalité de persistance des données, les données ne seront persistées sur le disque que lorsque cette option est activée'
}, },
@@ -222,16 +248,20 @@ const translations = {
'基本设置': '基本設定', '基本设置': '基本設定',
'流量监控设置': 'トラフィック監視設定', '流量监控设置': 'トラフィック監視設定',
'连接监控设置': '接続監視設定', '连接监控设置': '接続監視設定',
'DNS监控设置': 'DNS監視設定',
'Bandix 基本配置': 'Bandix 基本設定', 'Bandix 基本配置': 'Bandix 基本設定',
'配置 Bandix 服务的基本参数': 'Bandix サービスの基本パラメータを設定', '配置 Bandix 服务的基本参数': 'Bandix サービスの基本パラメータを設定',
'Bandix 流量监控配置': 'Bandix トラフィック監視設定', 'Bandix 流量监控配置': 'Bandix トラフィック監視設定',
'配置流量监控相关参数': 'トラフィック監視関連パラメータを設定', '配置流量监控相关参数': 'トラフィック監視関連パラメータを設定',
'Bandix 连接监控配置': 'Bandix 接続監視設定', 'Bandix 连接监控配置': 'Bandix 接続監視設定',
'配置连接监控相关参数': '接続監視関連パラメータを設定', '配置连接监控相关参数': '接続監視関連パラメータを設定',
'Bandix DNS监控配置': 'Bandix DNS監視設定',
'配置DNS监控相关参数': 'DNS監視関連パラメータを設定',
'启用': '有効', '启用': '有効',
'启用 Bandix 流量监控服务': 'Bandix トラフィックモニターサービスを有効にする', '启用 Bandix 流量监控服务': 'Bandix トラフィックモニターサービスを有効にする',
'启用流量监控': 'トラフィック監視を有効にする', '启用流量监控': 'トラフィック監視を有効にする',
'启用连接监控': '接続監視を有効にする', '启用连接监控': '接続監視を有効にする',
'启用DNS监控': 'DNS監視を有効にする',
'界面语言': 'インターフェース言語', '界面语言': 'インターフェース言語',
'选择 Bandix 流量监控的显示语言': 'Bandix トラフィックモニターの表示言語を選択', '选择 Bandix 流量监控的显示语言': 'Bandix トラフィックモニターの表示言語を選択',
'简体中文': '簡体字中国語', '简体中文': '簡体字中国語',
@@ -268,6 +298,9 @@ const translations = {
'数据目录': 'データディレクトリ', '数据目录': 'データディレクトリ',
'Bandix 数据存储目录': 'Bandix データ保存ディレクトリ', 'Bandix 数据存储目录': 'Bandix データ保存ディレクトリ',
'启用 Bandix 连接监控功能': 'Bandix 接続監視機能を有効にする', '启用 Bandix 连接监控功能': 'Bandix 接続監視機能を有効にする',
'启用 Bandix DNS监控功能': 'Bandix DNS監視機能を有効にする',
'DNS最大记录数': 'DNS最大記録数',
'设置DNS查询记录的最大保存数量': 'DNSクエリ記録の最大保存数を設定。この数を超えると、最も古い記録が削除されます',
'持久化历史数据': '履歴データの永続化', '持久化历史数据': '履歴データの永続化',
'启用数据持久化功能': 'データ永続化機能を有効にする。このオプションが有効な場合のみ、データがディスクに永続化されます' '启用数据持久化功能': 'データ永続化機能を有効にする。このオプションが有効な場合のみ、データがディスクに永続化されます'
}, },
@@ -275,16 +308,20 @@ const translations = {
'基本设置': 'Основные Настройки', '基本设置': 'Основные Настройки',
'流量监控设置': 'Настройки Мониторинга Трафика', '流量监控设置': 'Настройки Мониторинга Трафика',
'连接监控设置': 'Настройки Мониторинга Соединений', '连接监控设置': 'Настройки Мониторинга Соединений',
'DNS监控设置': 'Настройки Мониторинга DNS',
'Bandix 基本配置': 'Базовая Конфигурация Bandix', 'Bandix 基本配置': 'Базовая Конфигурация Bandix',
'配置 Bandix 服务的基本参数': 'Настроить основные параметры службы Bandix', '配置 Bandix 服务的基本参数': 'Настроить основные параметры службы Bandix',
'Bandix 流量监控配置': 'Конфигурация Мониторинга Трафика Bandix', 'Bandix 流量监控配置': 'Конфигурация Мониторинга Трафика Bandix',
'配置流量监控相关参数': 'Настроить параметры, связанные с мониторингом трафика', '配置流量监控相关参数': 'Настроить параметры, связанные с мониторингом трафика',
'Bandix 连接监控配置': 'Конфигурация Мониторинга Соединений Bandix', 'Bandix 连接监控配置': 'Конфигурация Мониторинга Соединений Bandix',
'配置连接监控相关参数': 'Настроить параметры, связанные с мониторингом соединений', '配置连接监控相关参数': 'Настроить параметры, связанные с мониторингом соединений',
'Bandix DNS监控配置': 'Конфигурация Мониторинга DNS Bandix',
'配置DNS监控相关参数': 'Настроить параметры, связанные с мониторингом DNS',
'启用': 'Включить', '启用': 'Включить',
'启用 Bandix 流量监控服务': 'Включить Службу Мониторинга Трафика Bandix', '启用 Bandix 流量监控服务': 'Включить Службу Мониторинга Трафика Bandix',
'启用流量监控': 'Включить Мониторинг Трафика', '启用流量监控': 'Включить Мониторинг Трафика',
'启用连接监控': 'Включить Мониторинг Соединений', '启用连接监控': 'Включить Мониторинг Соединений',
'启用DNS监控': 'Включить Мониторинг DNS',
'界面语言': 'Язык Интерфейса', '界面语言': 'Язык Интерфейса',
'选择 Bandix 流量监控的显示语言': 'Выберите язык отображения для Монитора Трафика Bandix', '选择 Bandix 流量监控的显示语言': 'Выберите язык отображения для Монитора Трафика Bandix',
'简体中文': 'Упрощенный Китайский', '简体中文': 'Упрощенный Китайский',
@@ -321,6 +358,9 @@ const translations = {
'数据目录': 'Каталог Данных', '数据目录': 'Каталог Данных',
'Bandix 数据存储目录': 'Каталог хранения данных Bandix', 'Bandix 数据存储目录': 'Каталог хранения данных Bandix',
'启用 Bandix 连接监控功能': 'Включить мониторинг соединений Bandix', '启用 Bandix 连接监控功能': 'Включить мониторинг соединений Bandix',
'启用 Bandix DNS监控功能': 'Включить мониторинг DNS Bandix',
'DNS最大记录数': 'Максимальное Количество Записей DNS',
'设置DNS查询记录的最大保存数量': 'Установить максимальное количество записей DNS-запросов для хранения. Более старые записи будут удалены при превышении этого лимита',
'持久化历史数据': 'Персистентность Исторических Данных', '持久化历史数据': 'Персистентность Исторических Данных',
'启用数据持久化功能': 'Включить функциональность персистентности данных, данные будут сохраняться на диск только при включении этой опции' '启用数据持久化功能': 'Включить функциональность персистентности данных, данные будут сохраняться на диск только при включении этой опции'
} }
@@ -408,6 +448,9 @@ return view.extend({
if (!uci.get('bandix', 'connections')) { if (!uci.get('bandix', 'connections')) {
uci.add('bandix', 'connections', 'connections'); uci.add('bandix', 'connections', 'connections');
} }
if (!uci.get('bandix', 'dns')) {
uci.add('bandix', 'dns', 'dns');
}
var language = uci.get('bandix', 'general', 'language'); var language = uci.get('bandix', 'general', 'language');
if (!language || language === 'auto') { if (!language || language === 'auto') {
@@ -676,6 +719,24 @@ return view.extend({
o.default = '0'; o.default = '0';
o.rmempty = false; o.rmempty = false;
// 4. DNS监控设置部分 (dns)
s = m.section(form.NamedSection, 'dns', 'dns', getTranslation('DNS监控设置', language));
s.description = getTranslation('配置DNS监控相关参数', language);
s.addremove = false;
o = s.option(form.Flag, 'enabled', getTranslation('启用DNS监控', language),
getTranslation('启用 Bandix DNS监控功能', language));
o.default = '0';
o.rmempty = false;
// 添加DNS最大记录数选项
o = s.option(form.Value, 'dns_max_records', getTranslation('DNS最大记录数', language),
getTranslation('设置DNS查询记录的最大保存数量', language));
o.datatype = 'uinteger';
o.placeholder = '10000';
o.default = '10000';
o.rmempty = false;
return m.render(); return m.render();
} }
}); });

View File

@@ -10,6 +10,8 @@ readonly BANDIX_DEVICES_API="$BANDIX_API_BASE/api/traffic/devices"
readonly BANDIX_LIMITS_API="$BANDIX_API_BASE/api/traffic/limits" readonly BANDIX_LIMITS_API="$BANDIX_API_BASE/api/traffic/limits"
readonly BANDIX_METRICS_API="$BANDIX_API_BASE/api/traffic/metrics" readonly BANDIX_METRICS_API="$BANDIX_API_BASE/api/traffic/metrics"
readonly BANDIX_CONNECTION_API="$BANDIX_API_BASE/api/connection/devices" readonly BANDIX_CONNECTION_API="$BANDIX_API_BASE/api/connection/devices"
readonly BANDIX_DNS_QUERIES_API="$BANDIX_API_BASE/api/dns/queries"
readonly BANDIX_DNS_STATS_API="$BANDIX_API_BASE/api/dns/stats"
# 通用函数创建简单的JSON响应 # 通用函数创建简单的JSON响应
make_value() { make_value() {
@@ -223,6 +225,72 @@ get_connection_devices() {
echo "$response" echo "$response"
} }
# 获取 DNS 查询记录
get_dns_queries() {
# 检查 DNS 监控是否启用
local dns_enabled=$(uci get bandix.dns.enabled 2>/dev/null)
if [ "$dns_enabled" != "1" ]; then
make_error "DNS monitoring is not enabled"
return
fi
# 构建查询参数
local query_params=""
local domain="$1"
local device="$2"
local is_query="$3"
local dns_server="$4"
local page="$5"
local page_size="$6"
[ -n "$domain" ] && query_params="${query_params}domain=$(printf '%s' "$domain" | sed 's/ /%20/g')&"
[ -n "$device" ] && query_params="${query_params}device=$(printf '%s' "$device" | sed 's/ /%20/g')&"
[ -n "$is_query" ] && query_params="${query_params}is_query=$is_query&"
[ -n "$dns_server" ] && query_params="${query_params}dns_server=$(printf '%s' "$dns_server" | sed 's/ /%20/g')&"
[ -n "$page" ] && query_params="${query_params}page=$page&"
[ -n "$page_size" ] && query_params="${query_params}page_size=$page_size&"
# 移除末尾的 &
query_params=$(echo "$query_params" | sed 's/&$//')
local url="$BANDIX_DNS_QUERIES_API"
[ -n "$query_params" ] && url="${url}?${query_params}"
# 从 Bandix API 获取 DNS 查询数据
local response=$(curl -s --connect-timeout 2 --max-time 10 -X GET "$url" 2>/dev/null)
# 检查API调用是否成功
if [ $? -ne 0 ] || [ -z "$response" ]; then
make_error "Failed to connect to Bandix service"
return
fi
# 直接返回API结果
echo "$response"
}
# 获取 DNS 统计信息
get_dns_stats() {
# 检查 DNS 监控是否启用
local dns_enabled=$(uci get bandix.dns.enabled 2>/dev/null)
if [ "$dns_enabled" != "1" ]; then
make_error "DNS monitoring is not enabled"
return
fi
# 从 Bandix API 获取 DNS 统计数据
local response=$(curl -s --connect-timeout 2 --max-time 10 -X GET "$BANDIX_DNS_STATS_API" 2>/dev/null)
# 检查API调用是否成功
if [ $? -ne 0 ] || [ -z "$response" ]; then
make_error "Failed to connect to Bandix service"
return
fi
# 直接返回API结果
echo "$response"
}
case "$1" in case "$1" in
list) list)
json_init json_init
@@ -247,6 +315,18 @@ case "$1" in
json_add_object "getConnection" json_add_object "getConnection"
json_close_object json_close_object
json_add_object "getDnsQueries"
json_add_string "domain"
json_add_string "device"
json_add_string "is_query"
json_add_string "dns_server"
json_add_int "page"
json_add_int "page_size"
json_close_object
json_add_object "getDnsStats"
json_close_object
json_dump json_dump
json_cleanup json_cleanup
;; ;;
@@ -351,6 +431,40 @@ case "$1" in
# logger "luci.bandix: getConnection called" # logger "luci.bandix: getConnection called"
get_connection_devices get_connection_devices
;; ;;
getDnsQueries)
# logger "luci.bandix: getDnsQueries called"
# 从 stdin 读取 JSON 参数
read input
if [ -n "$input" ]; then
# 解析参数
domain=$(echo "$input" | jsonfilter -e '$[0]' 2>/dev/null)
[ -z "$domain" ] && domain=$(echo "$input" | jsonfilter -e '$.domain' 2>/dev/null)
device=$(echo "$input" | jsonfilter -e '$[1]' 2>/dev/null)
[ -z "$device" ] && device=$(echo "$input" | jsonfilter -e '$.device' 2>/dev/null)
is_query=$(echo "$input" | jsonfilter -e '$[2]' 2>/dev/null)
[ -z "$is_query" ] && is_query=$(echo "$input" | jsonfilter -e '$.is_query' 2>/dev/null)
dns_server=$(echo "$input" | jsonfilter -e '$[3]' 2>/dev/null)
[ -z "$dns_server" ] && dns_server=$(echo "$input" | jsonfilter -e '$.dns_server' 2>/dev/null)
page=$(echo "$input" | jsonfilter -e '$[4]' 2>/dev/null)
[ -z "$page" ] && page=$(echo "$input" | jsonfilter -e '$.page' 2>/dev/null)
page_size=$(echo "$input" | jsonfilter -e '$[5]' 2>/dev/null)
[ -z "$page_size" ] && page_size=$(echo "$input" | jsonfilter -e '$.page_size' 2>/dev/null)
get_dns_queries "$domain" "$device" "$is_query" "$dns_server" "$page" "$page_size"
else
get_dns_queries "" "" "" "" "" ""
fi
;;
getDnsStats)
# logger "luci.bandix: getDnsStats called"
get_dns_stats
;;
esac esac
;; ;;
esac esac

View File

@@ -27,9 +27,17 @@
"path": "bandix/connection" "path": "bandix/connection"
} }
}, },
"admin/network/bandix/dns": {
"title": "DNS",
"order": 20,
"action": {
"type": "view",
"path": "bandix/dns"
}
},
"admin/network/bandix/settings": { "admin/network/bandix/settings": {
"title": "Settings", "title": "Settings",
"order": 20, "order": 25,
"action": { "action": {
"type": "view", "type": "view",
"path": "bandix/settings" "path": "bandix/settings"

View File

@@ -8,7 +8,9 @@
"getMetrics", "getMetrics",
"setRateLimit", "setRateLimit",
"getConnection", "getConnection",
"setHostname" "setHostname",
"getDnsQueries",
"getDnsStats"
] ]
}, },
"uci": [ "uci": [
@@ -22,7 +24,9 @@
"getStatus", "getStatus",
"getMetrics", "getMetrics",
"getConnection", "getConnection",
"setHostname" "setHostname",
"getDnsQueries",
"getDnsStats"
] ]
}, },
"uci": [ "uci": [

View File

@@ -1,6 +1,6 @@
include $(TOPDIR)/rules.mk include $(TOPDIR)/rules.mk
PKG_VERSION:=1.24.3 PKG_VERSION:=1.24.4
LUCI_TITLE:=LuCI Support for nikki LUCI_TITLE:=LuCI Support for nikki
LUCI_DEPENDS:=+luci-base +nikki LUCI_DEPENDS:=+luci-base +nikki

View File

@@ -249,6 +249,10 @@ return view.extend({
o.datatype = 'cidr4'; o.datatype = 'cidr4';
o.placeholder = _('Unmodified'); o.placeholder = _('Unmodified');
o = s.taboption('dns', form.Value, 'fake_ip6_range', _('Fake-IP6 Range'));
o.datatype = 'cidr6';
o.placeholder = _('Unmodified');
o = s.taboption('dns', form.Flag, 'fake_ip_filter', _('Overwrite Fake-IP Filter')); o = s.taboption('dns', form.Flag, 'fake_ip_filter', _('Overwrite Fake-IP Filter'));
o.rmempty = false; o.rmempty = false;

View File

@@ -31,7 +31,7 @@ msgstr ""
msgid "Allow Lan" msgid "Allow Lan"
msgstr "" msgstr ""
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:263 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:267
msgid "Allow Mode" msgid "Allow Mode"
msgstr "" msgstr ""
@@ -48,19 +48,19 @@ msgstr ""
msgid "App Version" msgid "App Version"
msgstr "" msgstr ""
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:486 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:490
msgid "Append Rule" msgid "Append Rule"
msgstr "" msgstr ""
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:417 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:421
msgid "Append Rule Provider" msgid "Append Rule Provider"
msgstr "" msgstr ""
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:473 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:477
msgid "Behavior" msgid "Behavior"
msgstr "" msgstr ""
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:262 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:266
msgid "Block Mode" msgid "Block Mode"
msgstr "" msgstr ""
@@ -143,15 +143,15 @@ msgstr ""
msgid "Debug Log" msgid "Debug Log"
msgstr "" msgstr ""
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:509 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:513
msgid "Destination IP" msgid "Destination IP"
msgstr "" msgstr ""
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:513 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:517
msgid "Destination IP Geo" msgid "Destination IP Geo"
msgstr "" msgstr ""
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:510 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:514
msgid "Destination Port" msgid "Destination Port"
msgstr "" msgstr ""
@@ -181,15 +181,15 @@ msgstr ""
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:208 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:208
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:229 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:229
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:239 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:239
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:268 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:272
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:274 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:278
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:280 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:284
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:286 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:290
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:292 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:296
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:361 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:365
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:367 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:371
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:373 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:377
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:560 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:565
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:38 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:38
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:45 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:45
msgid "Disable" msgid "Disable"
@@ -211,32 +211,32 @@ msgstr ""
msgid "Disable TCP Keep Alive" msgid "Disable TCP Keep Alive"
msgstr "" msgstr ""
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:277 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:281
msgid "DoH Prefer HTTP/3" msgid "DoH Prefer HTTP/3"
msgstr "" msgstr ""
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:309 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:313
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:504 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:508
msgid "Domain Name" msgid "Domain Name"
msgstr "" msgstr ""
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:512 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:516
msgid "Domain Name Geo" msgid "Domain Name Geo"
msgstr "" msgstr ""
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:507 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:511
msgid "Domain Name Keyword" msgid "Domain Name Keyword"
msgstr "" msgstr ""
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:508 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:512
msgid "Domain Name Regex" msgid "Domain Name Regex"
msgstr "" msgstr ""
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:505 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:509
msgid "Domain Name Suffix" msgid "Domain Name Suffix"
msgstr "" msgstr ""
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:506 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:510
msgid "Domain Name Wildcard" msgid "Domain Name Wildcard"
msgstr "" msgstr ""
@@ -248,27 +248,27 @@ msgstr ""
msgid "Edit DNS Hijacks" msgid "Edit DNS Hijacks"
msgstr "" msgstr ""
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:255 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:259
msgid "Edit Fake-IP Filters" msgid "Edit Fake-IP Filters"
msgstr "" msgstr ""
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:298 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:302
msgid "Edit Hosts" msgid "Edit Hosts"
msgstr "" msgstr ""
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:340 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:344
msgid "Edit Nameserver Policies" msgid "Edit Nameserver Policies"
msgstr "" msgstr ""
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:317 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:321
msgid "Edit Nameservers" msgid "Edit Nameservers"
msgstr "" msgstr ""
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:420 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:424
msgid "Edit Rule Providers" msgid "Edit Rule Providers"
msgstr "" msgstr ""
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:489 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:493
msgid "Edit Rules" msgid "Edit Rules"
msgstr "" msgstr ""
@@ -295,23 +295,23 @@ msgstr ""
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:226 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:226
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:230 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:230
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:240 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:240
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:269 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:273
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:275 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:279
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:281 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:285
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:287 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:291
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:293 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:297
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:306 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:310
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:325 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:329
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:348 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:352
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:358
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:362 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:362
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:368 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:366
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:374 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:372
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:400 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:378
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:428 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:404
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:497 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:432
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:561 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:501
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:569 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:566
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:574
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:33 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:33
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:66 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:66
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:77 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:77
@@ -332,11 +332,11 @@ msgstr ""
msgid "External Control Config" msgid "External Control Config"
msgstr "" msgstr ""
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:265 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:269
msgid "Fake-IP Cache" msgid "Fake-IP Cache"
msgstr "" msgstr ""
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:259 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:263
msgid "Fake-IP Filter Mode" msgid "Fake-IP Filter Mode"
msgstr "" msgstr ""
@@ -348,19 +348,23 @@ msgstr ""
msgid "Fake-IP Range" msgid "Fake-IP Range"
msgstr "" msgstr ""
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:252
msgid "Fake-IP6 Range"
msgstr ""
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/app.js:132 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/app.js:132
msgid "Fast Reload" msgid "Fast Reload"
msgstr "" msgstr ""
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:467 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:471
msgid "File Format" msgid "File Format"
msgstr "" msgstr ""
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:461 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:465
msgid "File Path" msgid "File Path"
msgstr "" msgstr ""
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:455 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:459
msgid "File Size Limit" msgid "File Size Limit"
msgstr "" msgstr ""
@@ -373,7 +377,7 @@ msgstr ""
msgid "File:" msgid "File:"
msgstr "" msgstr ""
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:379 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:383
msgid "Force Sniff Domain Name" msgid "Force Sniff Domain Name"
msgstr "" msgstr ""
@@ -394,39 +398,39 @@ msgstr ""
msgid "Generate & Download" msgid "Generate & Download"
msgstr "" msgstr ""
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:539 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:544
msgid "GeoData Loader" msgid "GeoData Loader"
msgstr "" msgstr ""
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:533 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:538
msgid "GeoIP Format" msgid "GeoIP Format"
msgstr "" msgstr ""
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:554 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:559
msgid "GeoIP(ASN) Url" msgid "GeoIP(ASN) Url"
msgstr "" msgstr ""
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:551 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:556
msgid "GeoIP(DAT) Url" msgid "GeoIP(DAT) Url"
msgstr "" msgstr ""
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:548 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:553
msgid "GeoIP(MMDB) Url" msgid "GeoIP(MMDB) Url"
msgstr "" msgstr ""
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:545 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:550
msgid "GeoSite Url" msgid "GeoSite Url"
msgstr "" msgstr ""
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:557 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:562
msgid "GeoX Auto Update" msgid "GeoX Auto Update"
msgstr "" msgstr ""
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:531 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:536
msgid "GeoX Config" msgid "GeoX Config"
msgstr "" msgstr ""
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:563 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:568
msgid "GeoX Update Interval" msgid "GeoX Update Interval"
msgstr "" msgstr ""
@@ -478,7 +482,7 @@ msgstr ""
msgid "IPv6 Proxy" msgid "IPv6 Proxy"
msgstr "" msgstr ""
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:386 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:390
msgid "Ignore Sniff Domain Name" msgid "Ignore Sniff Domain Name"
msgstr "" msgstr ""
@@ -515,12 +519,12 @@ msgstr ""
msgid "Match Process" msgid "Match Process"
msgstr "" msgstr ""
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:351 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:355
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:515 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:519
msgid "Matcher" msgid "Matcher"
msgstr "" msgstr ""
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:543 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:548
msgid "Memory Conservative Loader" msgid "Memory Conservative Loader"
msgstr "" msgstr ""
@@ -532,7 +536,7 @@ msgstr ""
msgid "Mixin Config" msgid "Mixin Config"
msgstr "" msgstr ""
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:567 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:572
msgid "Mixin File Content" msgid "Mixin File Content"
msgstr "" msgstr ""
@@ -544,12 +548,12 @@ msgstr ""
msgid "Mode" msgid "Mode"
msgstr "" msgstr ""
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:434 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:438
msgid "Name" msgid "Name"
msgstr "" msgstr ""
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:335 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:339
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:354 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:358
msgid "Nameserver" msgid "Nameserver"
msgstr "" msgstr ""
@@ -558,12 +562,12 @@ msgstr ""
msgid "Nikki" msgid "Nikki"
msgstr "" msgstr ""
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:526 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:530
msgid "No Resolve" msgid "No Resolve"
msgstr "" msgstr ""
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:448 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:452
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:519 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:523
msgid "Node" msgid "Node"
msgstr "" msgstr ""
@@ -595,35 +599,35 @@ msgstr ""
msgid "Overwrite DNS Hijack" msgid "Overwrite DNS Hijack"
msgstr "" msgstr ""
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:412 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:416
msgid "Overwrite Destination" msgid "Overwrite Destination"
msgstr "" msgstr ""
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:252 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:256
msgid "Overwrite Fake-IP Filter" msgid "Overwrite Fake-IP Filter"
msgstr "" msgstr ""
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:376 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:380
msgid "Overwrite Force Sniff Domain Name" msgid "Overwrite Force Sniff Domain Name"
msgstr "" msgstr ""
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:295 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:299
msgid "Overwrite Hosts" msgid "Overwrite Hosts"
msgstr "" msgstr ""
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:383 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:387
msgid "Overwrite Ignore Sniff Domain Name" msgid "Overwrite Ignore Sniff Domain Name"
msgstr "" msgstr ""
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:314 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:318
msgid "Overwrite Nameserver" msgid "Overwrite Nameserver"
msgstr "" msgstr ""
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:337 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:341
msgid "Overwrite Nameserver Policy" msgid "Overwrite Nameserver Policy"
msgstr "" msgstr ""
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:390 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:394
msgid "Overwrite Sniff By Protocol" msgid "Overwrite Sniff By Protocol"
msgstr "" msgstr ""
@@ -631,11 +635,11 @@ msgstr ""
msgid "Password" msgid "Password"
msgstr "" msgstr ""
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:569 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:574
msgid "Please go to the editor tab to edit the file for mixin" msgid "Please go to the editor tab to edit the file for mixin"
msgstr "" msgstr ""
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:409 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:413
msgid "Port" msgid "Port"
msgstr "" msgstr ""
@@ -643,7 +647,7 @@ msgstr ""
msgid "Prefer" msgid "Prefer"
msgstr "" msgstr ""
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:511 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:515
msgid "Process Name" msgid "Process Name"
msgstr "" msgstr ""
@@ -656,7 +660,7 @@ msgstr ""
msgid "Profile for Startup" msgid "Profile for Startup"
msgstr "" msgstr ""
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:403 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:407
msgid "Protocol" msgid "Protocol"
msgstr "" msgstr ""
@@ -699,7 +703,7 @@ msgstr ""
msgid "Remote" msgid "Remote"
msgstr "" msgstr ""
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:271 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:275
msgid "Respect Rules" msgid "Respect Rules"
msgstr "" msgstr ""
@@ -711,7 +715,7 @@ msgstr ""
msgid "Router Proxy" msgid "Router Proxy"
msgstr "" msgstr ""
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:415 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:419
msgid "Rule Config" msgid "Rule Config"
msgstr "" msgstr ""
@@ -723,7 +727,7 @@ msgstr ""
msgid "Rule Provider:" msgid "Rule Provider:"
msgstr "" msgstr ""
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:503 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:507
msgid "Rule Set" msgid "Rule Set"
msgstr "" msgstr ""
@@ -756,19 +760,19 @@ msgstr ""
msgid "Skip System IPv6 Check" msgid "Skip System IPv6 Check"
msgstr "" msgstr ""
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:393 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:397
msgid "Sniff By Protocol" msgid "Sniff By Protocol"
msgstr "" msgstr ""
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:370 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:374
msgid "Sniff Pure IP" msgid "Sniff Pure IP"
msgstr "" msgstr ""
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:364 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:368
msgid "Sniff Redir-Host" msgid "Sniff Redir-Host"
msgstr "" msgstr ""
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:356 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:360
msgid "Sniffer Config" msgid "Sniffer Config"
msgstr "" msgstr ""
@@ -784,7 +788,7 @@ msgstr ""
msgid "Stack Size Soft Limit" msgid "Stack Size Soft Limit"
msgstr "" msgstr ""
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:542 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:547
msgid "Standard Loader" msgid "Standard Loader"
msgstr "" msgstr ""
@@ -867,9 +871,9 @@ msgstr ""
msgid "Transparent Proxy with Mihomo on OpenWrt." msgid "Transparent Proxy with Mihomo on OpenWrt."
msgstr "" msgstr ""
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:328 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:332
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:437 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:441
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:501 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:505
msgid "Type" msgid "Type"
msgstr "" msgstr ""
@@ -938,23 +942,24 @@ msgstr ""
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:238 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:238
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:244 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:244
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:250 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:250
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:261 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:254
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:267 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:265
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:273 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:271
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:279 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:277
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:285 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:283
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:291 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:289
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:360 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:295
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:366 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:364
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:372 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:370
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:535 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:376
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:541 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:540
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:546 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:546
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:549 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:551
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:552 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:554
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:555 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:557
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:559 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:560
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:565 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:564
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:570
msgid "Unmodified" msgid "Unmodified"
msgstr "" msgstr ""
@@ -970,7 +975,7 @@ msgstr ""
msgid "Update Dashboard" msgid "Update Dashboard"
msgstr "" msgstr ""
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:480 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:484
msgid "Update Interval" msgid "Update Interval"
msgstr "" msgstr ""
@@ -978,15 +983,15 @@ msgstr ""
msgid "Upload Profile" msgid "Upload Profile"
msgstr "" msgstr ""
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:443 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:447
msgid "Url" msgid "Url"
msgstr "" msgstr ""
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:289 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:293
msgid "Use Hosts" msgid "Use Hosts"
msgstr "" msgstr ""
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:283 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:287
msgid "Use System Hosts" msgid "Use System Hosts"
msgstr "" msgstr ""

View File

@@ -38,7 +38,7 @@ msgstr "全部端口"
msgid "Allow Lan" msgid "Allow Lan"
msgstr "允许局域网访问" msgstr "允许局域网访问"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:263 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:267
msgid "Allow Mode" msgid "Allow Mode"
msgstr "白名单模式" msgstr "白名单模式"
@@ -55,19 +55,19 @@ msgstr "插件日志"
msgid "App Version" msgid "App Version"
msgstr "插件版本" msgstr "插件版本"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:486 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:490
msgid "Append Rule" msgid "Append Rule"
msgstr "追加规则" msgstr "追加规则"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:417 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:421
msgid "Append Rule Provider" msgid "Append Rule Provider"
msgstr "追加规则提供者" msgstr "追加规则提供者"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:473 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:477
msgid "Behavior" msgid "Behavior"
msgstr "行为" msgstr "行为"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:262 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:266
msgid "Block Mode" msgid "Block Mode"
msgstr "黑名单模式" msgstr "黑名单模式"
@@ -150,15 +150,15 @@ msgstr "DNS 模式"
msgid "Debug Log" msgid "Debug Log"
msgstr "调试日志" msgstr "调试日志"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:509 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:513
msgid "Destination IP" msgid "Destination IP"
msgstr "目标 IP" msgstr "目标 IP"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:513 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:517
msgid "Destination IP Geo" msgid "Destination IP Geo"
msgstr "目标 IPGeo" msgstr "目标 IPGeo"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:510 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:514
msgid "Destination Port" msgid "Destination Port"
msgstr "目标端口" msgstr "目标端口"
@@ -188,15 +188,15 @@ msgstr "直连模式"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:208 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:208
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:229 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:229
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:239 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:239
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:268 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:272
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:274 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:278
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:280 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:284
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:286 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:290
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:292 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:296
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:361 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:365
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:367 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:371
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:373 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:377
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:560 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:565
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:38 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:38
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:45 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:45
msgid "Disable" msgid "Disable"
@@ -218,32 +218,32 @@ msgstr "禁用回环检测"
msgid "Disable TCP Keep Alive" msgid "Disable TCP Keep Alive"
msgstr "禁用 TCP Keep Alive" msgstr "禁用 TCP Keep Alive"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:277 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:281
msgid "DoH Prefer HTTP/3" msgid "DoH Prefer HTTP/3"
msgstr "DoH 优先 HTTP/3" msgstr "DoH 优先 HTTP/3"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:309 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:313
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:504 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:508
msgid "Domain Name" msgid "Domain Name"
msgstr "域名" msgstr "域名"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:512 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:516
msgid "Domain Name Geo" msgid "Domain Name Geo"
msgstr "域名Geo" msgstr "域名Geo"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:507 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:511
msgid "Domain Name Keyword" msgid "Domain Name Keyword"
msgstr "域名(关键字)" msgstr "域名(关键字)"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:508 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:512
msgid "Domain Name Regex" msgid "Domain Name Regex"
msgstr "域名(正则表达式)" msgstr "域名(正则表达式)"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:505 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:509
msgid "Domain Name Suffix" msgid "Domain Name Suffix"
msgstr "域名(后缀)" msgstr "域名(后缀)"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:506 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:510
msgid "Domain Name Wildcard" msgid "Domain Name Wildcard"
msgstr "域名(通配符)" msgstr "域名(通配符)"
@@ -255,27 +255,27 @@ msgstr "编辑身份验证"
msgid "Edit DNS Hijacks" msgid "Edit DNS Hijacks"
msgstr "编辑 DNS 劫持" msgstr "编辑 DNS 劫持"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:255 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:259
msgid "Edit Fake-IP Filters" msgid "Edit Fake-IP Filters"
msgstr "编辑 Fake-IP 过滤列表" msgstr "编辑 Fake-IP 过滤列表"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:298 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:302
msgid "Edit Hosts" msgid "Edit Hosts"
msgstr "编辑 Hosts" msgstr "编辑 Hosts"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:340 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:344
msgid "Edit Nameserver Policies" msgid "Edit Nameserver Policies"
msgstr "编辑 DNS 服务器查询策略" msgstr "编辑 DNS 服务器查询策略"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:317 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:321
msgid "Edit Nameservers" msgid "Edit Nameservers"
msgstr "编辑 DNS 服务器" msgstr "编辑 DNS 服务器"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:420 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:424
msgid "Edit Rule Providers" msgid "Edit Rule Providers"
msgstr "编辑规则提供者" msgstr "编辑规则提供者"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:489 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:493
msgid "Edit Rules" msgid "Edit Rules"
msgstr "编辑规则" msgstr "编辑规则"
@@ -302,23 +302,23 @@ msgstr "编辑器"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:226 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:226
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:230 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:230
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:240 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:240
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:269 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:273
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:275 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:279
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:281 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:285
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:287 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:291
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:293 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:297
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:306 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:310
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:325 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:329
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:348 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:352
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:358
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:362 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:362
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:368 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:366
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:374 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:372
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:400 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:378
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:428 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:404
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:497 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:432
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:561 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:501
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:569 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:566
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:574
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:33 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:33
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:66 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:66
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:77 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:77
@@ -339,11 +339,11 @@ msgstr "到期时间"
msgid "External Control Config" msgid "External Control Config"
msgstr "外部控制配置" msgstr "外部控制配置"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:265 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:269
msgid "Fake-IP Cache" msgid "Fake-IP Cache"
msgstr "Fake-IP 缓存" msgstr "Fake-IP 缓存"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:259 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:263
msgid "Fake-IP Filter Mode" msgid "Fake-IP Filter Mode"
msgstr "Fake-IP 过滤模式" msgstr "Fake-IP 过滤模式"
@@ -355,19 +355,23 @@ msgstr "Fake-IP Ping 劫持"
msgid "Fake-IP Range" msgid "Fake-IP Range"
msgstr "Fake-IP 范围" msgstr "Fake-IP 范围"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:252
msgid "Fake-IP6 Range"
msgstr "Fake-IP6 范围"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/app.js:132 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/app.js:132
msgid "Fast Reload" msgid "Fast Reload"
msgstr "快速重载" msgstr "快速重载"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:467 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:471
msgid "File Format" msgid "File Format"
msgstr "文件格式" msgstr "文件格式"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:461 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:465
msgid "File Path" msgid "File Path"
msgstr "文件路径" msgstr "文件路径"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:455 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:459
msgid "File Size Limit" msgid "File Size Limit"
msgstr "文件大小限制" msgstr "文件大小限制"
@@ -380,7 +384,7 @@ msgstr "用于混入的文件"
msgid "File:" msgid "File:"
msgstr "文件:" msgstr "文件:"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:379 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:383
msgid "Force Sniff Domain Name" msgid "Force Sniff Domain Name"
msgstr "强制嗅探的域名" msgstr "强制嗅探的域名"
@@ -401,39 +405,39 @@ msgstr "全局配置"
msgid "Generate & Download" msgid "Generate & Download"
msgstr "生成并下载" msgstr "生成并下载"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:539 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:544
msgid "GeoData Loader" msgid "GeoData Loader"
msgstr "GeoData 加载器" msgstr "GeoData 加载器"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:533 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:538
msgid "GeoIP Format" msgid "GeoIP Format"
msgstr "GeoIP 格式" msgstr "GeoIP 格式"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:554 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:559
msgid "GeoIP(ASN) Url" msgid "GeoIP(ASN) Url"
msgstr "GeoIP(ASN) 下载地址" msgstr "GeoIP(ASN) 下载地址"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:551 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:556
msgid "GeoIP(DAT) Url" msgid "GeoIP(DAT) Url"
msgstr "GeoIP(DAT) 下载地址" msgstr "GeoIP(DAT) 下载地址"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:548 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:553
msgid "GeoIP(MMDB) Url" msgid "GeoIP(MMDB) Url"
msgstr "GeoIP(MMDB) 下载地址" msgstr "GeoIP(MMDB) 下载地址"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:545 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:550
msgid "GeoSite Url" msgid "GeoSite Url"
msgstr "GeoSite 下载地址" msgstr "GeoSite 下载地址"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:557 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:562
msgid "GeoX Auto Update" msgid "GeoX Auto Update"
msgstr "定时更新GeoX文件" msgstr "定时更新GeoX文件"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:531 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:536
msgid "GeoX Config" msgid "GeoX Config"
msgstr "GeoX 配置" msgstr "GeoX 配置"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:563 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:568
msgid "GeoX Update Interval" msgid "GeoX Update Interval"
msgstr "GeoX 文件更新间隔" msgstr "GeoX 文件更新间隔"
@@ -485,7 +489,7 @@ msgstr "IPv6 DNS 劫持"
msgid "IPv6 Proxy" msgid "IPv6 Proxy"
msgstr "IPv6 代理" msgstr "IPv6 代理"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:386 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:390
msgid "Ignore Sniff Domain Name" msgid "Ignore Sniff Domain Name"
msgstr "忽略嗅探的域名" msgstr "忽略嗅探的域名"
@@ -522,12 +526,12 @@ msgstr "最大传输单元"
msgid "Match Process" msgid "Match Process"
msgstr "匹配进程" msgstr "匹配进程"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:351 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:355
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:515 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:519
msgid "Matcher" msgid "Matcher"
msgstr "匹配" msgstr "匹配"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:543 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:548
msgid "Memory Conservative Loader" msgid "Memory Conservative Loader"
msgstr "为内存受限设备优化的加载器" msgstr "为内存受限设备优化的加载器"
@@ -539,7 +543,7 @@ msgstr "混合端口"
msgid "Mixin Config" msgid "Mixin Config"
msgstr "混入配置" msgstr "混入配置"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:567 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:572
msgid "Mixin File Content" msgid "Mixin File Content"
msgstr "混入文件内容" msgstr "混入文件内容"
@@ -551,12 +555,12 @@ msgstr "混入选项"
msgid "Mode" msgid "Mode"
msgstr "模式" msgstr "模式"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:434 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:438
msgid "Name" msgid "Name"
msgstr "名称" msgstr "名称"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:335 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:339
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:354 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:358
msgid "Nameserver" msgid "Nameserver"
msgstr "DNS 服务器" msgstr "DNS 服务器"
@@ -565,12 +569,12 @@ msgstr "DNS 服务器"
msgid "Nikki" msgid "Nikki"
msgstr "Nikki" msgstr "Nikki"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:526 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:530
msgid "No Resolve" msgid "No Resolve"
msgstr "不解析" msgstr "不解析"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:448 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:452
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:519 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:523
msgid "Node" msgid "Node"
msgstr "节点" msgstr "节点"
@@ -602,35 +606,35 @@ msgstr "覆盖身份验证"
msgid "Overwrite DNS Hijack" msgid "Overwrite DNS Hijack"
msgstr "覆盖 DNS 劫持" msgstr "覆盖 DNS 劫持"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:412 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:416
msgid "Overwrite Destination" msgid "Overwrite Destination"
msgstr "将嗅探结果作为连接目标" msgstr "将嗅探结果作为连接目标"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:252 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:256
msgid "Overwrite Fake-IP Filter" msgid "Overwrite Fake-IP Filter"
msgstr "覆盖 Fake-IP 过滤列表" msgstr "覆盖 Fake-IP 过滤列表"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:376 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:380
msgid "Overwrite Force Sniff Domain Name" msgid "Overwrite Force Sniff Domain Name"
msgstr "覆盖强制嗅探的域名" msgstr "覆盖强制嗅探的域名"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:295 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:299
msgid "Overwrite Hosts" msgid "Overwrite Hosts"
msgstr "覆盖 Hosts" msgstr "覆盖 Hosts"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:383 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:387
msgid "Overwrite Ignore Sniff Domain Name" msgid "Overwrite Ignore Sniff Domain Name"
msgstr "覆盖忽略嗅探的域名" msgstr "覆盖忽略嗅探的域名"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:314 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:318
msgid "Overwrite Nameserver" msgid "Overwrite Nameserver"
msgstr "覆盖 DNS 服务器" msgstr "覆盖 DNS 服务器"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:337 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:341
msgid "Overwrite Nameserver Policy" msgid "Overwrite Nameserver Policy"
msgstr "覆盖 DNS 服务器查询策略" msgstr "覆盖 DNS 服务器查询策略"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:390 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:394
msgid "Overwrite Sniff By Protocol" msgid "Overwrite Sniff By Protocol"
msgstr "覆盖按协议嗅探" msgstr "覆盖按协议嗅探"
@@ -638,11 +642,11 @@ msgstr "覆盖按协议嗅探"
msgid "Password" msgid "Password"
msgstr "密码" msgstr "密码"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:569 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:574
msgid "Please go to the editor tab to edit the file for mixin" msgid "Please go to the editor tab to edit the file for mixin"
msgstr "请前往编辑器标签编辑用于混入的文件" msgstr "请前往编辑器标签编辑用于混入的文件"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:409 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:413
msgid "Port" msgid "Port"
msgstr "端口" msgstr "端口"
@@ -650,7 +654,7 @@ msgstr "端口"
msgid "Prefer" msgid "Prefer"
msgstr "优先" msgstr "优先"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:511 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:515
msgid "Process Name" msgid "Process Name"
msgstr "进程名" msgstr "进程名"
@@ -663,7 +667,7 @@ msgstr "配置文件"
msgid "Profile for Startup" msgid "Profile for Startup"
msgstr "用于启动的配置文件" msgstr "用于启动的配置文件"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:403 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:407
msgid "Protocol" msgid "Protocol"
msgstr "协议" msgstr "协议"
@@ -706,7 +710,7 @@ msgstr "重载服务"
msgid "Remote" msgid "Remote"
msgstr "远程" msgstr "远程"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:271 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:275
msgid "Respect Rules" msgid "Respect Rules"
msgstr "遵循分流规则" msgstr "遵循分流规则"
@@ -718,7 +722,7 @@ msgstr "重启服务"
msgid "Router Proxy" msgid "Router Proxy"
msgstr "路由器代理" msgstr "路由器代理"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:415 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:419
msgid "Rule Config" msgid "Rule Config"
msgstr "规则配置" msgstr "规则配置"
@@ -730,7 +734,7 @@ msgstr "规则模式"
msgid "Rule Provider:" msgid "Rule Provider:"
msgstr "规则提供者:" msgstr "规则提供者:"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:503 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:507
msgid "Rule Set" msgid "Rule Set"
msgstr "规则集" msgstr "规则集"
@@ -763,19 +767,19 @@ msgstr "滚动到底部"
msgid "Skip System IPv6 Check" msgid "Skip System IPv6 Check"
msgstr "跳过系统 IPv6 检查" msgstr "跳过系统 IPv6 检查"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:393 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:397
msgid "Sniff By Protocol" msgid "Sniff By Protocol"
msgstr "按协议嗅探" msgstr "按协议嗅探"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:370 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:374
msgid "Sniff Pure IP" msgid "Sniff Pure IP"
msgstr "嗅探纯 IP 连接" msgstr "嗅探纯 IP 连接"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:364 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:368
msgid "Sniff Redir-Host" msgid "Sniff Redir-Host"
msgstr "嗅探 Redir-Host 流量" msgstr "嗅探 Redir-Host 流量"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:356 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:360
msgid "Sniffer Config" msgid "Sniffer Config"
msgstr "嗅探器配置" msgstr "嗅探器配置"
@@ -791,7 +795,7 @@ msgstr "栈大小硬限制"
msgid "Stack Size Soft Limit" msgid "Stack Size Soft Limit"
msgstr "栈大小软限制" msgstr "栈大小软限制"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:542 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:547
msgid "Standard Loader" msgid "Standard Loader"
msgstr "标准加载器" msgstr "标准加载器"
@@ -874,9 +878,9 @@ msgstr "总量"
msgid "Transparent Proxy with Mihomo on OpenWrt." msgid "Transparent Proxy with Mihomo on OpenWrt."
msgstr "在 OpenWrt 上使用 Mihomo 进行透明代理。" msgstr "在 OpenWrt 上使用 Mihomo 进行透明代理。"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:328 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:332
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:437 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:441
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:501 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:505
msgid "Type" msgid "Type"
msgstr "类型" msgstr "类型"
@@ -945,23 +949,24 @@ msgstr "无限制"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:238 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:238
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:244 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:244
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:250 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:250
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:261 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:254
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:267 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:265
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:273 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:271
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:279 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:277
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:285 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:283
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:291 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:289
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:360 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:295
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:366 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:364
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:372 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:370
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:535 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:376
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:541 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:540
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:546 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:546
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:549 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:551
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:552 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:554
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:555 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:557
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:559 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:560
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:565 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:564
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:570
msgid "Unmodified" msgid "Unmodified"
msgstr "不修改" msgstr "不修改"
@@ -977,7 +982,7 @@ msgstr "更新时间"
msgid "Update Dashboard" msgid "Update Dashboard"
msgstr "更新面板" msgstr "更新面板"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:480 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:484
msgid "Update Interval" msgid "Update Interval"
msgstr "更新间隔" msgstr "更新间隔"
@@ -985,15 +990,15 @@ msgstr "更新间隔"
msgid "Upload Profile" msgid "Upload Profile"
msgstr "上传配置文件" msgstr "上传配置文件"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:443 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:447
msgid "Url" msgid "Url"
msgstr "下载地址" msgstr "下载地址"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:289 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:293
msgid "Use Hosts" msgid "Use Hosts"
msgstr "使用 Hosts" msgstr "使用 Hosts"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:283 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:287
msgid "Use System Hosts" msgid "Use System Hosts"
msgstr "使用系统的 Hosts" msgstr "使用系统的 Hosts"

View File

@@ -38,7 +38,7 @@ msgstr "所有埠"
msgid "Allow Lan" msgid "Allow Lan"
msgstr "允許區域網路存取" msgstr "允許區域網路存取"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:263 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:267
msgid "Allow Mode" msgid "Allow Mode"
msgstr "白名單模式" msgstr "白名單模式"
@@ -55,19 +55,19 @@ msgstr "應用程式日誌"
msgid "App Version" msgid "App Version"
msgstr "應用程式版本" msgstr "應用程式版本"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:486 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:490
msgid "Append Rule" msgid "Append Rule"
msgstr "追加規則" msgstr "追加規則"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:417 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:421
msgid "Append Rule Provider" msgid "Append Rule Provider"
msgstr "追加規則提供者" msgstr "追加規則提供者"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:473 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:477
msgid "Behavior" msgid "Behavior"
msgstr "行為" msgstr "行為"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:262 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:266
msgid "Block Mode" msgid "Block Mode"
msgstr "黑名單模式" msgstr "黑名單模式"
@@ -150,15 +150,15 @@ msgstr "DNS 模式"
msgid "Debug Log" msgid "Debug Log"
msgstr "除錯日誌" msgstr "除錯日誌"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:509 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:513
msgid "Destination IP" msgid "Destination IP"
msgstr "目標 IP" msgstr "目標 IP"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:513 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:517
msgid "Destination IP Geo" msgid "Destination IP Geo"
msgstr "目標 IP地理位置" msgstr "目標 IP地理位置"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:510 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:514
msgid "Destination Port" msgid "Destination Port"
msgstr "目標埠" msgstr "目標埠"
@@ -188,15 +188,15 @@ msgstr "直連模式"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:208 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:208
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:229 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:229
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:239 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:239
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:268 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:272
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:274 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:278
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:280 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:284
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:286 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:290
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:292 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:296
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:361 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:365
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:367 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:371
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:373 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:377
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:560 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:565
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:38 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:38
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:45 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:45
msgid "Disable" msgid "Disable"
@@ -218,32 +218,32 @@ msgstr "停用迴路檢測"
msgid "Disable TCP Keep Alive" msgid "Disable TCP Keep Alive"
msgstr "停用 TCP Keep Alive" msgstr "停用 TCP Keep Alive"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:277 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:281
msgid "DoH Prefer HTTP/3" msgid "DoH Prefer HTTP/3"
msgstr "DoH 優先使用 HTTP/3" msgstr "DoH 優先使用 HTTP/3"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:309 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:313
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:504 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:508
msgid "Domain Name" msgid "Domain Name"
msgstr "網域名稱" msgstr "網域名稱"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:512 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:516
msgid "Domain Name Geo" msgid "Domain Name Geo"
msgstr "網域名稱(地理位置)" msgstr "網域名稱(地理位置)"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:507 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:511
msgid "Domain Name Keyword" msgid "Domain Name Keyword"
msgstr "網域名稱(關鍵字)" msgstr "網域名稱(關鍵字)"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:508 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:512
msgid "Domain Name Regex" msgid "Domain Name Regex"
msgstr "網域名稱(正則表達式)" msgstr "網域名稱(正則表達式)"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:505 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:509
msgid "Domain Name Suffix" msgid "Domain Name Suffix"
msgstr "網域名稱(後綴)" msgstr "網域名稱(後綴)"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:506 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:510
msgid "Domain Name Wildcard" msgid "Domain Name Wildcard"
msgstr "網域名稱(通配符)" msgstr "網域名稱(通配符)"
@@ -255,27 +255,27 @@ msgstr "編輯身分驗證"
msgid "Edit DNS Hijacks" msgid "Edit DNS Hijacks"
msgstr "編輯 DNS 劫持" msgstr "編輯 DNS 劫持"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:255 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:259
msgid "Edit Fake-IP Filters" msgid "Edit Fake-IP Filters"
msgstr "編輯 Fake-IP 過濾清單" msgstr "編輯 Fake-IP 過濾清單"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:298 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:302
msgid "Edit Hosts" msgid "Edit Hosts"
msgstr "編輯 Hosts" msgstr "編輯 Hosts"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:340 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:344
msgid "Edit Nameserver Policies" msgid "Edit Nameserver Policies"
msgstr "編輯 DNS 伺服器查詢策略" msgstr "編輯 DNS 伺服器查詢策略"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:317 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:321
msgid "Edit Nameservers" msgid "Edit Nameservers"
msgstr "編輯 DNS 伺服器" msgstr "編輯 DNS 伺服器"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:420 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:424
msgid "Edit Rule Providers" msgid "Edit Rule Providers"
msgstr "編輯規則提供者" msgstr "編輯規則提供者"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:489 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:493
msgid "Edit Rules" msgid "Edit Rules"
msgstr "編輯規則" msgstr "編輯規則"
@@ -302,23 +302,23 @@ msgstr "編輯器"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:226 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:226
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:230 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:230
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:240 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:240
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:269 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:273
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:275 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:279
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:281 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:285
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:287 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:291
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:293 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:297
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:306 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:310
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:325 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:329
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:348 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:352
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:358
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:362 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:362
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:368 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:366
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:374 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:372
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:400 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:378
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:428 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:404
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:497 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:432
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:561 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:501
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:569 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:566
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:574
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:33 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:33
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:66 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:66
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:77 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:77
@@ -339,11 +339,11 @@ msgstr "到期時間"
msgid "External Control Config" msgid "External Control Config"
msgstr "外部控制設定" msgstr "外部控制設定"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:265 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:269
msgid "Fake-IP Cache" msgid "Fake-IP Cache"
msgstr "Fake-IP 快取" msgstr "Fake-IP 快取"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:259 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:263
msgid "Fake-IP Filter Mode" msgid "Fake-IP Filter Mode"
msgstr "Fake-IP 過濾模式" msgstr "Fake-IP 過濾模式"
@@ -355,19 +355,23 @@ msgstr "Fake-IP Ping 劫持"
msgid "Fake-IP Range" msgid "Fake-IP Range"
msgstr "Fake-IP 範圍" msgstr "Fake-IP 範圍"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:252
msgid "Fake-IP6 Range"
msgstr "Fake-IP6 範圍"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/app.js:132 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/app.js:132
msgid "Fast Reload" msgid "Fast Reload"
msgstr "快速重載" msgstr "快速重載"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:467 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:471
msgid "File Format" msgid "File Format"
msgstr "檔案格式" msgstr "檔案格式"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:461 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:465
msgid "File Path" msgid "File Path"
msgstr "檔案路徑" msgstr "檔案路徑"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:455 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:459
msgid "File Size Limit" msgid "File Size Limit"
msgstr "檔案大小限制" msgstr "檔案大小限制"
@@ -380,7 +384,7 @@ msgstr "用於混入的檔案"
msgid "File:" msgid "File:"
msgstr "檔案:" msgstr "檔案:"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:379 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:383
msgid "Force Sniff Domain Name" msgid "Force Sniff Domain Name"
msgstr "強制嗅探的網域名稱" msgstr "強制嗅探的網域名稱"
@@ -401,39 +405,39 @@ msgstr "一般設定"
msgid "Generate & Download" msgid "Generate & Download"
msgstr "生成並下載" msgstr "生成並下載"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:539 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:544
msgid "GeoData Loader" msgid "GeoData Loader"
msgstr "GeoData 載入器" msgstr "GeoData 載入器"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:533 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:538
msgid "GeoIP Format" msgid "GeoIP Format"
msgstr "GeoIP 格式" msgstr "GeoIP 格式"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:554 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:559
msgid "GeoIP(ASN) Url" msgid "GeoIP(ASN) Url"
msgstr "GeoIP(ASN) 下載網址" msgstr "GeoIP(ASN) 下載網址"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:551 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:556
msgid "GeoIP(DAT) Url" msgid "GeoIP(DAT) Url"
msgstr "GeoIP(DAT) 下載網址" msgstr "GeoIP(DAT) 下載網址"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:548 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:553
msgid "GeoIP(MMDB) Url" msgid "GeoIP(MMDB) Url"
msgstr "GeoIP(MMDB) 下載網址" msgstr "GeoIP(MMDB) 下載網址"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:545 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:550
msgid "GeoSite Url" msgid "GeoSite Url"
msgstr "GeoSite 下載網址" msgstr "GeoSite 下載網址"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:557 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:562
msgid "GeoX Auto Update" msgid "GeoX Auto Update"
msgstr "定時更新 GeoX 檔案" msgstr "定時更新 GeoX 檔案"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:531 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:536
msgid "GeoX Config" msgid "GeoX Config"
msgstr "GeoX 設定" msgstr "GeoX 設定"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:563 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:568
msgid "GeoX Update Interval" msgid "GeoX Update Interval"
msgstr "GeoX 檔案更新間隔" msgstr "GeoX 檔案更新間隔"
@@ -485,7 +489,7 @@ msgstr "IPv6 DNS 劫持"
msgid "IPv6 Proxy" msgid "IPv6 Proxy"
msgstr "IPv6 代理" msgstr "IPv6 代理"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:386 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:390
msgid "Ignore Sniff Domain Name" msgid "Ignore Sniff Domain Name"
msgstr "忽略嗅探的網域名稱" msgstr "忽略嗅探的網域名稱"
@@ -522,12 +526,12 @@ msgstr "最大傳輸單元"
msgid "Match Process" msgid "Match Process"
msgstr "匹配程序" msgstr "匹配程序"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:351 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:355
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:515 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:519
msgid "Matcher" msgid "Matcher"
msgstr "匹配器" msgstr "匹配器"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:543 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:548
msgid "Memory Conservative Loader" msgid "Memory Conservative Loader"
msgstr "為記憶體受限裝置最佳化的載入器" msgstr "為記憶體受限裝置最佳化的載入器"
@@ -539,7 +543,7 @@ msgstr "混合埠"
msgid "Mixin Config" msgid "Mixin Config"
msgstr "混入設定" msgstr "混入設定"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:567 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:572
msgid "Mixin File Content" msgid "Mixin File Content"
msgstr "混入檔案內容" msgstr "混入檔案內容"
@@ -551,12 +555,12 @@ msgstr "混入選項"
msgid "Mode" msgid "Mode"
msgstr "模式" msgstr "模式"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:434 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:438
msgid "Name" msgid "Name"
msgstr "名稱" msgstr "名稱"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:335 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:339
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:354 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:358
msgid "Nameserver" msgid "Nameserver"
msgstr "DNS 伺服器" msgstr "DNS 伺服器"
@@ -565,12 +569,12 @@ msgstr "DNS 伺服器"
msgid "Nikki" msgid "Nikki"
msgstr "Nikki" msgstr "Nikki"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:526 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:530
msgid "No Resolve" msgid "No Resolve"
msgstr "不解析" msgstr "不解析"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:448 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:452
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:519 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:523
msgid "Node" msgid "Node"
msgstr "節點" msgstr "節點"
@@ -602,35 +606,35 @@ msgstr "覆寫身分驗證"
msgid "Overwrite DNS Hijack" msgid "Overwrite DNS Hijack"
msgstr "覆寫 DNS 劫持" msgstr "覆寫 DNS 劫持"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:412 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:416
msgid "Overwrite Destination" msgid "Overwrite Destination"
msgstr "將嗅探結果作為連線目標" msgstr "將嗅探結果作為連線目標"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:252 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:256
msgid "Overwrite Fake-IP Filter" msgid "Overwrite Fake-IP Filter"
msgstr "覆寫 Fake-IP 過濾清單" msgstr "覆寫 Fake-IP 過濾清單"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:376 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:380
msgid "Overwrite Force Sniff Domain Name" msgid "Overwrite Force Sniff Domain Name"
msgstr "覆寫強制嗅探的網域名稱" msgstr "覆寫強制嗅探的網域名稱"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:295 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:299
msgid "Overwrite Hosts" msgid "Overwrite Hosts"
msgstr "覆寫 Hosts" msgstr "覆寫 Hosts"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:383 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:387
msgid "Overwrite Ignore Sniff Domain Name" msgid "Overwrite Ignore Sniff Domain Name"
msgstr "覆寫忽略嗅探的網域名稱" msgstr "覆寫忽略嗅探的網域名稱"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:314 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:318
msgid "Overwrite Nameserver" msgid "Overwrite Nameserver"
msgstr "覆寫 DNS 伺服器" msgstr "覆寫 DNS 伺服器"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:337 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:341
msgid "Overwrite Nameserver Policy" msgid "Overwrite Nameserver Policy"
msgstr "覆寫 DNS 伺服器查詢策略" msgstr "覆寫 DNS 伺服器查詢策略"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:390 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:394
msgid "Overwrite Sniff By Protocol" msgid "Overwrite Sniff By Protocol"
msgstr "覆寫按協定嗅探" msgstr "覆寫按協定嗅探"
@@ -638,11 +642,11 @@ msgstr "覆寫按協定嗅探"
msgid "Password" msgid "Password"
msgstr "密碼" msgstr "密碼"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:569 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:574
msgid "Please go to the editor tab to edit the file for mixin" msgid "Please go to the editor tab to edit the file for mixin"
msgstr "請前往編輯器標籤編輯用於混入的檔案" msgstr "請前往編輯器標籤編輯用於混入的檔案"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:409 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:413
msgid "Port" msgid "Port"
msgstr "埠" msgstr "埠"
@@ -650,7 +654,7 @@ msgstr "埠"
msgid "Prefer" msgid "Prefer"
msgstr "優先" msgstr "優先"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:511 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:515
msgid "Process Name" msgid "Process Name"
msgstr "程序名稱" msgstr "程序名稱"
@@ -663,7 +667,7 @@ msgstr "設定檔"
msgid "Profile for Startup" msgid "Profile for Startup"
msgstr "用於啟動的設定檔" msgstr "用於啟動的設定檔"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:403 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:407
msgid "Protocol" msgid "Protocol"
msgstr "協定" msgstr "協定"
@@ -706,7 +710,7 @@ msgstr "重新載入服務"
msgid "Remote" msgid "Remote"
msgstr "遠端" msgstr "遠端"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:271 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:275
msgid "Respect Rules" msgid "Respect Rules"
msgstr "遵循分流規則" msgstr "遵循分流規則"
@@ -718,7 +722,7 @@ msgstr "重新啟動服務"
msgid "Router Proxy" msgid "Router Proxy"
msgstr "路由器代理" msgstr "路由器代理"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:415 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:419
msgid "Rule Config" msgid "Rule Config"
msgstr "規則設定" msgstr "規則設定"
@@ -730,7 +734,7 @@ msgstr "規則模式"
msgid "Rule Provider:" msgid "Rule Provider:"
msgstr "規則提供者:" msgstr "規則提供者:"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:503 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:507
msgid "Rule Set" msgid "Rule Set"
msgstr "規則集" msgstr "規則集"
@@ -763,19 +767,19 @@ msgstr "捲動到底部"
msgid "Skip System IPv6 Check" msgid "Skip System IPv6 Check"
msgstr "跳過系統 IPv6 檢查" msgstr "跳過系統 IPv6 檢查"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:393 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:397
msgid "Sniff By Protocol" msgid "Sniff By Protocol"
msgstr "按協定嗅探" msgstr "按協定嗅探"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:370 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:374
msgid "Sniff Pure IP" msgid "Sniff Pure IP"
msgstr "嗅探純 IP 連線" msgstr "嗅探純 IP 連線"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:364 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:368
msgid "Sniff Redir-Host" msgid "Sniff Redir-Host"
msgstr "嗅探 Redir-Host 流量" msgstr "嗅探 Redir-Host 流量"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:356 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:360
msgid "Sniffer Config" msgid "Sniffer Config"
msgstr "嗅探器設定" msgstr "嗅探器設定"
@@ -791,7 +795,7 @@ msgstr ""
msgid "Stack Size Soft Limit" msgid "Stack Size Soft Limit"
msgstr "" msgstr ""
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:542 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:547
msgid "Standard Loader" msgid "Standard Loader"
msgstr "標準載入器" msgstr "標準載入器"
@@ -874,9 +878,9 @@ msgstr "總計"
msgid "Transparent Proxy with Mihomo on OpenWrt." msgid "Transparent Proxy with Mihomo on OpenWrt."
msgstr "在 OpenWrt 上使用 Mihomo 進行透明代理." msgstr "在 OpenWrt 上使用 Mihomo 進行透明代理."
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:328 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:332
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:437 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:441
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:501 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:505
msgid "Type" msgid "Type"
msgstr "類型" msgstr "類型"
@@ -945,23 +949,24 @@ msgstr "無限制"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:238 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:238
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:244 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:244
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:250 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:250
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:261 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:254
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:267 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:265
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:273 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:271
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:279 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:277
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:285 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:283
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:291 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:289
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:360 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:295
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:366 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:364
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:372 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:370
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:535 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:376
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:541 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:540
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:546 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:546
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:549 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:551
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:552 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:554
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:555 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:557
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:559 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:560
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:565 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:564
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:570
msgid "Unmodified" msgid "Unmodified"
msgstr "不修改" msgstr "不修改"
@@ -977,7 +982,7 @@ msgstr "更新時間"
msgid "Update Dashboard" msgid "Update Dashboard"
msgstr "更新儀表板" msgstr "更新儀表板"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:480 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:484
msgid "Update Interval" msgid "Update Interval"
msgstr "更新間隔" msgstr "更新間隔"
@@ -985,15 +990,15 @@ msgstr "更新間隔"
msgid "Upload Profile" msgid "Upload Profile"
msgstr "上傳設定檔" msgstr "上傳設定檔"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:443 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:447
msgid "Url" msgid "Url"
msgstr "下載網址" msgstr "下載網址"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:289 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:293
msgid "Use Hosts" msgid "Use Hosts"
msgstr "使用 Hosts" msgstr "使用 Hosts"
#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:283 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:287
msgid "Use System Hosts" msgid "Use System Hosts"
msgstr "使用系統的 Hosts" msgstr "使用系統的 Hosts"

View File

@@ -20,6 +20,7 @@ local port_validate = function(self, value, t)
end end
local nodes_table = {} local nodes_table = {}
local shunt_list = {}
for k, e in ipairs(api.get_valid_nodes()) do for k, e in ipairs(api.get_valid_nodes()) do
nodes_table[#nodes_table + 1] = e nodes_table[#nodes_table + 1] = e
end end
@@ -200,6 +201,9 @@ o:depends({ _tcp_node_bool = "1" })
for k, v in pairs(nodes_table) do for k, v in pairs(nodes_table) do
s.fields["tcp_node"]:value(v.id, v["remark"]) s.fields["tcp_node"]:value(v.id, v["remark"])
s.fields["udp_node"]:value(v.id, v["remark"]) s.fields["udp_node"]:value(v.id, v["remark"])
if v.protocol and v.protocol == "_shunt" then
shunt_list[#shunt_list + 1] = v
end
end end
o = s:option(DummyValue, "_udp_node_bool", "") o = s:option(DummyValue, "_udp_node_bool", "")
@@ -311,11 +315,7 @@ o.default = "0"
o:depends({ _tcp_node_bool = "1" }) o:depends({ _tcp_node_bool = "1" })
---- DNS Forward Mode ---- DNS Forward Mode
o = s:option(ListValue, "dns_mode", translate("Filter Mode"), o = s:option(ListValue, "dns_mode", translate("Filter Mode"))
"<font color='red'>" .. translate(
"If the node uses Xray/Sing-Box shunt, select the matching filter mode (Xray/Sing-Box).") ..
"</font>")
o:depends({ _tcp_node_bool = "1" })
if api.is_finded("dns2socks") then if api.is_finded("dns2socks") then
o:value("dns2socks", "dns2socks") o:value("dns2socks", "dns2socks")
end end
@@ -325,6 +325,19 @@ end
if has_xray then if has_xray then
o:value("xray", "Xray") o:value("xray", "Xray")
end end
o.remove = function(self, section)
local f = s.fields["tcp_node"]
local id_val = f and f:formvalue(section) or ""
if id_val == "" then
return m:del(section, self.option)
end
for k, v in pairs(shunt_list) do
if v.id == id_val then
local new_val = (v.type == "Xray") and "xray" or "sing-box"
return m:set(section, self.option, new_val)
end
end
end
o = s:option(ListValue, "xray_dns_mode", translate("Request protocol")) o = s:option(ListValue, "xray_dns_mode", translate("Request protocol"))
o:value("tcp", "TCP") o:value("tcp", "TCP")
@@ -437,4 +450,21 @@ o:value("direct", translate("Direct DNS"))
o.description = desc .. "</ul>" o.description = desc .. "</ul>"
o:depends({dns_shunt = "dnsmasq", tcp_proxy_mode = "proxy", chn_list = "direct"}) o:depends({dns_shunt = "dnsmasq", tcp_proxy_mode = "proxy", chn_list = "direct"})
for k, v in pairs(nodes_table) do
if v.protocol and v.protocol ~= "_shunt" then
s.fields["dns_mode"]:depends({ _tcp_node_bool = "1", tcp_node = v.id })
end
end
for k, v in pairs(shunt_list) do
if v.type == "Xray" and has_xray then
s.fields["xray_dns_mode"]:depends({ _tcp_node_bool = "1", tcp_node = v.id })
end
if v.type == "sing-box" and has_singbox then
s.fields["singbox_dns_mode"]:depends({ _tcp_node_bool = "1", tcp_node = v.id })
end
if has_xray or has_singbox then
s.fields["remote_dns_client_ip"]:depends({ tcp_node = v.id })
end
end
return m return m

View File

@@ -321,11 +321,37 @@ o:depends("direct_dns_mode", "tcp")
o = s:taboption("DNS", Flag, "filter_proxy_ipv6", translate("Filter Proxy Host IPv6"), translate("Experimental feature.")) o = s:taboption("DNS", Flag, "filter_proxy_ipv6", translate("Filter Proxy Host IPv6"), translate("Experimental feature."))
o.default = "0" o.default = "0"
-- TCP分流时dns过滤模式保存逻辑
function dns_mode_save(section)
for k, v in pairs(shunt_list) do
local f = s.fields[v.id .. "-type"]
if f then
local type_val = f:formvalue(section)
if type_val and (type_val == "Xray" or type_val == "sing-box") then
local dns_shunt_val = s.fields["dns_shunt"]:formvalue(section)
local dns_mode_val = (dns_shunt_val ~= "smartdns") and "dns_mode" or "smartdns_dns_mode"
local current_val = m:get(section, dns_mode_val) or ""
local new_val = (type_val == "Xray") and "xray" or "sing-box"
if current_val ~= new_val then
m:set(section, dns_mode_val, new_val)
m:del(section, (dns_mode_val == "dns_mode") and "smartdns_dns_mode" or "dns_mode")
end
local dns_field = s.fields[type_val == "Xray" and "xray_dns_mode" or "singbox_dns_mode"]
local v2ray_dns_mode = dns_field and dns_field:formvalue(section)
if v2ray_dns_mode and m:get(section, "v2ray_dns_mode") ~= v2ray_dns_mode then
m:set(section, "v2ray_dns_mode", v2ray_dns_mode)
end
break
end
end
end
end
---- DNS Forward Mode ---- DNS Forward Mode
o = s:taboption("DNS", ListValue, "dns_mode", translate("Filter Mode"), o = s:taboption("DNS", ListValue, "dns_mode", translate("Filter Mode"))
"<font color='red'>" .. translate(
"If the node uses Xray/Sing-Box shunt, select the matching filter mode (Xray/Sing-Box).") ..
"</font>")
o:value("udp", translatef("Requery DNS By %s", "UDP")) o:value("udp", translatef("Requery DNS By %s", "UDP"))
o:value("tcp", translatef("Requery DNS By %s", "TCP")) o:value("tcp", translatef("Requery DNS By %s", "TCP"))
if api.is_finded("dns2socks") then if api.is_finded("dns2socks") then
@@ -337,16 +363,19 @@ end
if has_xray then if has_xray then
o:value("xray", "Xray") o:value("xray", "Xray")
end end
if api.is_finded("smartdns") then o:depends({ dns_shunt = "chinadns-ng", tcp_node = "" })
o:depends({ dns_shunt = "smartdns", ['!reverse'] = true }) o:depends({ dns_shunt = "dnsmasq", tcp_node = "" })
o.remove = function(self, section)
local f = s.fields["smartdns_dns_mode"]
if f and f:formvalue(section) then
return m:del(section, self.option)
end
dns_mode_save(section)
end end
---- SmartDNS Forward Mode ---- SmartDNS Forward Mode
if api.is_finded("smartdns") then if api.is_finded("smartdns") then
o = s:taboption("DNS", ListValue, "smartdns_dns_mode", translate("Filter Mode"), o = s:taboption("DNS", ListValue, "smartdns_dns_mode", translate("Filter Mode"))
"<font color='red'>" .. translate(
"If the node uses Xray/Sing-Box shunt, select the matching filter mode (Xray/Sing-Box).") ..
"</font>")
o:value("socks", "Socks") o:value("socks", "Socks")
if has_singbox then if has_singbox then
o:value("sing-box", "Sing-Box") o:value("sing-box", "Sing-Box")
@@ -354,7 +383,14 @@ if api.is_finded("smartdns") then
if has_xray then if has_xray then
o:value("xray", "Xray") o:value("xray", "Xray")
end end
o:depends({ dns_shunt = "smartdns" }) o:depends({ dns_shunt = "smartdns", tcp_node = "" })
o.remove = function(self, section)
local f = s.fields["dns_mode"]
if f and f:formvalue(section) then
return m:del(section, self.option)
end
dns_mode_save(section)
end
o = s:taboption("DNS", DynamicList, "smartdns_remote_dns", translate("Remote DNS")) o = s:taboption("DNS", DynamicList, "smartdns_remote_dns", translate("Remote DNS"))
o:value("tcp://1.1.1.1") o:value("tcp://1.1.1.1")
@@ -399,7 +435,7 @@ if api.is_finded("smartdns") then
end end
end end
o = s:taboption("DNS", ListValue, "xray_dns_mode", translate("Request protocol")) o = s:taboption("DNS", ListValue, "xray_dns_mode", translate("Remote DNS") .. " " .. translate("Request protocol"))
o:value("tcp", "TCP") o:value("tcp", "TCP")
o:value("tcp+doh", "TCP + DoH (" .. translate("A/AAAA type") .. ")") o:value("tcp+doh", "TCP + DoH (" .. translate("A/AAAA type") .. ")")
o:depends("dns_mode", "xray") o:depends("dns_mode", "xray")
@@ -413,7 +449,7 @@ o.write = function(self, section, value)
end end
end end
o = s:taboption("DNS", ListValue, "singbox_dns_mode", translate("Request protocol")) o = s:taboption("DNS", ListValue, "singbox_dns_mode", translate("Remote DNS") .. " " .. translate("Request protocol"))
o:value("tcp", "TCP") o:value("tcp", "TCP")
o:value("doh", "DoH") o:value("doh", "DoH")
o:depends("dns_mode", "sing-box") o:depends("dns_mode", "sing-box")
@@ -738,6 +774,21 @@ for k, v in pairs(nodes_table) do
else else
s2.fields["node"]:value(v.id, v["remark"]) s2.fields["node"]:value(v.id, v["remark"])
end end
if v.protocol and v.protocol ~= "_shunt" then
s.fields["dns_mode"]:depends({ dns_shunt = "chinadns-ng", tcp_node = v.id })
s.fields["dns_mode"]:depends({ dns_shunt = "dnsmasq", tcp_node = v.id })
if api.is_finded("smartdns") then
s.fields["smartdns_dns_mode"]:depends({ dns_shunt = "smartdns", tcp_node = v.id })
end
end
end
for k, v in pairs(shunt_list) do
s.fields["xray_dns_mode"]:depends({ [v.id .. "-type"] = "Xray", tcp_node = v.id })
s.fields["singbox_dns_mode"]:depends({ [v.id .. "-type"] = "sing-box", tcp_node = v.id })
s.fields["remote_dns_client_ip"]:depends({ tcp_node = v.id })
s.fields["remote_fakedns"]:depends({ tcp_node = v.id })
end end
m:append(Template(appname .. "/global/footer")) m:append(Template(appname .. "/global/footer"))

View File

@@ -1301,6 +1301,7 @@ function gen_config(var)
end end
end end
local dns_rule_position = 1
if dns_listen_port then if dns_listen_port then
table.insert(inbounds, { table.insert(inbounds, {
listen = "127.0.0.1", listen = "127.0.0.1",
@@ -1334,16 +1335,18 @@ function gen_config(var)
}, },
outboundTag = "dns-out" outboundTag = "dns-out"
}) })
dns_rule_position = dns_rule_position + 1
end end
if COMMON.default_outbound_tag == "direct" then if COMMON.default_outbound_tag == "direct" then
if direct_dns_udp_server or direct_dns_tcp_server then if direct_dns_udp_server or direct_dns_tcp_server then
table.insert(routing.rules, { table.insert(routing.rules, dns_rule_position, {
inboundTag = { inboundTag = {
"dns-global-direct" "dns-global-direct"
}, },
outboundTag = "direct" outboundTag = "direct"
}) })
dns_rule_position = dns_rule_position + 1
end end
end end
@@ -1376,11 +1379,12 @@ function gen_config(var)
balancerTag = nil balancerTag = nil
end end
table.insert(dns.servers, dns_server) table.insert(dns.servers, dns_server)
table.insert(routing.rules, { table.insert(routing.rules, dns_rule_position, {
inboundTag = { dns_server.tag }, inboundTag = { dns_server.tag },
outboundTag = outboundTag, outboundTag = outboundTag,
balancerTag = balancerTag balancerTag = balancerTag
}) })
dns_rule_position = dns_rule_position + 1
end end
end end
end end
@@ -1394,11 +1398,12 @@ function gen_config(var)
_outboundTag = "direct" _outboundTag = "direct"
_balancerTag = nil _balancerTag = nil
end end
table.insert(routing.rules, { table.insert(routing.rules, dns_rule_position, {
inboundTag = { "dns-global" }, inboundTag = { "dns-global" },
balancerTag = _balancerTag, balancerTag = _balancerTag,
outboundTag = _outboundTag outboundTag = _outboundTag
}) })
dns_rule_position = dns_rule_position + 1
local default_rule_index = nil local default_rule_index = nil
for index, value in ipairs(routing.rules) do for index, value in ipairs(routing.rules) do

View File

@@ -127,9 +127,6 @@ msgstr "您只需要在SmartDNS配置好国内DNS分组并设置重定向或
msgid "Filter Mode" msgid "Filter Mode"
msgstr "过滤模式" msgstr "过滤模式"
msgid "If the node uses Xray/Sing-Box shunt, select the matching filter mode (Xray/Sing-Box)."
msgstr "当节点使用 Xray/Sing-Box 分流时,过滤模式需对应选择 Xray/Sing-Box 。"
msgid "A/AAAA type" msgid "A/AAAA type"
msgstr "A/AAAA 类型" msgstr "A/AAAA 类型"

View File

@@ -2147,24 +2147,6 @@ stop() {
rm -rf /tmp/lock/${CONFIG}_socks_auto_switch* rm -rf /tmp/lock/${CONFIG}_socks_auto_switch*
rm -rf /tmp/lock/${CONFIG}_lease2hosts* rm -rf /tmp/lock/${CONFIG}_lease2hosts*
echolog "清空并关闭相关程序和缓存完成。" echolog "清空并关闭相关程序和缓存完成。"
# 根据分流节点类型自动调整 DNS 过滤模式
local _tcp_node=$(config_t_get global tcp_node)
if [ -n "$_tcp_node" ]; then
local _protocol=$(config_n_get $_tcp_node protocol)
if [ "$_protocol" = "_shunt" ]; then
local _type=$(config_n_get $_tcp_node type)
local _dns_mode=$(config_t_get global dns_mode)
local _new_dns_mode
[ "$_type" = "Xray" ] && _new_dns_mode="xray"
[ "$_type" = "sing-box" ] && _new_dns_mode="sing-box"
if [ -n "$_new_dns_mode" ] && [ "$_dns_mode" != "$_new_dns_mode" ]; then
uci -q set ${CONFIG}.@global[0].dns_mode="$_new_dns_mode"
uci -q set ${CONFIG}.@global[0].v2ray_dns_mode="tcp"
uci -q commit ${CONFIG}
echolog "* 检测到 TCP 节点为 $_type 分流,强制修改 DNS 过滤模式为 $_type "
fi
fi
fi
exit 0 exit 0
} }

View File

@@ -980,17 +980,20 @@ add_firewall_rule() {
$ipt_n -I PREROUTING 1 -j PSW_DNS $ipt_n -I PREROUTING 1 -j PSW_DNS
fi fi
$ipt_m -N PSW_DIVERT
$ipt_m -A PSW_DIVERT -j MARK --set-mark 1
$ipt_m -A PSW_DIVERT -j ACCEPT
$ipt_m -N PSW_RULE $ipt_m -N PSW_RULE
$ipt_m -A PSW_RULE -j CONNMARK --restore-mark $ipt_m -A PSW_RULE -j CONNMARK --restore-mark
$ipt_m -A PSW_RULE -m mark --mark 1 -j RETURN $ipt_m -A PSW_RULE -m mark --mark 1 -j RETURN
$ipt_m -A PSW_RULE -p tcp -m tcp --syn -j MARK --set-xmark 1 $ipt_m -A PSW_RULE -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j MARK --set-xmark 1
$ipt_m -A PSW_RULE -p udp -m conntrack --ctstate NEW,RELATED -j MARK --set-xmark 1 $ipt_m -A PSW_RULE -p udp -m conntrack --ctstate NEW -j MARK --set-xmark 1
$ipt_m -A PSW_RULE -j CONNMARK --save-mark $ipt_m -A PSW_RULE -j CONNMARK --save-mark
$ipt_m -N PSW $ipt_m -N PSW
$ipt_m -A PSW $(dst $IPSET_LAN) -j RETURN $ipt_m -A PSW $(dst $IPSET_LAN) -j RETURN
$ipt_m -A PSW $(dst $IPSET_VPS) -j RETURN $ipt_m -A PSW $(dst $IPSET_VPS) -j RETURN
$ipt_m -A PSW -m conntrack --ctdir REPLY -j RETURN
[ ! -z "${WAN_IP}" ] && { [ ! -z "${WAN_IP}" ] && {
$ipt_m -A PSW $(comment "WAN_IP_RETURN") -d "${WAN_IP}" -j RETURN $ipt_m -A PSW $(comment "WAN_IP_RETURN") -d "${WAN_IP}" -j RETURN
@@ -999,11 +1002,11 @@ add_firewall_rule() {
unset WAN_IP unset WAN_IP
insert_rule_before "$ipt_m" "PREROUTING" "mwan3" "-j PSW" insert_rule_before "$ipt_m" "PREROUTING" "mwan3" "-j PSW"
insert_rule_before "$ipt_m" "PREROUTING" "PSW" "-p tcp -m socket -j PSW_DIVERT"
$ipt_m -N PSW_OUTPUT $ipt_m -N PSW_OUTPUT
$ipt_m -A PSW_OUTPUT $(dst $IPSET_LAN) -j RETURN $ipt_m -A PSW_OUTPUT $(dst $IPSET_LAN) -j RETURN
$ipt_m -A PSW_OUTPUT $(dst $IPSET_VPS) -j RETURN $ipt_m -A PSW_OUTPUT $(dst $IPSET_VPS) -j RETURN
$ipt_m -A PSW_OUTPUT -m conntrack --ctdir REPLY -j RETURN
[ -n "$IPT_APPEND_DNS" ] && { [ -n "$IPT_APPEND_DNS" ] && {
local local_dns dns_address dns_port local local_dns dns_address dns_port
@@ -1050,29 +1053,32 @@ add_firewall_rule() {
$ip6t_n -I PREROUTING 1 -j PSW_DNS $ip6t_n -I PREROUTING 1 -j PSW_DNS
fi fi
$ip6t_m -N PSW_DIVERT
$ip6t_m -A PSW_DIVERT -j MARK --set-mark 1
$ip6t_m -A PSW_DIVERT -j ACCEPT
$ip6t_m -N PSW_RULE $ip6t_m -N PSW_RULE
$ip6t_m -A PSW_RULE -j CONNMARK --restore-mark $ip6t_m -A PSW_RULE -j CONNMARK --restore-mark
$ip6t_m -A PSW_RULE -m mark --mark 1 -j RETURN $ip6t_m -A PSW_RULE -m mark --mark 1 -j RETURN
$ip6t_m -A PSW_RULE -p tcp -m tcp --syn -j MARK --set-xmark 1 $ip6t_m -A PSW_RULE -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j MARK --set-xmark 1
$ip6t_m -A PSW_RULE -p udp -m conntrack --ctstate NEW,RELATED -j MARK --set-xmark 1 $ip6t_m -A PSW_RULE -p udp -m conntrack --ctstate NEW -j MARK --set-xmark 1
$ip6t_m -A PSW_RULE -j CONNMARK --save-mark $ip6t_m -A PSW_RULE -j CONNMARK --save-mark
$ip6t_m -N PSW $ip6t_m -N PSW
$ip6t_m -A PSW $(dst $IPSET_LAN6) -j RETURN $ip6t_m -A PSW $(dst $IPSET_LAN6) -j RETURN
$ip6t_m -A PSW $(dst $IPSET_VPS6) -j RETURN $ip6t_m -A PSW $(dst $IPSET_VPS6) -j RETURN
$ip6t_m -A PSW -m conntrack --ctdir REPLY -j RETURN
WAN6_IP=$(get_wan6_ip) WAN6_IP=$(get_wan6_ip)
[ ! -z "${WAN6_IP}" ] && $ip6t_m -A PSW $(comment "WAN6_IP_RETURN") -d ${WAN6_IP} -j RETURN [ ! -z "${WAN6_IP}" ] && $ip6t_m -A PSW $(comment "WAN6_IP_RETURN") -d ${WAN6_IP} -j RETURN
unset WAN6_IP unset WAN6_IP
insert_rule_before "$ip6t_m" "PREROUTING" "mwan3" "-j PSW" insert_rule_before "$ip6t_m" "PREROUTING" "mwan3" "-j PSW"
insert_rule_before "$ip6t_m" "PREROUTING" "PSW" "-p tcp -m socket -j PSW_DIVERT"
$ip6t_m -N PSW_OUTPUT $ip6t_m -N PSW_OUTPUT
$ip6t_m -A PSW_OUTPUT -m mark --mark 0xff -j RETURN $ip6t_m -A PSW_OUTPUT -m mark --mark 0xff -j RETURN
$ip6t_m -A PSW_OUTPUT $(dst $IPSET_LAN6) -j RETURN $ip6t_m -A PSW_OUTPUT $(dst $IPSET_LAN6) -j RETURN
$ip6t_m -A PSW_OUTPUT $(dst $IPSET_VPS6) -j RETURN $ip6t_m -A PSW_OUTPUT $(dst $IPSET_VPS6) -j RETURN
$ip6t_m -A PSW_OUTPUT -m conntrack --ctdir REPLY -j RETURN
[ "${USE_BLOCK_LIST}" = "1" ] && $ip6t_m -A PSW_OUTPUT $(dst $IPSET_BLOCK6) -j DROP [ "${USE_BLOCK_LIST}" = "1" ] && $ip6t_m -A PSW_OUTPUT $(dst $IPSET_BLOCK6) -j DROP
[ "${USE_DIRECT_LIST}" = "1" ] && $ip6t_m -A PSW_OUTPUT $(dst $IPSET_WHITE6) -j RETURN [ "${USE_DIRECT_LIST}" = "1" ] && $ip6t_m -A PSW_OUTPUT $(dst $IPSET_WHITE6) -j RETURN
@@ -1309,7 +1315,7 @@ del_firewall_rule() {
$ipt -D $chain $index 2>/dev/null $ipt -D $chain $index 2>/dev/null
done done
done done
for chain in "PSW" "PSW_OUTPUT" "PSW_DNS" "PSW_RULE"; do for chain in "PSW" "PSW_OUTPUT" "PSW_DIVERT" "PSW_DNS" "PSW_RULE"; do
$ipt -F $chain 2>/dev/null $ipt -F $chain 2>/dev/null
$ipt -X $chain 2>/dev/null $ipt -X $chain 2>/dev/null
done done
@@ -1363,7 +1369,7 @@ gen_include() {
[ -z "${_ipt}" ] && return [ -z "${_ipt}" ] && return
echo "*$2" echo "*$2"
${_ipt}-save -t $2 | grep "PSW" | grep -v "\-j PSW$" | sed -e "s/^-A \(OUTPUT\|PREROUTING\)/-I \1 1/" ${_ipt}-save -t $2 | grep "PSW" | grep -v "\-j PSW$" | grep -v "mangle\-OUTPUT\-PSW" | grep -v "socket \-j PSW_DIVERT$" | sed -e "s/^-A \(OUTPUT\|PREROUTING\)/-I \1 1/"
echo 'COMMIT' echo 'COMMIT'
} }
local __ipt="" local __ipt=""
@@ -1384,6 +1390,7 @@ gen_include() {
[ -z "${is_tproxy}" ] && \$(${MY_PATH} insert_rule_after "$ipt_n" "PREROUTING" "prerouting_rule" "-p tcp -j PSW") [ -z "${is_tproxy}" ] && \$(${MY_PATH} insert_rule_after "$ipt_n" "PREROUTING" "prerouting_rule" "-p tcp -j PSW")
\$(${MY_PATH} insert_rule_before "$ipt_m" "PREROUTING" "mwan3" "-j PSW") \$(${MY_PATH} insert_rule_before "$ipt_m" "PREROUTING" "mwan3" "-j PSW")
\$(${MY_PATH} insert_rule_before "$ipt_m" "PREROUTING" "PSW" "-p tcp -m socket -j PSW_DIVERT")
WAN_IP=\$(${MY_PATH} get_wan_ip) WAN_IP=\$(${MY_PATH} get_wan_ip)
@@ -1416,6 +1423,7 @@ gen_include() {
[ "$accept_icmpv6" = "1" ] && $ip6t_n -A PREROUTING -p ipv6-icmp -j PSW [ "$accept_icmpv6" = "1" ] && $ip6t_n -A PREROUTING -p ipv6-icmp -j PSW
\$(${MY_PATH} insert_rule_before "$ip6t_m" "PREROUTING" "mwan3" "-j PSW") \$(${MY_PATH} insert_rule_before "$ip6t_m" "PREROUTING" "mwan3" "-j PSW")
\$(${MY_PATH} insert_rule_before "$ip6t_m" "PREROUTING" "PSW" "-p tcp -m socket -j PSW_DIVERT")
PR_INDEX=\$(${MY_PATH} RULE_LAST_INDEX "$ip6t_m" PSW WAN6_IP_RETURN -1) PR_INDEX=\$(${MY_PATH} RULE_LAST_INDEX "$ip6t_m" PSW WAN6_IP_RETURN -1)
if [ \$PR_INDEX -ge 0 ]; then if [ \$PR_INDEX -ge 0 ]; then

View File

@@ -986,6 +986,10 @@ add_firewall_rule() {
nft_output_chain="PSW_OUTPUT_MANGLE" nft_output_chain="PSW_OUTPUT_MANGLE"
fi fi
nft "add chain $NFTABLE_NAME PSW_DIVERT"
nft "flush chain $NFTABLE_NAME PSW_DIVERT"
nft "add rule $NFTABLE_NAME PSW_DIVERT meta l4proto tcp socket transparent 1 mark set 1 counter accept"
nft "add chain $NFTABLE_NAME PSW_DNS" nft "add chain $NFTABLE_NAME PSW_DNS"
nft "flush chain $NFTABLE_NAME PSW_DNS" nft "flush chain $NFTABLE_NAME PSW_DNS"
if [ $(config_t_get global dns_redirect "1") = "0" ]; then if [ $(config_t_get global dns_redirect "1") = "0" ]; then
@@ -1001,8 +1005,8 @@ add_firewall_rule() {
nft "flush chain $NFTABLE_NAME PSW_RULE" nft "flush chain $NFTABLE_NAME PSW_RULE"
nft "add rule $NFTABLE_NAME PSW_RULE meta mark set ct mark counter" nft "add rule $NFTABLE_NAME PSW_RULE meta mark set ct mark counter"
nft "add rule $NFTABLE_NAME PSW_RULE meta mark 1 counter return" nft "add rule $NFTABLE_NAME PSW_RULE meta mark 1 counter return"
nft "add rule $NFTABLE_NAME PSW_RULE tcp flags syn meta mark set mark and 0x0 xor 0x1 counter" nft "add rule $NFTABLE_NAME PSW_RULE tcp flags &(fin|syn|rst|ack) == syn meta mark set mark and 0x0 xor 0x1 counter"
nft "add rule $NFTABLE_NAME PSW_RULE meta l4proto udp ct state new,related meta mark set mark and 0x0 xor 0x1 counter" nft "add rule $NFTABLE_NAME PSW_RULE meta l4proto udp ct state new meta mark set mark and 0x0 xor 0x1 counter"
nft "add rule $NFTABLE_NAME PSW_RULE ct mark set mark counter" nft "add rule $NFTABLE_NAME PSW_RULE ct mark set mark counter"
#ipv4 tproxy mode and udp #ipv4 tproxy mode and udp
@@ -1010,13 +1014,11 @@ add_firewall_rule() {
nft "flush chain $NFTABLE_NAME PSW_MANGLE" nft "flush chain $NFTABLE_NAME PSW_MANGLE"
nft "add rule $NFTABLE_NAME PSW_MANGLE ip daddr @$NFTSET_LAN counter return" nft "add rule $NFTABLE_NAME PSW_MANGLE ip daddr @$NFTSET_LAN counter return"
nft "add rule $NFTABLE_NAME PSW_MANGLE ip daddr @$NFTSET_VPS counter return" nft "add rule $NFTABLE_NAME PSW_MANGLE ip daddr @$NFTSET_VPS counter return"
nft "add rule $NFTABLE_NAME PSW_MANGLE ct direction reply counter return"
nft "add chain $NFTABLE_NAME PSW_OUTPUT_MANGLE" nft "add chain $NFTABLE_NAME PSW_OUTPUT_MANGLE"
nft "flush chain $NFTABLE_NAME PSW_OUTPUT_MANGLE" nft "flush chain $NFTABLE_NAME PSW_OUTPUT_MANGLE"
nft "add rule $NFTABLE_NAME PSW_OUTPUT_MANGLE ip daddr @$NFTSET_LAN counter return" nft "add rule $NFTABLE_NAME PSW_OUTPUT_MANGLE ip daddr @$NFTSET_LAN counter return"
nft "add rule $NFTABLE_NAME PSW_OUTPUT_MANGLE ip daddr @$NFTSET_VPS counter return" nft "add rule $NFTABLE_NAME PSW_OUTPUT_MANGLE ip daddr @$NFTSET_VPS counter return"
nft "add rule $NFTABLE_NAME PSW_OUTPUT_MANGLE ct direction reply counter return"
[ "${USE_BLOCK_LIST}" = "1" ] && nft "add rule $NFTABLE_NAME PSW_OUTPUT_MANGLE ip daddr @$NFTSET_BLOCK counter drop" [ "${USE_BLOCK_LIST}" = "1" ] && nft "add rule $NFTABLE_NAME PSW_OUTPUT_MANGLE ip daddr @$NFTSET_BLOCK counter drop"
[ "${USE_DIRECT_LIST}" = "1" ] && nft "add rule $NFTABLE_NAME PSW_OUTPUT_MANGLE ip daddr @$NFTSET_WHITE counter return" [ "${USE_DIRECT_LIST}" = "1" ] && nft "add rule $NFTABLE_NAME PSW_OUTPUT_MANGLE ip daddr @$NFTSET_WHITE counter return"
@@ -1025,6 +1027,7 @@ add_firewall_rule() {
# jump chains # jump chains
nft "add rule $NFTABLE_NAME mangle_prerouting ip protocol udp counter jump PSW_MANGLE" nft "add rule $NFTABLE_NAME mangle_prerouting ip protocol udp counter jump PSW_MANGLE"
[ -n "${is_tproxy}" ] && nft "add rule $NFTABLE_NAME mangle_prerouting ip protocol tcp counter jump PSW_MANGLE" [ -n "${is_tproxy}" ] && nft "add rule $NFTABLE_NAME mangle_prerouting ip protocol tcp counter jump PSW_MANGLE"
insert_rule_before "$NFTABLE_NAME" "mangle_prerouting" "PSW_MANGLE" "counter jump PSW_DIVERT"
#ipv4 tcp redirect mode #ipv4 tcp redirect mode
[ -z "${is_tproxy}" ] && { [ -z "${is_tproxy}" ] && {
@@ -1075,13 +1078,11 @@ add_firewall_rule() {
nft "flush chain $NFTABLE_NAME PSW_MANGLE_V6" nft "flush chain $NFTABLE_NAME PSW_MANGLE_V6"
nft "add rule $NFTABLE_NAME PSW_MANGLE_V6 ip6 daddr @$NFTSET_LAN6 counter return" nft "add rule $NFTABLE_NAME PSW_MANGLE_V6 ip6 daddr @$NFTSET_LAN6 counter return"
nft "add rule $NFTABLE_NAME PSW_MANGLE_V6 ip6 daddr @$NFTSET_VPS6 counter return" nft "add rule $NFTABLE_NAME PSW_MANGLE_V6 ip6 daddr @$NFTSET_VPS6 counter return"
nft "add rule $NFTABLE_NAME PSW_MANGLE_V6 ct direction reply counter return"
nft "add chain $NFTABLE_NAME PSW_OUTPUT_MANGLE_V6" nft "add chain $NFTABLE_NAME PSW_OUTPUT_MANGLE_V6"
nft "flush chain $NFTABLE_NAME PSW_OUTPUT_MANGLE_V6" nft "flush chain $NFTABLE_NAME PSW_OUTPUT_MANGLE_V6"
nft "add rule $NFTABLE_NAME PSW_OUTPUT_MANGLE_V6 ip6 daddr @$NFTSET_LAN6 counter return" nft "add rule $NFTABLE_NAME PSW_OUTPUT_MANGLE_V6 ip6 daddr @$NFTSET_LAN6 counter return"
nft "add rule $NFTABLE_NAME PSW_OUTPUT_MANGLE_V6 ip6 daddr @$NFTSET_VPS6 counter return" nft "add rule $NFTABLE_NAME PSW_OUTPUT_MANGLE_V6 ip6 daddr @$NFTSET_VPS6 counter return"
nft "add rule $NFTABLE_NAME PSW_OUTPUT_MANGLE_V6 ct direction reply counter return"
[ "${USE_BLOCK_LIST}" = "1" ] && nft "add rule $NFTABLE_NAME PSW_OUTPUT_MANGLE_V6 ip6 daddr @$NFTSET_BLOCK6 counter drop" [ "${USE_BLOCK_LIST}" = "1" ] && nft "add rule $NFTABLE_NAME PSW_OUTPUT_MANGLE_V6 ip6 daddr @$NFTSET_BLOCK6 counter drop"
[ "${USE_DIRECT_LIST}" = "1" ] && nft "add rule $NFTABLE_NAME PSW_OUTPUT_MANGLE_V6 ip6 daddr @$NFTSET_WHITE6 counter return" [ "${USE_DIRECT_LIST}" = "1" ] && nft "add rule $NFTABLE_NAME PSW_OUTPUT_MANGLE_V6 ip6 daddr @$NFTSET_WHITE6 counter return"
nft "add rule $NFTABLE_NAME PSW_OUTPUT_MANGLE_V6 meta mark 0xff counter return" nft "add rule $NFTABLE_NAME PSW_OUTPUT_MANGLE_V6 meta mark 0xff counter return"
@@ -1397,7 +1398,7 @@ gen_include() {
local __nft=" " local __nft=" "
__nft=$(cat <<- EOF __nft=$(cat <<- EOF
[ -z "\$(nft list chain $NFTABLE_NAME mangle_prerouting | grep PSW)" ] && nft -f ${nft_chain_file} [ -z "\$(nft list chain $NFTABLE_NAME mangle_prerouting | grep PSW_DIVERT)" ] && nft -f ${nft_chain_file}
[ -z "${is_tproxy}" ] && { [ -z "${is_tproxy}" ] && {
PR_INDEX=\$(sh ${MY_PATH} RULE_LAST_INDEX "$NFTABLE_NAME" PSW_NAT WAN_IP_RETURN -1) PR_INDEX=\$(sh ${MY_PATH} RULE_LAST_INDEX "$NFTABLE_NAME" PSW_NAT WAN_IP_RETURN -1)
if [ \$PR_INDEX -ge 0 ]; then if [ \$PR_INDEX -ge 0 ]; then

View File

@@ -1,15 +1,15 @@
include $(TOPDIR)/rules.mk include $(TOPDIR)/rules.mk
PKG_NAME:=nikki PKG_NAME:=nikki
PKG_VERSION:=2025.10.15 PKG_VERSION:=2025.11.09
PKG_RELEASE:=1 PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION) PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
PKG_SOURCE_PROTO:=git PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://github.com/MetaCubeX/mihomo.git PKG_SOURCE_URL:=https://github.com/MetaCubeX/mihomo.git
PKG_SOURCE_VERSION:=v1.19.15 PKG_SOURCE_VERSION:=v1.19.16
PKG_MIRROR_HASH:=08f97911a7c601eb366c5ab29a7e7ce1f888601d22ed7f357c8732b10a4ec3e2 PKG_MIRROR_HASH:=35893f8458d21fac840b150d94b8c60e3ce3a50769e196cbcf197f23a070c076
PKG_LICENSE:=GPL3.0+ PKG_LICENSE:=GPL3.0+
PKG_MAINTAINER:=Joseph Mory <morytyann@gmail.com> PKG_MAINTAINER:=Joseph Mory <morytyann@gmail.com>

View File

@@ -140,12 +140,6 @@ uci show nikki | grep -o -E 'nikki\.@router_access_control\[[[:digit:]]+\]=route
done done
done done
# since v1.23.2
env_disable_safe_path_check=$(uci -q get nikki.env.disable_safe_path_check); [ -n "$env_disable_safe_path_check" ] && uci del nikki.env.disable_safe_path_check
env_skip_system_ipv6_check=$(uci -q get nikki.env.skip_system_ipv6_check); [ -z "$env_skip_system_ipv6_check" ] && uci set nikki.env.skip_system_ipv6_check=0
# since v1.23.3 # since v1.23.3
uci show nikki | grep -o -E 'nikki\.@router_access_control\[[[:digit:]]+\]=router_access_control' | cut -d '=' -f 1 | while read -r router_access_control; do uci show nikki | grep -o -E 'nikki\.@router_access_control\[[[:digit:]]+\]=router_access_control' | cut -d '=' -f 1 | while read -r router_access_control; do

View File

@@ -26,6 +26,7 @@
let dns_listen; let dns_listen;
let dns_port; let dns_port;
let fake_ip_range; let fake_ip_range;
let fake_ip6_range;
if (profile['dns']) { if (profile['dns']) {
dns_listen = profile['dns']['listen']; dns_listen = profile['dns']['listen'];
const dns_listen_rindex = rindex(dns_listen, ':'); const dns_listen_rindex = rindex(dns_listen, ':');
@@ -33,6 +34,7 @@
dns_port = substr(dns_listen, dns_listen_rindex + 1); dns_port = substr(dns_listen, dns_listen_rindex + 1);
} }
fake_ip_range = profile['dns']['fake-ip-range']; fake_ip_range = profile['dns']['fake-ip-range'];
fake_ip6_range = profile['dns']['fake-ip-range6'];
} }
let tun_device; let tun_device;
@@ -445,20 +447,23 @@ table inet nikki {
{% if (tcp_mode == 'redirect'): %} {% if (tcp_mode == 'redirect'): %}
fib daddr type { local, broadcast, anycast, multicast } counter return fib daddr type { local, broadcast, anycast, multicast } counter return
ct direction reply counter return ct direction reply counter return
ip daddr @reserved_ip counter return ip daddr @reserved_ip {% if (fake_ip_range): %} ip daddr != {{ fake_ip_range }} {% endif %} counter return
ip6 daddr @reserved_ip6 counter return ip6 daddr @reserved_ip6 {% if (fake_ip6_range): %} ip6 daddr != {{ fake_ip6_range }} {% endif %} counter return
ip daddr @china_ip counter return ip daddr @china_ip counter return
ip6 daddr @china_ip6 counter return ip6 daddr @china_ip6 counter return
meta nfproto ipv4 meta l4proto . th dport != @proxy_dport {% if (fake_ip_range): %} ip daddr != {{ fake_ip_range }} {% endif %} counter return meta nfproto ipv4 meta l4proto . th dport != @proxy_dport {% if (fake_ip_range): %} ip daddr != {{ fake_ip_range }} {% endif %} counter return
meta nfproto ipv6 meta l4proto . th dport != @proxy_dport counter return meta nfproto ipv6 meta l4proto . th dport != @proxy_dport {% if (fake_ip6_range): %} ip6 daddr != {{ fake_ip6_range }} {% endif %} counter return
meta l4proto { tcp, udp } ip dscp @bypass_dscp {% if (fake_ip_range): %} ip daddr != {{ fake_ip_range }} {% endif %} counter return meta l4proto { tcp, udp } ip dscp @bypass_dscp {% if (fake_ip_range): %} ip daddr != {{ fake_ip_range }} {% endif %} counter return
meta l4proto { tcp, udp } ip6 dscp @bypass_dscp counter return meta l4proto { tcp, udp } ip6 dscp @bypass_dscp {% if (fake_ip6_range): %} ip6 daddr != {{ fake_ip6_range }} {% endif %} counter return
meta nfproto @proxy_nfproto jump router_redirect meta nfproto @proxy_nfproto jump router_redirect
{% endif %} {% endif %}
{% if (fake_ip_ping_hijack): %} {% if (fake_ip_ping_hijack): %}
{% if (fake_ip_range ): %} {% if (fake_ip_range ): %}
icmp type echo-request ip daddr {{ fake_ip_range }} counter redirect icmp type echo-request ip daddr {{ fake_ip_range }} counter redirect
{% endif %} {% endif %}
{% if (fake_ip6_range ): %}
icmpv6 type echo-request ip6 daddr {{ fake_ip6_range }} counter redirect
{% endif %}
{% endif %} {% endif %}
} }
@@ -471,14 +476,14 @@ table inet nikki {
{% endif %} {% endif %}
fib daddr type { local, broadcast, anycast, multicast } counter return fib daddr type { local, broadcast, anycast, multicast } counter return
ct direction reply counter return ct direction reply counter return
ip daddr @reserved_ip counter return ip daddr @reserved_ip {% if (fake_ip_range): %} ip daddr != {{ fake_ip_range }} {% endif %} counter return
ip6 daddr @reserved_ip6 counter return ip6 daddr @reserved_ip6 {% if (fake_ip6_range): %} ip6 daddr != {{ fake_ip6_range }} {% endif %} counter return
ip daddr @china_ip counter return ip daddr @china_ip counter return
ip6 daddr @china_ip6 counter return ip6 daddr @china_ip6 counter return
meta nfproto ipv4 meta l4proto . th dport != @proxy_dport {% if (fake_ip_range): %} ip daddr != {{ fake_ip_range }} {% endif %} counter return meta nfproto ipv4 meta l4proto . th dport != @proxy_dport {% if (fake_ip_range): %} ip daddr != {{ fake_ip_range }} {% endif %} counter return
meta nfproto ipv6 meta l4proto . th dport != @proxy_dport counter return meta nfproto ipv6 meta l4proto . th dport != @proxy_dport {% if (fake_ip6_range): %} ip6 daddr != {{ fake_ip6_range }} {% endif %} counter return
meta l4proto { tcp, udp } ip dscp @bypass_dscp {% if (fake_ip_range): %} ip daddr != {{ fake_ip_range }} {% endif %} counter return meta l4proto { tcp, udp } ip dscp @bypass_dscp {% if (fake_ip_range): %} ip daddr != {{ fake_ip_range }} {% endif %} counter return
meta l4proto { tcp, udp } ip6 dscp @bypass_dscp counter return meta l4proto { tcp, udp } ip6 dscp @bypass_dscp {% if (fake_ip6_range): %} ip6 daddr != {{ fake_ip6_range }} {% endif %} counter return
{% if (length(dns_hijack_nfproto) > 0): %} {% if (length(dns_hijack_nfproto) > 0): %}
meta nfproto @dns_hijack_nfproto meta l4proto { tcp, udp } th dport 53 counter return meta nfproto @dns_hijack_nfproto meta l4proto { tcp, udp } th dport 53 counter return
{% endif %} {% endif %}
@@ -514,20 +519,23 @@ table inet nikki {
{% if (tcp_mode == 'redirect'): %} {% if (tcp_mode == 'redirect'): %}
fib daddr type { local, broadcast, anycast, multicast } counter return fib daddr type { local, broadcast, anycast, multicast } counter return
ct direction reply counter return ct direction reply counter return
ip daddr @reserved_ip counter return ip daddr @reserved_ip {% if (fake_ip_range): %} ip daddr != {{ fake_ip_range }} {% endif %} counter return
ip6 daddr @reserved_ip6 counter return ip6 daddr @reserved_ip6 {% if (fake_ip6_range): %} ip6 daddr != {{ fake_ip6_range }} {% endif %} counter return
ip daddr @china_ip counter return ip daddr @china_ip counter return
ip6 daddr @china_ip6 counter return ip6 daddr @china_ip6 counter return
meta nfproto ipv4 meta l4proto . th dport != @proxy_dport {% if (fake_ip_range): %} ip daddr != {{ fake_ip_range }} {% endif %} counter return meta nfproto ipv4 meta l4proto . th dport != @proxy_dport {% if (fake_ip_range): %} ip daddr != {{ fake_ip_range }} {% endif %} counter return
meta nfproto ipv6 meta l4proto . th dport != @proxy_dport counter return meta nfproto ipv6 meta l4proto . th dport != @proxy_dport {% if (fake_ip6_range): %} ip6 daddr != {{ fake_ip6_range }} {% endif %} counter return
meta l4proto { tcp, udp } ip dscp @bypass_dscp {% if (fake_ip_range): %} ip daddr != {{ fake_ip_range }} {% endif %} counter return meta l4proto { tcp, udp } ip dscp @bypass_dscp {% if (fake_ip_range): %} ip daddr != {{ fake_ip_range }} {% endif %} counter return
meta l4proto { tcp, udp } ip6 dscp @bypass_dscp counter return meta l4proto { tcp, udp } ip6 dscp @bypass_dscp {% if (fake_ip6_range): %} ip6 daddr != {{ fake_ip6_range }} {% endif %} counter return
iifname @lan_inbound_device meta nfproto @proxy_nfproto jump lan_redirect iifname @lan_inbound_device meta nfproto @proxy_nfproto jump lan_redirect
{% endif %} {% endif %}
{% if (fake_ip_ping_hijack): %} {% if (fake_ip_ping_hijack): %}
{% if (fake_ip_range): %} {% if (fake_ip_range): %}
icmp type echo-request ip daddr {{ fake_ip_range }} counter redirect icmp type echo-request ip daddr {{ fake_ip_range }} counter redirect
{% endif %} {% endif %}
{% if (fake_ip6_range ): %}
icmpv6 type echo-request ip6 daddr {{ fake_ip6_range }} counter redirect
{% endif %}
{% endif %} {% endif %}
} }
@@ -535,14 +543,14 @@ table inet nikki {
type filter hook prerouting priority mangle; policy accept; type filter hook prerouting priority mangle; policy accept;
fib daddr type { local, broadcast, anycast, multicast } counter return fib daddr type { local, broadcast, anycast, multicast } counter return
ct direction reply counter return ct direction reply counter return
ip daddr @reserved_ip counter return ip daddr @reserved_ip {% if (fake_ip_range): %} ip daddr != {{ fake_ip_range }} {% endif %} counter return
ip6 daddr @reserved_ip6 counter return ip6 daddr @reserved_ip6 {% if (fake_ip6_range): %} ip6 daddr != {{ fake_ip6_range }} {% endif %} counter return
ip daddr @china_ip counter return ip daddr @china_ip counter return
ip6 daddr @china_ip6 counter return ip6 daddr @china_ip6 counter return
meta nfproto ipv4 meta l4proto . th dport != @proxy_dport {% if (fake_ip_range): %} ip daddr != {{ fake_ip_range }} {% endif %} counter return meta nfproto ipv4 meta l4proto . th dport != @proxy_dport {% if (fake_ip_range): %} ip daddr != {{ fake_ip_range }} {% endif %} counter return
meta nfproto ipv6 meta l4proto . th dport != @proxy_dport counter return meta nfproto ipv6 meta l4proto . th dport != @proxy_dport {% if (fake_ip6_range): %} ip6 daddr != {{ fake_ip6_range }} {% endif %} counter return
meta l4proto { tcp, udp } ip dscp @bypass_dscp {% if (fake_ip_range): %} ip daddr != {{ fake_ip_range }} {% endif %} counter return meta l4proto { tcp, udp } ip dscp @bypass_dscp {% if (fake_ip_range): %} ip daddr != {{ fake_ip_range }} {% endif %} counter return
meta l4proto { tcp, udp } ip6 dscp @bypass_dscp counter return meta l4proto { tcp, udp } ip6 dscp @bypass_dscp {% if (fake_ip6_range): %} ip6 daddr != {{ fake_ip6_range }} {% endif %} counter return
{% if (length(dns_hijack_nfproto) > 0): %} {% if (length(dns_hijack_nfproto) > 0): %}
meta nfproto @dns_hijack_nfproto meta l4proto { tcp, udp } th dport 53 counter return meta nfproto @dns_hijack_nfproto meta l4proto { tcp, udp } th dport 53 counter return
{% endif %} {% endif %}

View File

@@ -72,6 +72,7 @@ config['dns']['listen'] = uci.get('nikki', 'mixin', 'dns_listen');
config['dns']['ipv6'] = uci_bool(uci.get('nikki', 'mixin', 'dns_ipv6')); config['dns']['ipv6'] = uci_bool(uci.get('nikki', 'mixin', 'dns_ipv6'));
config['dns']['enhanced-mode'] = uci.get('nikki', 'mixin', 'dns_mode'); config['dns']['enhanced-mode'] = uci.get('nikki', 'mixin', 'dns_mode');
config['dns']['fake-ip-range'] = uci.get('nikki', 'mixin', 'fake_ip_range'); config['dns']['fake-ip-range'] = uci.get('nikki', 'mixin', 'fake_ip_range');
config['dns']['fake-ip-range6'] = uci.get('nikki', 'mixin', 'fake_ip6_range');
if (uci_bool(uci.get('nikki', 'mixin', 'fake_ip_filter'))) { if (uci_bool(uci.get('nikki', 'mixin', 'fake_ip_filter'))) {
config['dns']['fake-ip-filter'] = uci_array(uci.get('nikki', 'mixin', 'fake_ip_filters')); config['dns']['fake-ip-filter'] = uci_array(uci.get('nikki', 'mixin', 'fake_ip_filters'));
} }

View File

@@ -1,7 +1,7 @@
include $(TOPDIR)/rules.mk include $(TOPDIR)/rules.mk
PKG_NAME:=bandix PKG_NAME:=bandix
PKG_VERSION:=0.6.1 PKG_VERSION:=0.8.1
PKG_RELEASE:=1 PKG_RELEASE:=1
PKG_LICENSE:=Apache-2.0 PKG_LICENSE:=Apache-2.0
@@ -13,7 +13,7 @@ include $(INCLUDE_DIR)/package.mk
include $(TOPDIR)/feeds/packages/lang/rust/rust-values.mk include $(TOPDIR)/feeds/packages/lang/rust/rust-values.mk
# 二进制文件的文件名和URL # 二进制文件的文件名和URL
RUST_BANDIX_VERSION:=0.6.1 RUST_BANDIX_VERSION:=0.8.1
RUST_BINARY_FILENAME:=bandix-$(RUST_BANDIX_VERSION)-$(RUSTC_TARGET_ARCH).tar.gz RUST_BINARY_FILENAME:=bandix-$(RUST_BANDIX_VERSION)-$(RUSTC_TARGET_ARCH).tar.gz

View File

@@ -20,3 +20,8 @@ config bandix 'traffic'
config bandix 'connections' config bandix 'connections'
option enabled '0' option enabled '0'
config bandix 'dns'
option enabled '0'
option dns_max_records '10000'

View File

@@ -21,6 +21,8 @@ start_service() {
local traffic_flush_interval_seconds local traffic_flush_interval_seconds
local traffic_persist_history local traffic_persist_history
local connections_enabled local connections_enabled
local dns_enabled
local dns_max_records
config_load 'bandix' config_load 'bandix'
config_get iface 'general' 'iface' config_get iface 'general' 'iface'
@@ -31,8 +33,10 @@ start_service() {
config_get traffic_flush_interval_seconds 'traffic' 'traffic_flush_interval_seconds' config_get traffic_flush_interval_seconds 'traffic' 'traffic_flush_interval_seconds'
config_get_bool traffic_persist_history 'traffic' 'traffic_persist_history' config_get_bool traffic_persist_history 'traffic' 'traffic_persist_history'
config_get_bool connections_enabled 'connections' 'enabled' config_get_bool connections_enabled 'connections' 'enabled'
config_get_bool dns_enabled 'dns' 'enabled'
config_get dns_max_records 'dns' 'dns_max_records'
[ "$connections_enabled" != 1 ] && [ "$traffic_enabled" != 1 ] && return 1 [ "$connections_enabled" != 1 ] && [ "$traffic_enabled" != 1 ] && [ "$dns_enabled" != 1 ] && return 1
# 构建基础命令行参数 # 构建基础命令行参数
local args="--iface $iface --port $port --data-dir $data_dir" local args="--iface $iface --port $port --data-dir $data_dir"
@@ -56,6 +60,14 @@ start_service() {
args="$args --enable-connection" args="$args --enable-connection"
fi fi
# 添加 DNS 监控参数
if [ "$dns_enabled" -eq 1 ]; then
args="$args --enable-dns"
fi
if [ -n "$dns_max_records" ]; then
args="$args --dns-max-records $dns_max_records"
fi
procd_open_instance bandix procd_open_instance bandix
procd_set_param command $PROG $args procd_set_param command $PROG $args
procd_set_param respawn ${respawn_threshold:-3600} ${respawn_timeout:-5} ${respawn_retry:-5} procd_set_param respawn ${respawn_threshold:-3600} ${respawn_timeout:-5} ${respawn_retry:-5}