mirror of
https://github.com/itdoginfo/podkop.git
synced 2026-05-14 16:57:58 +03:00
Compare commits
55 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
41e696c9b2 | ||
|
|
835b455915 | ||
|
|
6089ef4c9b | ||
|
|
617e9a93bc | ||
|
|
6d9aedd236 | ||
|
|
fc9cf79221 | ||
|
|
2184c0c7d4 | ||
|
|
03736c613b | ||
|
|
c37ea6a4d3 | ||
|
|
a0869da4a5 | ||
|
|
23ac3a8d12 | ||
|
|
d8bd87a7da | ||
|
|
b93403c3e3 | ||
|
|
5629425853 | ||
|
|
8b2abc0b28 | ||
|
|
21085f3ac3 | ||
|
|
9a015bbde4 | ||
|
|
a7b6c36dfb | ||
|
|
f39e2d9ca9 | ||
|
|
00594f23fd | ||
|
|
0379cf5966 | ||
|
|
cfee6cec9a | ||
|
|
ad760a78bf | ||
|
|
d854caa4cc | ||
|
|
b44274d7f2 | ||
|
|
12d8537d90 | ||
|
|
8e18426a53 | ||
|
|
41a4f67fd0 | ||
|
|
c30160d8d3 | ||
|
|
42f75c3374 | ||
|
|
2cce383b33 | ||
|
|
81963bfbdf | ||
|
|
f3d2fa5a52 | ||
|
|
474f4b197f | ||
|
|
6083009c80 | ||
|
|
0672c55188 | ||
|
|
e14a7e7dd1 | ||
|
|
3f7e7cbc4b | ||
|
|
782f08b71b | ||
|
|
a40240bb3f | ||
|
|
1e9a7bffa4 | ||
|
|
4448c09c34 | ||
|
|
af95c0dcd0 | ||
|
|
d2fbff17bf | ||
|
|
a73def1f9a | ||
|
|
9976065696 | ||
|
|
aa8f2cef41 | ||
|
|
96f6def701 | ||
|
|
0152f073b7 | ||
|
|
06ce944e1c | ||
|
|
64369a93b0 | ||
|
|
53a3c943f0 | ||
|
|
7c7e1c6244 | ||
|
|
7fc1f39dd6 | ||
|
|
1c4285dfa8 |
@@ -1,4 +1,4 @@
|
||||
FROM itdoginfo/openwrt-sdk-apk:09102025
|
||||
FROM itdoginfo/openwrt-sdk-apk:25.12.3
|
||||
|
||||
ARG PODKOP_VERSION
|
||||
ENV PODKOP_VERSION=${PODKOP_VERSION}
|
||||
@@ -7,5 +7,5 @@ COPY ./podkop /builder/package/feeds/utilities/podkop
|
||||
COPY ./luci-app-podkop /builder/package/feeds/luci/luci-app-podkop
|
||||
|
||||
RUN make defconfig && \
|
||||
make package/podkop/compile -j1 V=s && \
|
||||
make package/luci-app-podkop/compile -j1 V=s
|
||||
make package/podkop/compile -j4 V=s && \
|
||||
make package/luci-app-podkop/compile -j4 V=s
|
||||
@@ -1,4 +1,4 @@
|
||||
FROM itdoginfo/openwrt-sdk-ipk:24.10.3
|
||||
FROM itdoginfo/openwrt-sdk-ipk:24.10.6
|
||||
|
||||
ARG PODKOP_VERSION
|
||||
|
||||
|
||||
@@ -45,7 +45,7 @@ wget -O /etc/config/podkop https://raw.githubusercontent.com/itdoginfo/podkop/re
|
||||
# ToDo
|
||||
|
||||
> [!IMPORTANT]
|
||||
> PR принимаются только по issues, у которых стоит label "enhancement". Либо по согласованию с авторами в ТГ-чате. Остальные PR на данный момент не рассматриваются.
|
||||
> PR принимаются только по согласованию с авторами в ТГ-чате. Остальные PR на данный момент не рассматриваются. Не тратьте зря своё время.
|
||||
|
||||
## Будущее
|
||||
- [ ] [Подписка](https://github.com/itdoginfo/podkop/issues/118). Здесь нужна реализация, чтоб для каждой секции помимо ручного выбора, был выбор фильтрации по тегу. Например, для main выбираем ключевые слова NL, DE, FI. А для extra секции фильтруем по RU. И создаётся outbound c urltest в которых перечислены outbound из фильтров.
|
||||
|
||||
@@ -52,21 +52,21 @@
|
||||
"call": "Applicable for SOCKS and Shadowsocks proxy",
|
||||
"key": "Applicable for SOCKS and Shadowsocks proxy",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:175"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:199"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "At least one valid domain must be specified. Comments-only content is not allowed.",
|
||||
"key": "At least one valid domain must be specified. Comments-only content is not allowed.",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:420"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:444"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "At least one valid subnet or IP must be specified. Comments-only content is not allowed.",
|
||||
"key": "At least one valid subnet or IP must be specified. Comments-only content is not allowed.",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:501"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:525"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -178,7 +178,7 @@
|
||||
"call": "Community Lists",
|
||||
"key": "Community Lists",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:275"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:299"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -199,7 +199,7 @@
|
||||
"call": "Configuration Type",
|
||||
"key": "Configuration Type",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:22"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:23"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -213,7 +213,7 @@
|
||||
"call": "Connection URL",
|
||||
"key": "Connection URL",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:25"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:26"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -297,8 +297,8 @@
|
||||
"call": "Disabled",
|
||||
"key": "Disabled",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:366",
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:446"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:390",
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:470"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -312,7 +312,7 @@
|
||||
"call": "DNS over HTTPS (DoH)",
|
||||
"key": "DNS over HTTPS (DoH)",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:243",
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:267",
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:15"
|
||||
]
|
||||
},
|
||||
@@ -320,7 +320,7 @@
|
||||
"call": "DNS over TLS (DoT)",
|
||||
"key": "DNS over TLS (DoT)",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:244",
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:268",
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:16"
|
||||
]
|
||||
},
|
||||
@@ -328,7 +328,7 @@
|
||||
"call": "DNS Protocol Type",
|
||||
"key": "DNS Protocol Type",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:240",
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:264",
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:12"
|
||||
]
|
||||
},
|
||||
@@ -343,7 +343,7 @@
|
||||
"call": "DNS Server",
|
||||
"key": "DNS Server",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:253",
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:277",
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:24"
|
||||
]
|
||||
},
|
||||
@@ -365,7 +365,7 @@
|
||||
"call": "Domain Resolver",
|
||||
"key": "Domain Resolver",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:230"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:254"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -416,8 +416,8 @@
|
||||
"call": "Dynamic List",
|
||||
"key": "Dynamic List",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:367",
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:447"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:391",
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:471"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -431,14 +431,21 @@
|
||||
"call": "Enable built-in DNS resolver for domains handled by this section",
|
||||
"key": "Enable built-in DNS resolver for domains handled by this section",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:231"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:255"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Enable DNS resolve to get real IP when routing",
|
||||
"key": "Enable DNS resolve to get real IP when routing",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:691"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Enable Mixed Proxy",
|
||||
"key": "Enable Mixed Proxy",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:639"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:665"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -452,7 +459,7 @@
|
||||
"call": "Enable the mixed proxy, allowing this section to route traffic through both HTTP and SOCKS proxies",
|
||||
"key": "Enable the mixed proxy, allowing this section to route traffic through both HTTP and SOCKS proxies",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:640"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:666"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -473,70 +480,70 @@
|
||||
"call": "Enter complete outbound configuration in JSON format",
|
||||
"key": "Enter complete outbound configuration in JSON format",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:65"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:66"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Enter domain names separated by commas, spaces, or newlines. You can add comments using //",
|
||||
"key": "Enter domain names separated by commas, spaces, or newlines. You can add comments using //",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:402"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:426"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Enter domain names without protocols, e.g. example.com or sub.example.com",
|
||||
"key": "Enter domain names without protocols, e.g. example.com or sub.example.com",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:376"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:400"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Enter subnets in CIDR notation (e.g. 103.21.244.0/22) or single IP addresses",
|
||||
"key": "Enter subnets in CIDR notation (e.g. 103.21.244.0/22) or single IP addresses",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:456"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:480"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Every 1 minute",
|
||||
"key": "Every 1 minute",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:114"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:138"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Every 3 minutes",
|
||||
"key": "Every 3 minutes",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:115"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:139"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Every 30 seconds",
|
||||
"key": "Every 30 seconds",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:113"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:137"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Every 5 minutes",
|
||||
"key": "Every 5 minutes",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:116"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:140"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Exclude NTP",
|
||||
"key": "Exclude NTP",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:384"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:402"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Exclude NTP protocol traffic from the tunnel to prevent it from being routed through the proxy or VPN",
|
||||
"key": "Exclude NTP protocol traffic from the tunnel to prevent it from being routed through the proxy or VPN",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:385"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:403"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -554,15 +561,15 @@
|
||||
"src/podkop/tabs/diagnostic/initController.ts:231",
|
||||
"src/podkop/tabs/diagnostic/initController.ts:261",
|
||||
"src/podkop/tabs/diagnostic/initController.ts:265",
|
||||
"src/podkop/tabs/diagnostic/initController.ts:299",
|
||||
"src/podkop/tabs/diagnostic/initController.ts:303"
|
||||
"src/podkop/tabs/diagnostic/initController.ts:302",
|
||||
"src/podkop/tabs/diagnostic/initController.ts:306"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Fastest",
|
||||
"key": "Fastest",
|
||||
"places": [
|
||||
"src/podkop/methods/custom/getDashboardSections.ts:117",
|
||||
"src/podkop/methods/custom/getDashboardSections.ts:148",
|
||||
"src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:59"
|
||||
]
|
||||
},
|
||||
@@ -570,7 +577,7 @@
|
||||
"call": "Fully Routed IPs",
|
||||
"key": "Fully Routed IPs",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:614"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:638"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -711,14 +718,14 @@
|
||||
"call": "Invalid HY2 URL: parsing failed",
|
||||
"key": "Invalid HY2 URL: parsing failed",
|
||||
"places": [
|
||||
"src/validators/validateHysteriaUrl.ts:113"
|
||||
"src/validators/validateHysteriaUrl.ts:115"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Invalid HY2 URL: sni cannot be empty",
|
||||
"key": "Invalid HY2 URL: sni cannot be empty",
|
||||
"places": [
|
||||
"src/validators/validateHysteriaUrl.ts:106"
|
||||
"src/validators/validateHysteriaUrl.ts:108"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -936,7 +943,7 @@
|
||||
"call": "Latest",
|
||||
"key": "Latest",
|
||||
"places": [
|
||||
"src/podkop/tabs/diagnostic/initController.ts:453"
|
||||
"src/podkop/tabs/diagnostic/initController.ts:456"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -950,14 +957,21 @@
|
||||
"call": "Local Domain Lists",
|
||||
"key": "Local Domain Lists",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:522"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:546"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Local Subnet Lists",
|
||||
"key": "Local Subnet Lists",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:545"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:569"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Log Level",
|
||||
"key": "Log Level",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:384"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -978,7 +992,7 @@
|
||||
"call": "Mixed Proxy Port",
|
||||
"key": "Mixed Proxy Port",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:650"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:678"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -992,14 +1006,14 @@
|
||||
"call": "Must be a number in the range of 50 - 1000",
|
||||
"key": "Must be a number in the range of 50 - 1000",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:140"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:164"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Network Interface",
|
||||
"key": "Network Interface",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:184"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:208"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1047,21 +1061,21 @@
|
||||
"call": "Outbound Config",
|
||||
"key": "Outbound Config",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:26"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:29"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Outbound Configuration",
|
||||
"key": "Outbound Configuration",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:64"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:65"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Outdated",
|
||||
"key": "Outdated",
|
||||
"places": [
|
||||
"src/podkop/tabs/diagnostic/initController.ts:443"
|
||||
"src/podkop/tabs/diagnostic/initController.ts:446"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1135,7 +1149,7 @@
|
||||
"call": "Proxy Configuration URL",
|
||||
"key": "Proxy Configuration URL",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:34"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:36"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1156,21 +1170,28 @@
|
||||
"call": "Regional options cannot be used together",
|
||||
"key": "Regional options cannot be used together",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:309"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:333"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Remote Domain Lists",
|
||||
"key": "Remote Domain Lists",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:568"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:592"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Remote Subnet Lists",
|
||||
"key": "Remote Subnet Lists",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:591"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:615"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Resolve real IP for routing",
|
||||
"key": "Resolve real IP for routing",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:690"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1198,7 +1219,7 @@
|
||||
"call": "Routing Excluded IPs",
|
||||
"key": "Routing Excluded IPs",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:395"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:413"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1254,7 +1275,7 @@
|
||||
"call": "Russia inside restrictions",
|
||||
"key": "Russia inside restrictions",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:328"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:352"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1275,7 +1296,7 @@
|
||||
"call": "Select a predefined list for routing",
|
||||
"key": "Select a predefined list for routing",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:276"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:300"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1303,21 +1324,21 @@
|
||||
"call": "Select how to configure the proxy",
|
||||
"key": "Select how to configure the proxy",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:23"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:24"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Select network interface for VPN connection",
|
||||
"key": "Select network interface for VPN connection",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:185"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:209"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Select or enter DNS server address",
|
||||
"key": "Select or enter DNS server address",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:254",
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:278",
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:25"
|
||||
]
|
||||
},
|
||||
@@ -1339,21 +1360,28 @@
|
||||
"call": "Select the DNS protocol type for the domain resolver",
|
||||
"key": "Select the DNS protocol type for the domain resolver",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:241"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:265"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Select the list type for adding custom domains",
|
||||
"key": "Select the list type for adding custom domains",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:364"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:388"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Select the list type for adding custom subnets",
|
||||
"key": "Select the list type for adding custom subnets",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:444"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:468"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Select the log level for sing-box",
|
||||
"key": "Select the log level for sing-box",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:385"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1377,6 +1405,20 @@
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:199"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Selector",
|
||||
"key": "Selector",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:27"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Selector Proxy Links",
|
||||
"key": "Selector Proxy Links",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:88"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Services info",
|
||||
"key": "Services info",
|
||||
@@ -1459,36 +1501,36 @@
|
||||
"call": "Specify a local IP address to be excluded from routing",
|
||||
"key": "Specify a local IP address to be excluded from routing",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:396"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:414"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Specify local IP addresses or subnets whose traffic will always be routed through the configured route",
|
||||
"key": "Specify local IP addresses or subnets whose traffic will always be routed through the configured route",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:615"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:639"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Specify remote URLs to download and use domain lists",
|
||||
"key": "Specify remote URLs to download and use domain lists",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:569"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:593"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Specify remote URLs to download and use subnet lists",
|
||||
"key": "Specify remote URLs to download and use subnet lists",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:592"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:616"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Specify the path to the list file located on the router filesystem",
|
||||
"key": "Specify the path to the list file located on the router filesystem",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:523",
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:546"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:547",
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:570"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1544,8 +1586,8 @@
|
||||
"call": "Text List",
|
||||
"key": "Text List",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:368",
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:448"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:392",
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:472"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1559,21 +1601,21 @@
|
||||
"call": "The interval between connectivity tests",
|
||||
"key": "The interval between connectivity tests",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:111"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:135"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "The maximum difference in response times (ms) allowed when comparing servers",
|
||||
"key": "The maximum difference in response times (ms) allowed when comparing servers",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:124"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:148"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "The URL used to test server connectivity",
|
||||
"key": "The URL used to test server connectivity",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:147"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:171"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1622,7 +1664,7 @@
|
||||
"call": "UDP (Unprotected DNS)",
|
||||
"key": "UDP (Unprotected DNS)",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:245",
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:269",
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:17"
|
||||
]
|
||||
},
|
||||
@@ -1630,7 +1672,7 @@
|
||||
"call": "UDP over TCP",
|
||||
"key": "UDP over TCP",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:174"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:198"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1643,7 +1685,7 @@
|
||||
"src/podkop/tabs/diagnostic/initController.ts:41",
|
||||
"src/podkop/tabs/diagnostic/initController.ts:42",
|
||||
"src/podkop/tabs/diagnostic/initController.ts:43",
|
||||
"src/podkop/tabs/diagnostic/initController.ts:417"
|
||||
"src/podkop/tabs/diagnostic/initController.ts:420"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1679,77 +1721,77 @@
|
||||
"call": "URLTest",
|
||||
"key": "URLTest",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:27"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:28"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "URLTest Check Interval",
|
||||
"key": "URLTest Check Interval",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:110"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:134"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "URLTest Proxy Links",
|
||||
"key": "URLTest Proxy Links",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:87"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:111"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "URLTest Testing URL",
|
||||
"key": "URLTest Testing URL",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:146"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:170"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "URLTest Tolerance",
|
||||
"key": "URLTest Tolerance",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:123"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:147"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "User Domain List Type",
|
||||
"key": "User Domain List Type",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:363"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:387"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "User Domains",
|
||||
"key": "User Domains",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:375"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:399"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "User Domains List",
|
||||
"key": "User Domains List",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:401"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:425"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "User Subnet List Type",
|
||||
"key": "User Subnet List Type",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:443"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:467"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "User Subnets",
|
||||
"key": "User Subnets",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:455"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:479"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "User Subnets List",
|
||||
"key": "User Subnets List",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:481"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:505"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1760,7 +1802,7 @@
|
||||
"src/validators/validateDns.ts:18",
|
||||
"src/validators/validateDomain.ts:13",
|
||||
"src/validators/validateDomain.ts:30",
|
||||
"src/validators/validateHysteriaUrl.ts:111",
|
||||
"src/validators/validateHysteriaUrl.ts:113",
|
||||
"src/validators/validateIp.ts:8",
|
||||
"src/validators/validateOutboundJson.ts:7",
|
||||
"src/validators/validatePath.ts:16",
|
||||
@@ -1776,8 +1818,8 @@
|
||||
"call": "Validation errors:",
|
||||
"key": "Validation errors:",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:434",
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:513"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:458",
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:537"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1795,18 +1837,27 @@
|
||||
"src/podkop/tabs/diagnostic/partials/renderWikiDisclaimer.ts:31"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "vless://, ss://, trojan://, socks4/5://, hy2/hysteria2:// links",
|
||||
"key": "vless://, ss://, trojan://, socks4/5://, hy2/hysteria2:// links",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:37",
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:89",
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:112"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Warning: %s cannot be used together with %s. Previous selections have been removed.",
|
||||
"key": "Warning: %s cannot be used together with %s. Previous selections have been removed.",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:311"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:335"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Warning: Russia inside can only be used with %s. %s already in Russia inside and have been removed from selection.",
|
||||
"key": "Warning: Russia inside can only be used with %s. %s already in Russia inside and have been removed from selection.",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:330"
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:354"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) 2025 THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# Copyright (C) 2026 THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PODKOP package.
|
||||
# divocat <divocatt@gmail.com>, 2025.
|
||||
# romanvht <romanvht@gmail.com>, 2026.
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PODKOP\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-12-01 14:30+0200\n"
|
||||
"PO-Revision-Date: 2025-12-01 14:30+0200\n"
|
||||
"Last-Translator: divocat <divocatt@gmail.com>\n"
|
||||
"POT-Creation-Date: 2026-05-09 02:49+1000\n"
|
||||
"PO-Revision-Date: 2026-05-09 02:49+1000\n"
|
||||
"Last-Translator: romanvht <romanvht@gmail.com>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"Language: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@@ -44,15 +44,15 @@ msgstr ""
|
||||
msgid "Allows access to YACD from the WAN. Make sure to open the appropriate port in your firewall."
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:175
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:199
|
||||
msgid "Applicable for SOCKS and Shadowsocks proxy"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:420
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:444
|
||||
msgid "At least one valid domain must be specified. Comments-only content is not allowed."
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:501
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:525
|
||||
msgid "At least one valid subnet or IP must be specified. Comments-only content is not allowed."
|
||||
msgstr ""
|
||||
|
||||
@@ -119,7 +119,7 @@ msgstr ""
|
||||
msgid "Close"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:275
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:299
|
||||
msgid "Community Lists"
|
||||
msgstr ""
|
||||
|
||||
@@ -131,7 +131,7 @@ msgstr ""
|
||||
msgid "Configuration for Podkop service"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:22
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:23
|
||||
msgid "Configuration Type"
|
||||
msgstr ""
|
||||
|
||||
@@ -139,7 +139,7 @@ msgstr ""
|
||||
msgid "Connection Type"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:25
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:26
|
||||
msgid "Connection URL"
|
||||
msgstr ""
|
||||
|
||||
@@ -187,8 +187,8 @@ msgstr ""
|
||||
msgid "Disable the QUIC protocol to improve compatibility or fix issues with video streaming"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:366
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:446
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:390
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:470
|
||||
msgid "Disabled"
|
||||
msgstr ""
|
||||
|
||||
@@ -196,17 +196,17 @@ msgstr ""
|
||||
msgid "DNS on router"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:243
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:267
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:15
|
||||
msgid "DNS over HTTPS (DoH)"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:244
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:268
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:16
|
||||
msgid "DNS over TLS (DoT)"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:240
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:264
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:12
|
||||
msgid "DNS Protocol Type"
|
||||
msgstr ""
|
||||
@@ -215,7 +215,7 @@ msgstr ""
|
||||
msgid "DNS Rewrite TTL"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:253
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:277
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:24
|
||||
msgid "DNS Server"
|
||||
msgstr ""
|
||||
@@ -228,7 +228,7 @@ msgstr ""
|
||||
msgid "Do not panic, everything can be fixed, just..."
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:230
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:254
|
||||
msgid "Domain Resolver"
|
||||
msgstr ""
|
||||
|
||||
@@ -258,8 +258,8 @@ msgstr ""
|
||||
msgid "Downloading all lists via specific Proxy/VPN"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:367
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:447
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:391
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:471
|
||||
msgid "Dynamic List"
|
||||
msgstr ""
|
||||
|
||||
@@ -267,11 +267,15 @@ msgstr ""
|
||||
msgid "Enable autostart"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:231
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:255
|
||||
msgid "Enable built-in DNS resolver for domains handled by this section"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:639
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:691
|
||||
msgid "Enable DNS resolve to get real IP when routing"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:665
|
||||
msgid "Enable Mixed Proxy"
|
||||
msgstr ""
|
||||
|
||||
@@ -279,7 +283,7 @@ msgstr ""
|
||||
msgid "Enable Output Network Interface"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:640
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:666
|
||||
msgid "Enable the mixed proxy, allowing this section to route traffic through both HTTP and SOCKS proxies"
|
||||
msgstr ""
|
||||
|
||||
@@ -291,43 +295,43 @@ msgstr ""
|
||||
msgid "Enable YACD WAN Access"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:65
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:66
|
||||
msgid "Enter complete outbound configuration in JSON format"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:402
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:426
|
||||
msgid "Enter domain names separated by commas, spaces, or newlines. You can add comments using //"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:376
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:400
|
||||
msgid "Enter domain names without protocols, e.g. example.com or sub.example.com"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:456
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:480
|
||||
msgid "Enter subnets in CIDR notation (e.g. 103.21.244.0/22) or single IP addresses"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:114
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:138
|
||||
msgid "Every 1 minute"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:115
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:139
|
||||
msgid "Every 3 minutes"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:113
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:137
|
||||
msgid "Every 30 seconds"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:116
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:140
|
||||
msgid "Every 5 minutes"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:384
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:402
|
||||
msgid "Exclude NTP"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:385
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:403
|
||||
msgid "Exclude NTP protocol traffic from the tunnel to prevent it from being routed through the proxy or VPN"
|
||||
msgstr ""
|
||||
|
||||
@@ -339,17 +343,17 @@ msgstr ""
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:231
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:261
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:265
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:299
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:303
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:302
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:306
|
||||
msgid "Failed to execute!"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/methods/custom/getDashboardSections.ts:117
|
||||
#: src/podkop/methods/custom/getDashboardSections.ts:148
|
||||
#: src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:59
|
||||
msgid "Fastest"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:614
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:638
|
||||
msgid "Fully Routed IPs"
|
||||
msgstr ""
|
||||
|
||||
@@ -430,11 +434,11 @@ msgstr ""
|
||||
msgid "Invalid HY2 URL: obfs-password required when obfs is set"
|
||||
msgstr ""
|
||||
|
||||
#: src/validators/validateHysteriaUrl.ts:113
|
||||
#: src/validators/validateHysteriaUrl.ts:115
|
||||
msgid "Invalid HY2 URL: parsing failed"
|
||||
msgstr ""
|
||||
|
||||
#: src/validators/validateHysteriaUrl.ts:106
|
||||
#: src/validators/validateHysteriaUrl.ts:108
|
||||
msgid "Invalid HY2 URL: sni cannot be empty"
|
||||
msgstr ""
|
||||
|
||||
@@ -559,7 +563,7 @@ msgstr ""
|
||||
msgid "Issues detected"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:453
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:456
|
||||
msgid "Latest"
|
||||
msgstr ""
|
||||
|
||||
@@ -567,14 +571,18 @@ msgstr ""
|
||||
msgid "List Update Frequency"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:522
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:546
|
||||
msgid "Local Domain Lists"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:545
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:569
|
||||
msgid "Local Subnet Lists"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:384
|
||||
msgid "Log Level"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runDnsCheck.ts:72
|
||||
msgid "Main DNS"
|
||||
msgstr ""
|
||||
@@ -583,7 +591,7 @@ msgstr ""
|
||||
msgid "Memory Usage"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:650
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:678
|
||||
msgid "Mixed Proxy Port"
|
||||
msgstr ""
|
||||
|
||||
@@ -591,11 +599,11 @@ msgstr ""
|
||||
msgid "Monitored Interfaces"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:140
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:164
|
||||
msgid "Must be a number in the range of 50 - 1000"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:184
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:208
|
||||
msgid "Network Interface"
|
||||
msgstr ""
|
||||
|
||||
@@ -625,15 +633,15 @@ msgstr ""
|
||||
msgid "Operation timed out"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:26
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:29
|
||||
msgid "Outbound Config"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:64
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:65
|
||||
msgid "Outbound Configuration"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:443
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:446
|
||||
msgid "Outdated"
|
||||
msgstr ""
|
||||
|
||||
@@ -677,7 +685,7 @@ msgstr ""
|
||||
msgid "Podkop will not modify your DHCP configuration"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:34
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:36
|
||||
msgid "Proxy Configuration URL"
|
||||
msgstr ""
|
||||
|
||||
@@ -689,18 +697,22 @@ msgstr ""
|
||||
msgid "Proxy traffic is routed via FakeIP"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:309
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:333
|
||||
msgid "Regional options cannot be used together"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:568
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:592
|
||||
msgid "Remote Domain Lists"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:591
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:615
|
||||
msgid "Remote Subnet Lists"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:690
|
||||
msgid "Resolve real IP for routing"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/partials/renderAvailableActions.ts:49
|
||||
msgid "Restart podkop"
|
||||
msgstr ""
|
||||
@@ -713,7 +725,7 @@ msgstr ""
|
||||
msgid "Router DNS is routed through sing-box"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:395
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:413
|
||||
msgid "Routing Excluded IPs"
|
||||
msgstr ""
|
||||
|
||||
@@ -745,7 +757,7 @@ msgstr ""
|
||||
msgid "Run Diagnostic"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:328
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:352
|
||||
msgid "Russia inside restrictions"
|
||||
msgstr ""
|
||||
|
||||
@@ -757,7 +769,7 @@ msgstr ""
|
||||
msgid "Sections"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:276
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:300
|
||||
msgid "Select a predefined list for routing"
|
||||
msgstr ""
|
||||
|
||||
@@ -773,15 +785,15 @@ msgstr ""
|
||||
msgid "Select how often the domain or subnet lists are updated automatically"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:23
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:24
|
||||
msgid "Select how to configure the proxy"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:185
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:209
|
||||
msgid "Select network interface for VPN connection"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:254
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:278
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:25
|
||||
msgid "Select or enter DNS server address"
|
||||
msgstr ""
|
||||
@@ -794,18 +806,22 @@ msgstr ""
|
||||
msgid "Select path for sing-box config file. Change this ONLY if you know what you are doing"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:241
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:265
|
||||
msgid "Select the DNS protocol type for the domain resolver"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:364
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:388
|
||||
msgid "Select the list type for adding custom domains"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:444
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:468
|
||||
msgid "Select the list type for adding custom subnets"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:385
|
||||
msgid "Select the log level for sing-box"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:90
|
||||
msgid "Select the network interface from which the traffic will originate"
|
||||
msgstr ""
|
||||
@@ -818,6 +834,14 @@ msgstr ""
|
||||
msgid "Select the WAN interfaces to be monitored"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:27
|
||||
msgid "Selector"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:88
|
||||
msgid "Selector Proxy Links"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/dashboard/initController.ts:340
|
||||
msgid "Services info"
|
||||
msgstr ""
|
||||
@@ -863,24 +887,24 @@ msgstr ""
|
||||
msgid "Source Network Interface"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:396
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:414
|
||||
msgid "Specify a local IP address to be excluded from routing"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:615
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:639
|
||||
msgid "Specify local IP addresses or subnets whose traffic will always be routed through the configured route"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:569
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:593
|
||||
msgid "Specify remote URLs to download and use domain lists"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:592
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:616
|
||||
msgid "Specify remote URLs to download and use subnet lists"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:523
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:546
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:547
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:570
|
||||
msgid "Specify the path to the list file located on the router filesystem"
|
||||
msgstr ""
|
||||
|
||||
@@ -912,8 +936,8 @@ msgstr ""
|
||||
msgid "Test latency"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:368
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:448
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:392
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:472
|
||||
msgid "Text List"
|
||||
msgstr ""
|
||||
|
||||
@@ -921,15 +945,15 @@ msgstr ""
|
||||
msgid "The DNS server used to look up the IP address of an upstream DNS server"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:111
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:135
|
||||
msgid "The interval between connectivity tests"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:124
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:148
|
||||
msgid "The maximum difference in response times (ms) allowed when comparing servers"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:147
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:171
|
||||
msgid "The URL used to test server connectivity"
|
||||
msgstr ""
|
||||
|
||||
@@ -957,12 +981,12 @@ msgstr ""
|
||||
msgid "TTL value cannot be empty"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:245
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:269
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:17
|
||||
msgid "UDP (Unprotected DNS)"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:174
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:198
|
||||
msgid "UDP over TCP"
|
||||
msgstr ""
|
||||
|
||||
@@ -972,7 +996,7 @@ msgstr ""
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:41
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:42
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:43
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:417
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:420
|
||||
msgid "unknown"
|
||||
msgstr ""
|
||||
|
||||
@@ -993,47 +1017,47 @@ msgstr ""
|
||||
msgid "URL must use one of the following protocols:"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:27
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:28
|
||||
msgid "URLTest"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:110
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:134
|
||||
msgid "URLTest Check Interval"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:87
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:111
|
||||
msgid "URLTest Proxy Links"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:146
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:170
|
||||
msgid "URLTest Testing URL"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:123
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:147
|
||||
msgid "URLTest Tolerance"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:363
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:387
|
||||
msgid "User Domain List Type"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:375
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:399
|
||||
msgid "User Domains"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:401
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:425
|
||||
msgid "User Domains List"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:443
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:467
|
||||
msgid "User Subnet List Type"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:455
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:479
|
||||
msgid "User Subnets"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:481
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:505
|
||||
msgid "User Subnets List"
|
||||
msgstr ""
|
||||
|
||||
@@ -1041,7 +1065,7 @@ msgstr ""
|
||||
#: src/validators/validateDns.ts:18
|
||||
#: src/validators/validateDomain.ts:13
|
||||
#: src/validators/validateDomain.ts:30
|
||||
#: src/validators/validateHysteriaUrl.ts:111
|
||||
#: src/validators/validateHysteriaUrl.ts:113
|
||||
#: src/validators/validateIp.ts:8
|
||||
#: src/validators/validateOutboundJson.ts:7
|
||||
#: src/validators/validatePath.ts:16
|
||||
@@ -1054,8 +1078,8 @@ msgstr ""
|
||||
msgid "Valid"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:434
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:513
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:458
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:537
|
||||
msgid "Validation errors:"
|
||||
msgstr ""
|
||||
|
||||
@@ -1068,11 +1092,17 @@ msgstr ""
|
||||
msgid "Visit Wiki"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:311
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:37
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:89
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:112
|
||||
msgid "vless://, ss://, trojan://, socks4/5://, hy2/hysteria2:// links"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:335
|
||||
msgid "Warning: %s cannot be used together with %s. Previous selections have been removed."
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:330
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:354
|
||||
msgid "Warning: Russia inside can only be used with %s. %s already in Russia inside and have been removed from selection."
|
||||
msgstr ""
|
||||
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
# RU translations for PODKOP package.
|
||||
# Copyright (C) 2025 THE PODKOP'S COPYRIGHT HOLDER
|
||||
# Copyright (C) 2026 THE PODKOP'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PODKOP package.
|
||||
# divocat, 2025.
|
||||
# romanvht, 2026.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PODKOP\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-12-01 16:30+0200\n"
|
||||
"PO-Revision-Date: 2025-12-01 16:30+0200\n"
|
||||
"Last-Translator: divocat\n"
|
||||
"POT-Creation-Date: 2026-05-09 12:50+1000\n"
|
||||
"PO-Revision-Date: 2026-05-09 12:50+1000\n"
|
||||
"Last-Translator: romanvht\n"
|
||||
"Language-Team: none\n"
|
||||
"Language: ru\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@@ -197,6 +197,9 @@ msgstr "Включить автостарт"
|
||||
msgid "Enable built-in DNS resolver for domains handled by this section"
|
||||
msgstr "Включить встроенный DNS-резолвер для доменов, обрабатываемых в этом разделе"
|
||||
|
||||
msgid "Enable DNS resolve to get real IP when routing"
|
||||
msgstr "Разрешать домены в реальные IP-адреса перед маршрутизацией в outbound"
|
||||
|
||||
msgid "Enable Mixed Proxy"
|
||||
msgstr "Включить смешанный прокси"
|
||||
|
||||
@@ -419,6 +422,9 @@ msgstr "Локальные списки доменов"
|
||||
msgid "Local Subnet Lists"
|
||||
msgstr "Локальные списки подсетей"
|
||||
|
||||
msgid "Log Level"
|
||||
msgstr "Уровень логов"
|
||||
|
||||
msgid "Main DNS"
|
||||
msgstr "Основной DNS"
|
||||
|
||||
@@ -506,6 +512,9 @@ msgstr "Внешние списки доменов"
|
||||
msgid "Remote Subnet Lists"
|
||||
msgstr "Внешние списки подсетей"
|
||||
|
||||
msgid "Resolve real IP for routing"
|
||||
msgstr "Разрешение реальных IP-адресов"
|
||||
|
||||
msgid "Restart podkop"
|
||||
msgstr "Перезапустить Podkop"
|
||||
|
||||
@@ -584,6 +593,9 @@ msgstr "Выберите тип списка для добавления пол
|
||||
msgid "Select the list type for adding custom subnets"
|
||||
msgstr "Выберите тип списка для добавления пользовательских подсетей"
|
||||
|
||||
msgid "Select the log level for sing-box"
|
||||
msgstr "Выберите уровень логов для sing-box"
|
||||
|
||||
msgid "Select the network interface from which the traffic will originate"
|
||||
msgstr "Выберите сетевой интерфейс, с которого будет исходить трафик"
|
||||
|
||||
@@ -593,6 +605,12 @@ msgstr "Выберите сетевой интерфейс, на который
|
||||
msgid "Select the WAN interfaces to be monitored"
|
||||
msgstr "Выберите WAN интерфейсы для мониторинга"
|
||||
|
||||
msgid "Selector"
|
||||
msgstr "Selector"
|
||||
|
||||
msgid "Selector Proxy Links"
|
||||
msgstr "Ссылки прокси для Selector"
|
||||
|
||||
msgid "Services info"
|
||||
msgstr "Информация о сервисах"
|
||||
|
||||
@@ -761,6 +779,9 @@ msgstr "Посмотреть логи"
|
||||
msgid "Visit Wiki"
|
||||
msgstr "Перейти в wiki"
|
||||
|
||||
msgid "vless://, ss://, trojan://, socks4/5://, hy2/hysteria2:// links"
|
||||
msgstr ""
|
||||
|
||||
msgid "Warning: %s cannot be used together with %s. Previous selections have been removed."
|
||||
msgstr "Предупреждение: %s нельзя использовать вместе с %s. Предыдущие варианты были удалены."
|
||||
|
||||
|
||||
@@ -13,11 +13,11 @@
|
||||
"test": "vitest",
|
||||
"ci": "yarn format && yarn lint --max-warnings=0 && yarn test --run && yarn build",
|
||||
"watch:sftp": "node watch-upload.js",
|
||||
"locales:exctract-calls": "node extract-calls.js",
|
||||
"locales:extract-calls": "node extract-calls.js",
|
||||
"locales:generate-pot": "node generate-pot.js",
|
||||
"locales:generate-po:ru": "node generate-po.js ru",
|
||||
"locales:distribute": "node distribute-locales.js",
|
||||
"locales:actualize": "yarn locales:exctract-calls && yarn locales:generate-pot && yarn locales:generate-po:ru && yarn locales:distribute"
|
||||
"locales:actualize": "yarn locales:extract-calls && yarn locales:generate-pot && yarn locales:generate-po:ru && yarn locales:distribute"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/parser": "7.28.4",
|
||||
|
||||
@@ -26,6 +26,7 @@ export const ALLOWED_WITH_RUSSIA_INSIDE = [
|
||||
'hetzner',
|
||||
'ovh',
|
||||
'hodca',
|
||||
'roblox',
|
||||
'digitalocean',
|
||||
'cloudfront',
|
||||
];
|
||||
@@ -50,6 +51,7 @@ export const DOMAIN_LIST_OPTIONS = {
|
||||
google_ai: 'Google AI',
|
||||
google_play: 'Google Play',
|
||||
hodca: 'H.O.D.C.A',
|
||||
roblox: 'Roblox',
|
||||
hetzner: 'Hetzner ASN',
|
||||
ovh: 'OVH ASN',
|
||||
digitalocean: 'Digital Ocean ASN',
|
||||
|
||||
3
fe-app-podkop/src/helpers/removeVersionPrefix.ts
Normal file
3
fe-app-podkop/src/helpers/removeVersionPrefix.ts
Normal file
@@ -0,0 +1,3 @@
|
||||
export function removeVersionPrefix(version: string) {
|
||||
return version.replace(/^v/, '');
|
||||
}
|
||||
@@ -86,6 +86,37 @@ export async function getDashboardSections(): Promise<IGetDashboardSectionsRespo
|
||||
};
|
||||
}
|
||||
|
||||
if (section.proxy_config_type === 'selector') {
|
||||
const selector = proxies.find(
|
||||
(proxy) => proxy.code === `${section['.name']}-out`,
|
||||
);
|
||||
|
||||
const links = section.selector_proxy_links ?? [];
|
||||
|
||||
const outbounds = links
|
||||
.map((link, index) => ({
|
||||
link,
|
||||
outbound: proxies.find(
|
||||
(item) => item.code === `${section['.name']}-${index + 1}-out`,
|
||||
),
|
||||
}))
|
||||
.map((item) => ({
|
||||
code: item?.outbound?.code || '',
|
||||
displayName:
|
||||
getProxyUrlName(item.link) || item?.outbound?.value?.name || '',
|
||||
latency: item?.outbound?.value?.history?.[0]?.delay || 0,
|
||||
type: item?.outbound?.value?.type || '',
|
||||
selected: selector?.value?.now === item?.outbound?.code,
|
||||
}));
|
||||
|
||||
return {
|
||||
withTagSelect: true,
|
||||
code: selector?.code || section['.name'],
|
||||
displayName: section['.name'],
|
||||
outbounds,
|
||||
};
|
||||
}
|
||||
|
||||
if (section.proxy_config_type === 'urltest') {
|
||||
const selector = proxies.find(
|
||||
(proxy) => proxy.code === `${section['.name']}-out`,
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
import { normalizeCompiledVersion } from '../../../../helpers/normalizeCompiledVersion';
|
||||
import { removeVersionPrefix } from '../../../../helpers/removeVersionPrefix';
|
||||
import type { StoreType } from '../../../services/store.service';
|
||||
import type { IRenderSystemInfoRow } from '../partials';
|
||||
|
||||
function isUnknownVersion(version?: string | null): boolean {
|
||||
return version === 'unknown' || version === _('unknown');
|
||||
}
|
||||
|
||||
export function getPodkopVersionRow(
|
||||
diagnosticsSystemInfo: StoreType['diagnosticsSystemInfo'],
|
||||
): IRenderSystemInfoRow {
|
||||
const loading = diagnosticsSystemInfo.loading;
|
||||
const unknown = isUnknownVersion(diagnosticsSystemInfo.podkop_version);
|
||||
const hasActualVersion =
|
||||
Boolean(diagnosticsSystemInfo.podkop_latest_version) &&
|
||||
!isUnknownVersion(diagnosticsSystemInfo.podkop_latest_version);
|
||||
const version = normalizeCompiledVersion(
|
||||
diagnosticsSystemInfo.podkop_version,
|
||||
);
|
||||
const isDevVersion = version === 'dev';
|
||||
|
||||
if (loading || unknown || !hasActualVersion || isDevVersion) {
|
||||
return {
|
||||
key: 'Podkop',
|
||||
value: version,
|
||||
};
|
||||
}
|
||||
|
||||
if (
|
||||
removeVersionPrefix(version) !==
|
||||
removeVersionPrefix(diagnosticsSystemInfo.podkop_latest_version)
|
||||
) {
|
||||
return {
|
||||
key: 'Podkop',
|
||||
value: version,
|
||||
tag: {
|
||||
label: _('Outdated'),
|
||||
kind: 'warning',
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
return {
|
||||
key: 'Podkop',
|
||||
value: version,
|
||||
tag: {
|
||||
label: _('Latest'),
|
||||
kind: 'success',
|
||||
},
|
||||
};
|
||||
}
|
||||
@@ -6,7 +6,6 @@ import { runFakeIPCheck } from './checks/runFakeIPCheck';
|
||||
import { loadingDiagnosticsChecksStore } from './diagnostic.store';
|
||||
import { logger, store, StoreType } from '../../services';
|
||||
import {
|
||||
IRenderSystemInfoRow,
|
||||
renderAvailableActions,
|
||||
renderCheckSection,
|
||||
renderRunAction,
|
||||
@@ -20,6 +19,7 @@ import { PODKOP_LUCI_APP_VERSION } from '../../../constants';
|
||||
import { showToast } from '../../../helpers/showToast';
|
||||
import { renderWikiDisclaimer } from './partials/renderWikiDisclaimer';
|
||||
import { runSectionsCheck } from './checks/runSectionsCheck';
|
||||
import { getPodkopVersionRow } from './helpers/getPodkopVersionRow';
|
||||
|
||||
async function fetchSystemInfo() {
|
||||
const systemInfo = await PodkopShellMethods.getSystemInfo();
|
||||
@@ -288,7 +288,10 @@ async function handleShowSingBoxConfig() {
|
||||
if (showSingBoxConfig.success) {
|
||||
ui.showModal(
|
||||
_('Show sing-box config'),
|
||||
renderModal(showSingBoxConfig.data as string, 'show_sing_box_config'),
|
||||
renderModal(
|
||||
JSON.stringify(showSingBoxConfig.data, null, 2),
|
||||
'show_sing_box_config',
|
||||
),
|
||||
);
|
||||
} else {
|
||||
logger.error(
|
||||
@@ -412,53 +415,9 @@ function renderDiagnosticSystemInfoWidget() {
|
||||
|
||||
const container = document.getElementById('pdk_diagnostic-page-system-info');
|
||||
|
||||
function getPodkopVersionRow(): IRenderSystemInfoRow {
|
||||
const loading = diagnosticsSystemInfo.loading;
|
||||
const unknown = diagnosticsSystemInfo.podkop_version === _('unknown');
|
||||
const hasActualVersion =
|
||||
Boolean(diagnosticsSystemInfo.podkop_latest_version) &&
|
||||
diagnosticsSystemInfo.podkop_latest_version !== 'unknown';
|
||||
const version = normalizeCompiledVersion(
|
||||
diagnosticsSystemInfo.podkop_version,
|
||||
);
|
||||
const isDevVersion = version === 'dev';
|
||||
|
||||
if (loading || unknown || !hasActualVersion || isDevVersion) {
|
||||
return {
|
||||
key: 'Podkop',
|
||||
value: version,
|
||||
};
|
||||
}
|
||||
|
||||
if (version !== `v${diagnosticsSystemInfo.podkop_latest_version}`) {
|
||||
logger.debug(
|
||||
'[DIAGNOSTIC]',
|
||||
'diagnosticsSystemInfo',
|
||||
diagnosticsSystemInfo,
|
||||
);
|
||||
return {
|
||||
key: 'Podkop',
|
||||
value: version,
|
||||
tag: {
|
||||
label: _('Outdated'),
|
||||
kind: 'warning',
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
return {
|
||||
key: 'Podkop',
|
||||
value: version,
|
||||
tag: {
|
||||
label: _('Latest'),
|
||||
kind: 'success',
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
const renderedSystemInfo = renderSystemInfo({
|
||||
items: [
|
||||
getPodkopVersionRow(),
|
||||
getPodkopVersionRow(diagnosticsSystemInfo),
|
||||
{
|
||||
key: 'Luci App',
|
||||
value: normalizeCompiledVersion(PODKOP_LUCI_APP_VERSION),
|
||||
|
||||
@@ -0,0 +1,69 @@
|
||||
import { describe, expect, it } from 'vitest';
|
||||
import { getPodkopVersionRow } from '../helpers/getPodkopVersionRow';
|
||||
import type { StoreType } from '../../../services/store.service';
|
||||
|
||||
function makeDiagnosticsSystemInfo(
|
||||
patch: Partial<StoreType['diagnosticsSystemInfo']> = {},
|
||||
): StoreType['diagnosticsSystemInfo'] {
|
||||
return {
|
||||
loading: false,
|
||||
podkop_version: '1.2.3',
|
||||
podkop_latest_version: '1.2.3',
|
||||
luci_app_version: '1.0.0',
|
||||
sing_box_version: '1.11.0',
|
||||
openwrt_version: 'OpenWrt 25.12',
|
||||
device_model: 'Test Router',
|
||||
...patch,
|
||||
};
|
||||
}
|
||||
|
||||
describe('getPodkopVersionRow', () => {
|
||||
it('returns Latest when versions differ only by leading v', () => {
|
||||
const row = getPodkopVersionRow(
|
||||
makeDiagnosticsSystemInfo({
|
||||
podkop_version: 'v1.2.3',
|
||||
podkop_latest_version: '1.2.3',
|
||||
}),
|
||||
);
|
||||
|
||||
expect(row).toEqual({
|
||||
key: 'Podkop',
|
||||
value: 'v1.2.3',
|
||||
tag: {
|
||||
label: 'Latest',
|
||||
kind: 'success',
|
||||
},
|
||||
});
|
||||
});
|
||||
|
||||
it('returns Outdated when versions differ', () => {
|
||||
const row = getPodkopVersionRow(
|
||||
makeDiagnosticsSystemInfo({
|
||||
podkop_version: '1.2.2',
|
||||
podkop_latest_version: '1.2.3',
|
||||
}),
|
||||
);
|
||||
|
||||
expect(row).toEqual({
|
||||
key: 'Podkop',
|
||||
value: '1.2.2',
|
||||
tag: {
|
||||
label: 'Outdated',
|
||||
kind: 'warning',
|
||||
},
|
||||
});
|
||||
});
|
||||
|
||||
it('returns plain row without tag for dev build', () => {
|
||||
const row = getPodkopVersionRow(
|
||||
makeDiagnosticsSystemInfo({
|
||||
podkop_version: 'COMPILED_VERSION',
|
||||
}),
|
||||
);
|
||||
|
||||
expect(row).toEqual({
|
||||
key: 'Podkop',
|
||||
value: 'dev',
|
||||
});
|
||||
});
|
||||
});
|
||||
@@ -95,6 +95,12 @@ export namespace Podkop {
|
||||
urltest_proxy_links: string[];
|
||||
}
|
||||
|
||||
export interface ConfigProxySelectorSection {
|
||||
connection_type: 'proxy';
|
||||
proxy_config_type: 'selector';
|
||||
selector_proxy_links: string[];
|
||||
}
|
||||
|
||||
export interface ConfigProxyUrlSection {
|
||||
connection_type: 'proxy';
|
||||
proxy_config_type: 'url';
|
||||
@@ -118,6 +124,7 @@ export namespace Podkop {
|
||||
|
||||
export type ConfigBaseSection =
|
||||
| ConfigProxyUrlTestSection
|
||||
| ConfigProxySelectorSection
|
||||
| ConfigProxyUrlSection
|
||||
| ConfigProxyOutboundSection
|
||||
| ConfigVpnSection
|
||||
|
||||
20
install.sh
20
install.sh
@@ -109,16 +109,16 @@ main() {
|
||||
pkg_list_update || { echo "Packages list update failed"; exit 1; }
|
||||
|
||||
if [ -f "/etc/init.d/podkop" ]; then
|
||||
msg "Podkop is already installed. Upgraded..."
|
||||
msg "Podkop is already installed. Upgrading..."
|
||||
else
|
||||
msg "Installed podkop..."
|
||||
msg "Installing podkop..."
|
||||
fi
|
||||
|
||||
if command -v curl >/dev/null 2>&1; then
|
||||
check_response=$(curl -s "https://api.github.com/repos/itdoginfo/podkop/releases/latest")
|
||||
|
||||
if echo "$check_response" | grep -q 'API rate limit '; then
|
||||
msg "You've reached rate limit from GitHub. Repeat in five minutes."
|
||||
msg "You've reached the GitHub rate limit. Repeat in five minutes."
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
@@ -143,7 +143,7 @@ main() {
|
||||
break
|
||||
fi
|
||||
fi
|
||||
msg "Download error $filename. Retry..."
|
||||
msg "Download error for $filename. Retrying..."
|
||||
rm -f "$filepath"
|
||||
attempt=$((attempt+1))
|
||||
done
|
||||
@@ -168,7 +168,7 @@ main() {
|
||||
fi
|
||||
done
|
||||
if [ -n "$file" ]; then
|
||||
msg "Installing $file"
|
||||
msg "Installing $file..."
|
||||
pkg_install "$DOWNLOAD_DIR/$file"
|
||||
sleep 3
|
||||
fi
|
||||
@@ -183,11 +183,11 @@ main() {
|
||||
done
|
||||
if [ -n "$ru" ]; then
|
||||
if pkg_is_installed luci-i18n-podkop-ru; then
|
||||
msg "Upgraded ru translation..."
|
||||
msg "Upgrading Russian translation..."
|
||||
pkg_remove luci-i18n-podkop*
|
||||
pkg_install "$DOWNLOAD_DIR/$ru"
|
||||
else
|
||||
msg "Русский язык интерфейса ставим? y/n (Need a Russian translation?)"
|
||||
msg "Русский язык интерфейса ставим? y/n (Install the Russian interface language?)"
|
||||
while true; do
|
||||
read -r -p '' RUS
|
||||
case $RUS in
|
||||
@@ -236,7 +236,7 @@ check_system() {
|
||||
fi
|
||||
|
||||
if ! nslookup google.com >/dev/null 2>&1; then
|
||||
msg "DNS not working"
|
||||
msg "DNS is not working."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -270,7 +270,7 @@ check_system() {
|
||||
fi
|
||||
|
||||
if pkg_is_installed https-dns-proxy; then
|
||||
msg "Сonflicting package detected: https-dns-proxy. Remove?"
|
||||
msg "Conflicting package detected: https-dns-proxy. Remove?"
|
||||
|
||||
while true; do
|
||||
read -r -p '' DNSPROXY
|
||||
@@ -300,7 +300,7 @@ sing_box() {
|
||||
required_version="1.12.4"
|
||||
|
||||
if [ "$(printf '%s\n%s\n' "$sing_box_version" "$required_version" | sort -V | head -n 1)" != "$required_version" ]; then
|
||||
msg "sing-box version $sing_box_version is older than required $required_version"
|
||||
msg "sing-box version $sing_box_version is older than the required version $required_version."
|
||||
msg "Removing old version..."
|
||||
service podkop stop
|
||||
pkg_remove sing-box
|
||||
|
||||
@@ -757,6 +757,30 @@ async function getDashboardSections() {
|
||||
]
|
||||
};
|
||||
}
|
||||
if (section.proxy_config_type === "selector") {
|
||||
const selector = proxies.find(
|
||||
(proxy) => proxy.code === `${section[".name"]}-out`
|
||||
);
|
||||
const links = section.selector_proxy_links ?? [];
|
||||
const outbounds = links.map((link, index) => ({
|
||||
link,
|
||||
outbound: proxies.find(
|
||||
(item) => item.code === `${section[".name"]}-${index + 1}-out`
|
||||
)
|
||||
})).map((item) => ({
|
||||
code: item?.outbound?.code || "",
|
||||
displayName: getProxyUrlName(item.link) || item?.outbound?.value?.name || "",
|
||||
latency: item?.outbound?.value?.history?.[0]?.delay || 0,
|
||||
type: item?.outbound?.value?.type || "",
|
||||
selected: selector?.value?.now === item?.outbound?.code
|
||||
}));
|
||||
return {
|
||||
withTagSelect: true,
|
||||
code: selector?.code || section[".name"],
|
||||
displayName: section[".name"],
|
||||
outbounds
|
||||
};
|
||||
}
|
||||
if (section.proxy_config_type === "urltest") {
|
||||
const selector = proxies.find(
|
||||
(proxy) => proxy.code === `${section[".name"]}-out`
|
||||
@@ -860,6 +884,7 @@ var ALLOWED_WITH_RUSSIA_INSIDE = [
|
||||
"hetzner",
|
||||
"ovh",
|
||||
"hodca",
|
||||
"roblox",
|
||||
"digitalocean",
|
||||
"cloudfront"
|
||||
];
|
||||
@@ -883,6 +908,7 @@ var DOMAIN_LIST_OPTIONS = {
|
||||
google_ai: "Google AI",
|
||||
google_play: "Google Play",
|
||||
hodca: "H.O.D.C.A",
|
||||
roblox: "Roblox",
|
||||
hetzner: "Hetzner ASN",
|
||||
ovh: "OVH ASN",
|
||||
digitalocean: "Digital Ocean ASN",
|
||||
@@ -3899,6 +3925,49 @@ async function runSectionsCheck() {
|
||||
}
|
||||
}
|
||||
|
||||
// src/helpers/removeVersionPrefix.ts
|
||||
function removeVersionPrefix(version) {
|
||||
return version.replace(/^v/, "");
|
||||
}
|
||||
|
||||
// src/podkop/tabs/diagnostic/helpers/getPodkopVersionRow.ts
|
||||
function isUnknownVersion(version) {
|
||||
return version === "unknown" || version === _("unknown");
|
||||
}
|
||||
function getPodkopVersionRow(diagnosticsSystemInfo) {
|
||||
const loading = diagnosticsSystemInfo.loading;
|
||||
const unknown = isUnknownVersion(diagnosticsSystemInfo.podkop_version);
|
||||
const hasActualVersion = Boolean(diagnosticsSystemInfo.podkop_latest_version) && !isUnknownVersion(diagnosticsSystemInfo.podkop_latest_version);
|
||||
const version = normalizeCompiledVersion(
|
||||
diagnosticsSystemInfo.podkop_version
|
||||
);
|
||||
const isDevVersion = version === "dev";
|
||||
if (loading || unknown || !hasActualVersion || isDevVersion) {
|
||||
return {
|
||||
key: "Podkop",
|
||||
value: version
|
||||
};
|
||||
}
|
||||
if (removeVersionPrefix(version) !== removeVersionPrefix(diagnosticsSystemInfo.podkop_latest_version)) {
|
||||
return {
|
||||
key: "Podkop",
|
||||
value: version,
|
||||
tag: {
|
||||
label: _("Outdated"),
|
||||
kind: "warning"
|
||||
}
|
||||
};
|
||||
}
|
||||
return {
|
||||
key: "Podkop",
|
||||
value: version,
|
||||
tag: {
|
||||
label: _("Latest"),
|
||||
kind: "success"
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
// src/podkop/tabs/diagnostic/initController.ts
|
||||
async function fetchSystemInfo() {
|
||||
const systemInfo = await PodkopShellMethods.getSystemInfo();
|
||||
@@ -4138,7 +4207,10 @@ async function handleShowSingBoxConfig() {
|
||||
if (showSingBoxConfig.success) {
|
||||
ui.showModal(
|
||||
_("Show sing-box config"),
|
||||
renderModal(showSingBoxConfig.data, "show_sing_box_config")
|
||||
renderModal(
|
||||
JSON.stringify(showSingBoxConfig.data, null, 2),
|
||||
"show_sing_box_config"
|
||||
)
|
||||
);
|
||||
} else {
|
||||
logger.error(
|
||||
@@ -4243,47 +4315,9 @@ function renderDiagnosticSystemInfoWidget() {
|
||||
logger.debug("[DIAGNOSTIC]", "renderDiagnosticSystemInfoWidget");
|
||||
const diagnosticsSystemInfo = store.get().diagnosticsSystemInfo;
|
||||
const container = document.getElementById("pdk_diagnostic-page-system-info");
|
||||
function getPodkopVersionRow() {
|
||||
const loading = diagnosticsSystemInfo.loading;
|
||||
const unknown = diagnosticsSystemInfo.podkop_version === _("unknown");
|
||||
const hasActualVersion = Boolean(diagnosticsSystemInfo.podkop_latest_version) && diagnosticsSystemInfo.podkop_latest_version !== "unknown";
|
||||
const version = normalizeCompiledVersion(
|
||||
diagnosticsSystemInfo.podkop_version
|
||||
);
|
||||
const isDevVersion = version === "dev";
|
||||
if (loading || unknown || !hasActualVersion || isDevVersion) {
|
||||
return {
|
||||
key: "Podkop",
|
||||
value: version
|
||||
};
|
||||
}
|
||||
if (version !== `v${diagnosticsSystemInfo.podkop_latest_version}`) {
|
||||
logger.debug(
|
||||
"[DIAGNOSTIC]",
|
||||
"diagnosticsSystemInfo",
|
||||
diagnosticsSystemInfo
|
||||
);
|
||||
return {
|
||||
key: "Podkop",
|
||||
value: version,
|
||||
tag: {
|
||||
label: _("Outdated"),
|
||||
kind: "warning"
|
||||
}
|
||||
};
|
||||
}
|
||||
return {
|
||||
key: "Podkop",
|
||||
value: version,
|
||||
tag: {
|
||||
label: _("Latest"),
|
||||
kind: "success"
|
||||
}
|
||||
};
|
||||
}
|
||||
const renderedSystemInfo = renderSystemInfo({
|
||||
items: [
|
||||
getPodkopVersionRow(),
|
||||
getPodkopVersionRow(diagnosticsSystemInfo),
|
||||
{
|
||||
key: "Luci App",
|
||||
value: normalizeCompiledVersion(PODKOP_LUCI_APP_VERSION)
|
||||
|
||||
@@ -15,6 +15,7 @@ function createSectionContent(section) {
|
||||
o.value("proxy", "Proxy");
|
||||
o.value("vpn", "VPN");
|
||||
o.value("block", "Block");
|
||||
o.value("exclusion", "Exclusion");
|
||||
|
||||
o = section.option(
|
||||
form.ListValue,
|
||||
@@ -23,8 +24,9 @@ function createSectionContent(section) {
|
||||
_("Select how to configure the proxy"),
|
||||
);
|
||||
o.value("url", _("Connection URL"));
|
||||
o.value("outbound", _("Outbound Config"));
|
||||
o.value("selector", _("Selector"));
|
||||
o.value("urltest", _("URLTest"));
|
||||
o.value("outbound", _("Outbound Config"));
|
||||
o.default = "url";
|
||||
o.depends("connection_type", "proxy");
|
||||
|
||||
@@ -32,7 +34,7 @@ function createSectionContent(section) {
|
||||
form.TextValue,
|
||||
"proxy_string",
|
||||
_("Proxy Configuration URL"),
|
||||
"",
|
||||
_("vless://, ss://, trojan://, socks4/5://, hy2/hysteria2:// links")
|
||||
);
|
||||
o.depends("proxy_config_type", "url");
|
||||
o.rows = 5;
|
||||
@@ -42,7 +44,6 @@ function createSectionContent(section) {
|
||||
o.textarea = true;
|
||||
o.rmempty = false;
|
||||
o.sectionDescriptions = new Map();
|
||||
o.placeholder = "vless://uuid@server:port?type=tcp&security=tls#main";
|
||||
o.validate = function (section_id, value) {
|
||||
// Optional
|
||||
if (!value || value.length === 0) {
|
||||
@@ -81,13 +82,36 @@ function createSectionContent(section) {
|
||||
return validation.message;
|
||||
};
|
||||
|
||||
o = section.option(
|
||||
form.DynamicList,
|
||||
"selector_proxy_links",
|
||||
_("Selector Proxy Links"),
|
||||
_("vless://, ss://, trojan://, socks4/5://, hy2/hysteria2:// links")
|
||||
);
|
||||
o.depends("proxy_config_type", "selector");
|
||||
o.rmempty = false;
|
||||
o.validate = function (section_id, value) {
|
||||
// Optional
|
||||
if (!value || value.length === 0) {
|
||||
return true;
|
||||
}
|
||||
|
||||
const validation = main.validateProxyUrl(value);
|
||||
|
||||
if (validation.valid) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return validation.message;
|
||||
};
|
||||
|
||||
o = section.option(
|
||||
form.DynamicList,
|
||||
"urltest_proxy_links",
|
||||
_("URLTest Proxy Links"),
|
||||
_("vless://, ss://, trojan://, socks4/5://, hy2/hysteria2:// links")
|
||||
);
|
||||
o.depends("proxy_config_type", "urltest");
|
||||
o.placeholder = "vless://, ss://, trojan://, socks4/5://, hy2/hysteria2:// links";
|
||||
o.rmempty = false;
|
||||
o.validate = function (section_id, value) {
|
||||
// Optional
|
||||
@@ -618,6 +642,8 @@ function createSectionContent(section) {
|
||||
);
|
||||
o.placeholder = "192.168.1.2 or 192.168.1.0/24";
|
||||
o.rmempty = true;
|
||||
o.depends("connection_type", "proxy");
|
||||
o.depends("connection_type", "vpn");
|
||||
o.validate = function (section_id, value) {
|
||||
// Optional
|
||||
if (!value || value.length === 0) {
|
||||
@@ -643,6 +669,8 @@ function createSectionContent(section) {
|
||||
);
|
||||
o.default = "0";
|
||||
o.rmempty = false;
|
||||
o.depends("connection_type", "proxy");
|
||||
o.depends("connection_type", "vpn");
|
||||
|
||||
o = section.option(
|
||||
form.Value,
|
||||
@@ -655,6 +683,17 @@ function createSectionContent(section) {
|
||||
);
|
||||
o.rmempty = false;
|
||||
o.depends("mixed_proxy_enabled", "1");
|
||||
|
||||
o = section.option(
|
||||
form.Flag,
|
||||
"resolve_real_ip_for_routing",
|
||||
_("Resolve real IP for routing"),
|
||||
_("Enable DNS resolve to get real IP when routing"),
|
||||
);
|
||||
o.default = "0";
|
||||
o.rmempty = false;
|
||||
o.depends("connection_type", "proxy");
|
||||
o.depends("connection_type", "vpn");
|
||||
}
|
||||
|
||||
const EntryPoint = {
|
||||
|
||||
@@ -378,6 +378,24 @@ function createSettingsContent(section) {
|
||||
return true;
|
||||
};
|
||||
|
||||
o = section.option(
|
||||
form.ListValue,
|
||||
"log_level",
|
||||
_("Log Level"),
|
||||
_(
|
||||
"Select the log level for sing-box",
|
||||
),
|
||||
);
|
||||
o.value("trace", "Trace");
|
||||
o.value("debug", "Debug");
|
||||
o.value("info", "Info");
|
||||
o.value("warn", "Warn");
|
||||
o.value("error", "Error");
|
||||
o.value("fatal", "Fatal");
|
||||
o.value("panic", "Panic");
|
||||
o.default = "warn";
|
||||
o.rmempty = false;
|
||||
|
||||
o = section.option(
|
||||
form.Flag,
|
||||
"exclude_ntp",
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
# RU translations for PODKOP package.
|
||||
# Copyright (C) 2025 THE PODKOP'S COPYRIGHT HOLDER
|
||||
# Copyright (C) 2026 THE PODKOP'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PODKOP package.
|
||||
# divocat, 2025.
|
||||
# romanvht, 2026.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PODKOP\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-12-01 16:30+0200\n"
|
||||
"PO-Revision-Date: 2025-12-01 16:30+0200\n"
|
||||
"Last-Translator: divocat\n"
|
||||
"POT-Creation-Date: 2026-05-09 12:50+1000\n"
|
||||
"PO-Revision-Date: 2026-05-09 12:50+1000\n"
|
||||
"Last-Translator: romanvht\n"
|
||||
"Language-Team: none\n"
|
||||
"Language: ru\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@@ -197,6 +197,9 @@ msgstr "Включить автостарт"
|
||||
msgid "Enable built-in DNS resolver for domains handled by this section"
|
||||
msgstr "Включить встроенный DNS-резолвер для доменов, обрабатываемых в этом разделе"
|
||||
|
||||
msgid "Enable DNS resolve to get real IP when routing"
|
||||
msgstr "Разрешать домены в реальные IP-адреса перед маршрутизацией в outbound"
|
||||
|
||||
msgid "Enable Mixed Proxy"
|
||||
msgstr "Включить смешанный прокси"
|
||||
|
||||
@@ -419,6 +422,9 @@ msgstr "Локальные списки доменов"
|
||||
msgid "Local Subnet Lists"
|
||||
msgstr "Локальные списки подсетей"
|
||||
|
||||
msgid "Log Level"
|
||||
msgstr "Уровень логов"
|
||||
|
||||
msgid "Main DNS"
|
||||
msgstr "Основной DNS"
|
||||
|
||||
@@ -506,6 +512,9 @@ msgstr "Внешние списки доменов"
|
||||
msgid "Remote Subnet Lists"
|
||||
msgstr "Внешние списки подсетей"
|
||||
|
||||
msgid "Resolve real IP for routing"
|
||||
msgstr "Разрешение реальных IP-адресов"
|
||||
|
||||
msgid "Restart podkop"
|
||||
msgstr "Перезапустить Podkop"
|
||||
|
||||
@@ -584,6 +593,9 @@ msgstr "Выберите тип списка для добавления пол
|
||||
msgid "Select the list type for adding custom subnets"
|
||||
msgstr "Выберите тип списка для добавления пользовательских подсетей"
|
||||
|
||||
msgid "Select the log level for sing-box"
|
||||
msgstr "Выберите уровень логов для sing-box"
|
||||
|
||||
msgid "Select the network interface from which the traffic will originate"
|
||||
msgstr "Выберите сетевой интерфейс, с которого будет исходить трафик"
|
||||
|
||||
@@ -593,6 +605,12 @@ msgstr "Выберите сетевой интерфейс, на который
|
||||
msgid "Select the WAN interfaces to be monitored"
|
||||
msgstr "Выберите WAN интерфейсы для мониторинга"
|
||||
|
||||
msgid "Selector"
|
||||
msgstr "Selector"
|
||||
|
||||
msgid "Selector Proxy Links"
|
||||
msgstr "Ссылки прокси для Selector"
|
||||
|
||||
msgid "Services info"
|
||||
msgstr "Информация о сервисах"
|
||||
|
||||
@@ -761,6 +779,9 @@ msgstr "Посмотреть логи"
|
||||
msgid "Visit Wiki"
|
||||
msgstr "Перейти в wiki"
|
||||
|
||||
msgid "vless://, ss://, trojan://, socks4/5://, hy2/hysteria2:// links"
|
||||
msgstr ""
|
||||
|
||||
msgid "Warning: %s cannot be used together with %s. Previous selections have been removed."
|
||||
msgstr "Предупреждение: %s нельзя использовать вместе с %s. Предыдущие варианты были удалены."
|
||||
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) 2025 THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# Copyright (C) 2026 THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PODKOP package.
|
||||
# divocat <divocatt@gmail.com>, 2025.
|
||||
# romanvht <romanvht@gmail.com>, 2026.
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PODKOP\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-12-01 14:30+0200\n"
|
||||
"PO-Revision-Date: 2025-12-01 14:30+0200\n"
|
||||
"Last-Translator: divocat <divocatt@gmail.com>\n"
|
||||
"POT-Creation-Date: 2026-05-09 02:49+1000\n"
|
||||
"PO-Revision-Date: 2026-05-09 02:49+1000\n"
|
||||
"Last-Translator: romanvht <romanvht@gmail.com>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"Language: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@@ -44,15 +44,15 @@ msgstr ""
|
||||
msgid "Allows access to YACD from the WAN. Make sure to open the appropriate port in your firewall."
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:175
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:199
|
||||
msgid "Applicable for SOCKS and Shadowsocks proxy"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:420
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:444
|
||||
msgid "At least one valid domain must be specified. Comments-only content is not allowed."
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:501
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:525
|
||||
msgid "At least one valid subnet or IP must be specified. Comments-only content is not allowed."
|
||||
msgstr ""
|
||||
|
||||
@@ -119,7 +119,7 @@ msgstr ""
|
||||
msgid "Close"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:275
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:299
|
||||
msgid "Community Lists"
|
||||
msgstr ""
|
||||
|
||||
@@ -131,7 +131,7 @@ msgstr ""
|
||||
msgid "Configuration for Podkop service"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:22
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:23
|
||||
msgid "Configuration Type"
|
||||
msgstr ""
|
||||
|
||||
@@ -139,7 +139,7 @@ msgstr ""
|
||||
msgid "Connection Type"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:25
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:26
|
||||
msgid "Connection URL"
|
||||
msgstr ""
|
||||
|
||||
@@ -187,8 +187,8 @@ msgstr ""
|
||||
msgid "Disable the QUIC protocol to improve compatibility or fix issues with video streaming"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:366
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:446
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:390
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:470
|
||||
msgid "Disabled"
|
||||
msgstr ""
|
||||
|
||||
@@ -196,17 +196,17 @@ msgstr ""
|
||||
msgid "DNS on router"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:243
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:267
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:15
|
||||
msgid "DNS over HTTPS (DoH)"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:244
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:268
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:16
|
||||
msgid "DNS over TLS (DoT)"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:240
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:264
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:12
|
||||
msgid "DNS Protocol Type"
|
||||
msgstr ""
|
||||
@@ -215,7 +215,7 @@ msgstr ""
|
||||
msgid "DNS Rewrite TTL"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:253
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:277
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:24
|
||||
msgid "DNS Server"
|
||||
msgstr ""
|
||||
@@ -228,7 +228,7 @@ msgstr ""
|
||||
msgid "Do not panic, everything can be fixed, just..."
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:230
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:254
|
||||
msgid "Domain Resolver"
|
||||
msgstr ""
|
||||
|
||||
@@ -258,8 +258,8 @@ msgstr ""
|
||||
msgid "Downloading all lists via specific Proxy/VPN"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:367
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:447
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:391
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:471
|
||||
msgid "Dynamic List"
|
||||
msgstr ""
|
||||
|
||||
@@ -267,11 +267,15 @@ msgstr ""
|
||||
msgid "Enable autostart"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:231
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:255
|
||||
msgid "Enable built-in DNS resolver for domains handled by this section"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:639
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:691
|
||||
msgid "Enable DNS resolve to get real IP when routing"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:665
|
||||
msgid "Enable Mixed Proxy"
|
||||
msgstr ""
|
||||
|
||||
@@ -279,7 +283,7 @@ msgstr ""
|
||||
msgid "Enable Output Network Interface"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:640
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:666
|
||||
msgid "Enable the mixed proxy, allowing this section to route traffic through both HTTP and SOCKS proxies"
|
||||
msgstr ""
|
||||
|
||||
@@ -291,43 +295,43 @@ msgstr ""
|
||||
msgid "Enable YACD WAN Access"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:65
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:66
|
||||
msgid "Enter complete outbound configuration in JSON format"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:402
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:426
|
||||
msgid "Enter domain names separated by commas, spaces, or newlines. You can add comments using //"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:376
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:400
|
||||
msgid "Enter domain names without protocols, e.g. example.com or sub.example.com"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:456
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:480
|
||||
msgid "Enter subnets in CIDR notation (e.g. 103.21.244.0/22) or single IP addresses"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:114
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:138
|
||||
msgid "Every 1 minute"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:115
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:139
|
||||
msgid "Every 3 minutes"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:113
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:137
|
||||
msgid "Every 30 seconds"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:116
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:140
|
||||
msgid "Every 5 minutes"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:384
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:402
|
||||
msgid "Exclude NTP"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:385
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:403
|
||||
msgid "Exclude NTP protocol traffic from the tunnel to prevent it from being routed through the proxy or VPN"
|
||||
msgstr ""
|
||||
|
||||
@@ -339,17 +343,17 @@ msgstr ""
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:231
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:261
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:265
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:299
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:303
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:302
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:306
|
||||
msgid "Failed to execute!"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/methods/custom/getDashboardSections.ts:117
|
||||
#: src/podkop/methods/custom/getDashboardSections.ts:148
|
||||
#: src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:59
|
||||
msgid "Fastest"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:614
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:638
|
||||
msgid "Fully Routed IPs"
|
||||
msgstr ""
|
||||
|
||||
@@ -430,11 +434,11 @@ msgstr ""
|
||||
msgid "Invalid HY2 URL: obfs-password required when obfs is set"
|
||||
msgstr ""
|
||||
|
||||
#: src/validators/validateHysteriaUrl.ts:113
|
||||
#: src/validators/validateHysteriaUrl.ts:115
|
||||
msgid "Invalid HY2 URL: parsing failed"
|
||||
msgstr ""
|
||||
|
||||
#: src/validators/validateHysteriaUrl.ts:106
|
||||
#: src/validators/validateHysteriaUrl.ts:108
|
||||
msgid "Invalid HY2 URL: sni cannot be empty"
|
||||
msgstr ""
|
||||
|
||||
@@ -559,7 +563,7 @@ msgstr ""
|
||||
msgid "Issues detected"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:453
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:456
|
||||
msgid "Latest"
|
||||
msgstr ""
|
||||
|
||||
@@ -567,14 +571,18 @@ msgstr ""
|
||||
msgid "List Update Frequency"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:522
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:546
|
||||
msgid "Local Domain Lists"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:545
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:569
|
||||
msgid "Local Subnet Lists"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:384
|
||||
msgid "Log Level"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runDnsCheck.ts:72
|
||||
msgid "Main DNS"
|
||||
msgstr ""
|
||||
@@ -583,7 +591,7 @@ msgstr ""
|
||||
msgid "Memory Usage"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:650
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:678
|
||||
msgid "Mixed Proxy Port"
|
||||
msgstr ""
|
||||
|
||||
@@ -591,11 +599,11 @@ msgstr ""
|
||||
msgid "Monitored Interfaces"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:140
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:164
|
||||
msgid "Must be a number in the range of 50 - 1000"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:184
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:208
|
||||
msgid "Network Interface"
|
||||
msgstr ""
|
||||
|
||||
@@ -625,15 +633,15 @@ msgstr ""
|
||||
msgid "Operation timed out"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:26
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:29
|
||||
msgid "Outbound Config"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:64
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:65
|
||||
msgid "Outbound Configuration"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:443
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:446
|
||||
msgid "Outdated"
|
||||
msgstr ""
|
||||
|
||||
@@ -677,7 +685,7 @@ msgstr ""
|
||||
msgid "Podkop will not modify your DHCP configuration"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:34
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:36
|
||||
msgid "Proxy Configuration URL"
|
||||
msgstr ""
|
||||
|
||||
@@ -689,18 +697,22 @@ msgstr ""
|
||||
msgid "Proxy traffic is routed via FakeIP"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:309
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:333
|
||||
msgid "Regional options cannot be used together"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:568
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:592
|
||||
msgid "Remote Domain Lists"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:591
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:615
|
||||
msgid "Remote Subnet Lists"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:690
|
||||
msgid "Resolve real IP for routing"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/partials/renderAvailableActions.ts:49
|
||||
msgid "Restart podkop"
|
||||
msgstr ""
|
||||
@@ -713,7 +725,7 @@ msgstr ""
|
||||
msgid "Router DNS is routed through sing-box"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:395
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:413
|
||||
msgid "Routing Excluded IPs"
|
||||
msgstr ""
|
||||
|
||||
@@ -745,7 +757,7 @@ msgstr ""
|
||||
msgid "Run Diagnostic"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:328
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:352
|
||||
msgid "Russia inside restrictions"
|
||||
msgstr ""
|
||||
|
||||
@@ -757,7 +769,7 @@ msgstr ""
|
||||
msgid "Sections"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:276
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:300
|
||||
msgid "Select a predefined list for routing"
|
||||
msgstr ""
|
||||
|
||||
@@ -773,15 +785,15 @@ msgstr ""
|
||||
msgid "Select how often the domain or subnet lists are updated automatically"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:23
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:24
|
||||
msgid "Select how to configure the proxy"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:185
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:209
|
||||
msgid "Select network interface for VPN connection"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:254
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:278
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:25
|
||||
msgid "Select or enter DNS server address"
|
||||
msgstr ""
|
||||
@@ -794,18 +806,22 @@ msgstr ""
|
||||
msgid "Select path for sing-box config file. Change this ONLY if you know what you are doing"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:241
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:265
|
||||
msgid "Select the DNS protocol type for the domain resolver"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:364
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:388
|
||||
msgid "Select the list type for adding custom domains"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:444
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:468
|
||||
msgid "Select the list type for adding custom subnets"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:385
|
||||
msgid "Select the log level for sing-box"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:90
|
||||
msgid "Select the network interface from which the traffic will originate"
|
||||
msgstr ""
|
||||
@@ -818,6 +834,14 @@ msgstr ""
|
||||
msgid "Select the WAN interfaces to be monitored"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:27
|
||||
msgid "Selector"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:88
|
||||
msgid "Selector Proxy Links"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/dashboard/initController.ts:340
|
||||
msgid "Services info"
|
||||
msgstr ""
|
||||
@@ -863,24 +887,24 @@ msgstr ""
|
||||
msgid "Source Network Interface"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:396
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:414
|
||||
msgid "Specify a local IP address to be excluded from routing"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:615
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:639
|
||||
msgid "Specify local IP addresses or subnets whose traffic will always be routed through the configured route"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:569
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:593
|
||||
msgid "Specify remote URLs to download and use domain lists"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:592
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:616
|
||||
msgid "Specify remote URLs to download and use subnet lists"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:523
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:546
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:547
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:570
|
||||
msgid "Specify the path to the list file located on the router filesystem"
|
||||
msgstr ""
|
||||
|
||||
@@ -912,8 +936,8 @@ msgstr ""
|
||||
msgid "Test latency"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:368
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:448
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:392
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:472
|
||||
msgid "Text List"
|
||||
msgstr ""
|
||||
|
||||
@@ -921,15 +945,15 @@ msgstr ""
|
||||
msgid "The DNS server used to look up the IP address of an upstream DNS server"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:111
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:135
|
||||
msgid "The interval between connectivity tests"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:124
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:148
|
||||
msgid "The maximum difference in response times (ms) allowed when comparing servers"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:147
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:171
|
||||
msgid "The URL used to test server connectivity"
|
||||
msgstr ""
|
||||
|
||||
@@ -957,12 +981,12 @@ msgstr ""
|
||||
msgid "TTL value cannot be empty"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:245
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:269
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:17
|
||||
msgid "UDP (Unprotected DNS)"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:174
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:198
|
||||
msgid "UDP over TCP"
|
||||
msgstr ""
|
||||
|
||||
@@ -972,7 +996,7 @@ msgstr ""
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:41
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:42
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:43
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:417
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:420
|
||||
msgid "unknown"
|
||||
msgstr ""
|
||||
|
||||
@@ -993,47 +1017,47 @@ msgstr ""
|
||||
msgid "URL must use one of the following protocols:"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:27
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:28
|
||||
msgid "URLTest"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:110
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:134
|
||||
msgid "URLTest Check Interval"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:87
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:111
|
||||
msgid "URLTest Proxy Links"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:146
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:170
|
||||
msgid "URLTest Testing URL"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:123
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:147
|
||||
msgid "URLTest Tolerance"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:363
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:387
|
||||
msgid "User Domain List Type"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:375
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:399
|
||||
msgid "User Domains"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:401
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:425
|
||||
msgid "User Domains List"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:443
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:467
|
||||
msgid "User Subnet List Type"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:455
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:479
|
||||
msgid "User Subnets"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:481
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:505
|
||||
msgid "User Subnets List"
|
||||
msgstr ""
|
||||
|
||||
@@ -1041,7 +1065,7 @@ msgstr ""
|
||||
#: src/validators/validateDns.ts:18
|
||||
#: src/validators/validateDomain.ts:13
|
||||
#: src/validators/validateDomain.ts:30
|
||||
#: src/validators/validateHysteriaUrl.ts:111
|
||||
#: src/validators/validateHysteriaUrl.ts:113
|
||||
#: src/validators/validateIp.ts:8
|
||||
#: src/validators/validateOutboundJson.ts:7
|
||||
#: src/validators/validatePath.ts:16
|
||||
@@ -1054,8 +1078,8 @@ msgstr ""
|
||||
msgid "Valid"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:434
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:513
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:458
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:537
|
||||
msgid "Validation errors:"
|
||||
msgstr ""
|
||||
|
||||
@@ -1068,11 +1092,17 @@ msgstr ""
|
||||
msgid "Visit Wiki"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:311
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:37
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:89
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:112
|
||||
msgid "vless://, ss://, trojan://, socks4/5://, hy2/hysteria2:// links"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:335
|
||||
msgid "Warning: %s cannot be used together with %s. Previous selections have been removed."
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:330
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:354
|
||||
msgid "Warning: Russia inside can only be used with %s. %s already in Russia inside and have been removed from selection."
|
||||
msgstr ""
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
config settings 'settings'
|
||||
option dns_type 'udp'
|
||||
option dns_server '8.8.8.8'
|
||||
option dns_server '77.88.8.8'
|
||||
option bootstrap_dns_server '77.88.8.8'
|
||||
option dns_rewrite_ttl '60'
|
||||
list source_network_interfaces 'br-lan'
|
||||
@@ -16,6 +16,7 @@ config settings 'settings'
|
||||
option dont_touch_dhcp '0'
|
||||
option config_path '/etc/sing-box/config.json'
|
||||
option cache_path '/tmp/sing-box/cache.db'
|
||||
option log_level 'warn'
|
||||
option exclude_ntp '0'
|
||||
option shutdown_correctly '0'
|
||||
#list routing_excluded_ips '192.168.1.3'
|
||||
|
||||
@@ -12,6 +12,7 @@ check_required_file() {
|
||||
PODKOP_LIB="/usr/lib/podkop"
|
||||
check_required_file /lib/functions.sh
|
||||
check_required_file /lib/config/uci.sh
|
||||
check_required_file /lib/functions/network.sh
|
||||
check_required_file "$PODKOP_LIB/constants.sh"
|
||||
check_required_file "$PODKOP_LIB/nft.sh"
|
||||
check_required_file "$PODKOP_LIB/helpers.sh"
|
||||
@@ -19,8 +20,9 @@ check_required_file "$PODKOP_LIB/sing_box_config_manager.sh"
|
||||
check_required_file "$PODKOP_LIB/sing_box_config_facade.sh"
|
||||
check_required_file "$PODKOP_LIB/logging.sh"
|
||||
check_required_file "$PODKOP_LIB/rulesets.sh"
|
||||
. /lib/config/uci.sh
|
||||
. /lib/functions.sh
|
||||
. /lib/config/uci.sh
|
||||
. /lib/functions/network.sh
|
||||
. "$PODKOP_LIB/constants.sh"
|
||||
. "$PODKOP_LIB/nft.sh"
|
||||
. "$PODKOP_LIB/helpers.sh"
|
||||
@@ -76,7 +78,7 @@ check_requirements() {
|
||||
if has_outbound_section; then
|
||||
log "Outbound section found" "debug"
|
||||
else
|
||||
log "Outbound section not found. Please check your configuration file (missing proxy_string, interface, outbound_json, or urltest_proxy_links). Aborted." "error"
|
||||
log "Outbound section not found. Please check your configuration file (missing proxy_string, selector_proxy_links, urltest_proxy_links, outbound_json, or interface). Aborted." "error"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
@@ -86,12 +88,13 @@ _check_outbound_section() {
|
||||
local proxy_string interface outbound_json urltest_proxy_links
|
||||
|
||||
config_get proxy_string "$section" "proxy_string"
|
||||
config_get interface "$section" "interface"
|
||||
config_get outbound_json "$section" "outbound_json"
|
||||
config_get selector_proxy_links "$section" "selector_proxy_links"
|
||||
config_get urltest_proxy_links "$section" "urltest_proxy_links"
|
||||
config_get outbound_json "$section" "outbound_json"
|
||||
config_get interface "$section" "interface"
|
||||
|
||||
if [ -n "$proxy_string" ] || [ -n "$interface" ] ||
|
||||
[ -n "$outbound_json" ] || [ -n "$urltest_proxy_links" ]; then
|
||||
if [ -n "$proxy_string" ] || [ -n "$selector_proxy_links" ] || [ -n "$urltest_proxy_links" ] ||
|
||||
[ -n "$outbound_json" ] || [ -n "$interface" ]; then
|
||||
section_exists=0
|
||||
fi
|
||||
}
|
||||
@@ -161,12 +164,12 @@ stop_main() {
|
||||
|
||||
log "Flush ip rule"
|
||||
if ip rule list | grep -q "podkop"; then
|
||||
ip rule del fwmark 0x105 table podkop priority 105
|
||||
ip rule del fwmark "$NFT_FAKEIP_MARK"/"$NFT_FAKEIP_MARK" table "$RT_TABLE_NAME" priority 105
|
||||
fi
|
||||
|
||||
log "Flush ip route"
|
||||
if ip route list table podkop > /dev/null 2>&1; then
|
||||
ip route flush table podkop
|
||||
if ip route list table "$RT_TABLE_NAME" > /dev/null 2>&1; then
|
||||
ip route flush table "$RT_TABLE_NAME"
|
||||
fi
|
||||
|
||||
log "Stop sing-box"
|
||||
@@ -248,20 +251,18 @@ br_netfilter_disable() {
|
||||
# Main funcs
|
||||
|
||||
route_table_rule_mark() {
|
||||
local table=podkop
|
||||
grep -q "105 $RT_TABLE_NAME" /etc/iproute2/rt_tables || echo "105 $RT_TABLE_NAME" >> /etc/iproute2/rt_tables
|
||||
|
||||
grep -q "105 $table" /etc/iproute2/rt_tables || echo "105 $table" >> /etc/iproute2/rt_tables
|
||||
|
||||
if ! ip route list table $table | grep -q "local default dev lo scope host"; then
|
||||
if ! ip route list table "$RT_TABLE_NAME" 2> /dev/null | grep -q "local default dev lo scope host"; then
|
||||
log "Added route for tproxy" "debug"
|
||||
ip route add local 0.0.0.0/0 dev lo table $table
|
||||
ip route add local 0.0.0.0/0 dev lo table "$RT_TABLE_NAME"
|
||||
else
|
||||
log "Route for tproxy exists" "debug"
|
||||
fi
|
||||
|
||||
if ! ip rule list | grep -q "from all fwmark 0x105 lookup $table"; then
|
||||
if ! ip rule list | grep -q "from all fwmark $NFT_FAKEIP_MARK/$NFT_FAKEIP_MARK lookup $RT_TABLE_NAME"; then
|
||||
log "Create marking rule" "debug"
|
||||
ip -4 rule add fwmark 0x105 table $table priority 105
|
||||
ip -4 rule add fwmark "$NFT_FAKEIP_MARK"/"$NFT_FAKEIP_MARK" table "$RT_TABLE_NAME" priority 105
|
||||
else
|
||||
log "Marking rule exist" "debug"
|
||||
fi
|
||||
@@ -311,19 +312,20 @@ create_nft_rules() {
|
||||
nft add chain inet "$NFT_TABLE_NAME" mangle_output '{ type route hook output priority -150; policy accept; }'
|
||||
nft add chain inet "$NFT_TABLE_NAME" proxy '{ type filter hook prerouting priority -100; policy accept; }'
|
||||
|
||||
nft add rule inet "$NFT_TABLE_NAME" mangle iifname "@$NFT_INTERFACE_SET_NAME" ip daddr "@$NFT_COMMON_SET_NAME" meta l4proto tcp meta mark set 0x105 counter
|
||||
nft add rule inet "$NFT_TABLE_NAME" mangle iifname "@$NFT_INTERFACE_SET_NAME" ip daddr "@$NFT_COMMON_SET_NAME" meta l4proto udp meta mark set 0x105 counter
|
||||
nft add rule inet "$NFT_TABLE_NAME" mangle iifname "@$NFT_INTERFACE_SET_NAME" ip daddr "$SB_FAKEIP_INET4_RANGE" meta l4proto tcp meta mark set 0x105 counter
|
||||
nft add rule inet "$NFT_TABLE_NAME" mangle iifname "@$NFT_INTERFACE_SET_NAME" ip daddr "$SB_FAKEIP_INET4_RANGE" meta l4proto udp meta mark set 0x105 counter
|
||||
nft add rule inet "$NFT_TABLE_NAME" mangle iifname "@$NFT_INTERFACE_SET_NAME" ip daddr "@$NFT_COMMON_SET_NAME" meta l4proto tcp meta mark set "$NFT_FAKEIP_MARK" counter
|
||||
nft add rule inet "$NFT_TABLE_NAME" mangle iifname "@$NFT_INTERFACE_SET_NAME" ip daddr "@$NFT_COMMON_SET_NAME" meta l4proto udp meta mark set "$NFT_FAKEIP_MARK" counter
|
||||
nft add rule inet "$NFT_TABLE_NAME" mangle iifname "@$NFT_INTERFACE_SET_NAME" ip daddr "$SB_FAKEIP_INET4_RANGE" meta l4proto tcp meta mark set "$NFT_FAKEIP_MARK" counter
|
||||
nft add rule inet "$NFT_TABLE_NAME" mangle iifname "@$NFT_INTERFACE_SET_NAME" ip daddr "$SB_FAKEIP_INET4_RANGE" meta l4proto udp meta mark set "$NFT_FAKEIP_MARK" counter
|
||||
|
||||
nft add rule inet "$NFT_TABLE_NAME" proxy meta mark 0x105 meta l4proto tcp tproxy ip to 127.0.0.1:1602 counter
|
||||
nft add rule inet "$NFT_TABLE_NAME" proxy meta mark 0x105 meta l4proto udp tproxy ip to 127.0.0.1:1602 counter
|
||||
nft add rule inet "$NFT_TABLE_NAME" proxy meta mark \& "$NFT_FAKEIP_MARK" == "$NFT_FAKEIP_MARK" meta l4proto tcp tproxy ip to 127.0.0.1:1602 counter
|
||||
nft add rule inet "$NFT_TABLE_NAME" proxy meta mark \& "$NFT_FAKEIP_MARK" == "$NFT_FAKEIP_MARK" meta l4proto udp tproxy ip to 127.0.0.1:1602 counter
|
||||
|
||||
nft add rule inet "$NFT_TABLE_NAME" mangle_output ip daddr "@$NFT_LOCALV4_SET_NAME" return
|
||||
nft add rule inet "$NFT_TABLE_NAME" mangle_output ip daddr "@$NFT_COMMON_SET_NAME" meta l4proto tcp meta mark set 0x105 counter
|
||||
nft add rule inet "$NFT_TABLE_NAME" mangle_output ip daddr "@$NFT_COMMON_SET_NAME" meta l4proto udp meta mark set 0x105 counter
|
||||
nft add rule inet "$NFT_TABLE_NAME" mangle_output ip daddr "$SB_FAKEIP_INET4_RANGE" meta l4proto tcp meta mark set 0x105 counter
|
||||
nft add rule inet "$NFT_TABLE_NAME" mangle_output ip daddr "$SB_FAKEIP_INET4_RANGE" meta l4proto udp meta mark set 0x105 counter
|
||||
nft add rule inet "$NFT_TABLE_NAME" mangle_output meta mark "$NFT_OUTBOUND_MARK" counter return
|
||||
nft add rule inet "$NFT_TABLE_NAME" mangle_output ip daddr "@$NFT_COMMON_SET_NAME" meta l4proto tcp meta mark set "$NFT_FAKEIP_MARK" counter
|
||||
nft add rule inet "$NFT_TABLE_NAME" mangle_output ip daddr "@$NFT_COMMON_SET_NAME" meta l4proto udp meta mark set "$NFT_FAKEIP_MARK" counter
|
||||
nft add rule inet "$NFT_TABLE_NAME" mangle_output ip daddr "$SB_FAKEIP_INET4_RANGE" meta l4proto tcp meta mark set "$NFT_FAKEIP_MARK" counter
|
||||
nft add rule inet "$NFT_TABLE_NAME" mangle_output ip daddr "$SB_FAKEIP_INET4_RANGE" meta l4proto udp meta mark set "$NFT_FAKEIP_MARK" counter
|
||||
|
||||
local exclude_ntp
|
||||
config_get_bool exclude_ntp "settings" "exclude_ntp" "0"
|
||||
@@ -398,7 +400,6 @@ dnsmasq_restore() {
|
||||
log "Restoring noresolv" "debug"
|
||||
noresolv="$(uci_get "dhcp" "@dnsmasq[0]" "podkop_noresolv")"
|
||||
if [ -z "$noresolv" ]; then
|
||||
uci_remove "dhcp" "@dnsmasq[0]" "noresolv"
|
||||
uci_set "dhcp" "@dnsmasq[0]" "noresolv" 0
|
||||
else
|
||||
uci_set "dhcp" "@dnsmasq[0]" "noresolv" "$noresolv"
|
||||
@@ -417,6 +418,10 @@ dnsmasq_restore() {
|
||||
elif file_exists "$resolvfile"; then
|
||||
log "Backup DNS servers not found, using default resolvfile" "debug"
|
||||
uci_set "dhcp" "@dnsmasq[0]" "resolvfile" "$resolvfile"
|
||||
if [ -n "$noresolv" ] && [ "$noresolv" -eq 1 ]; then
|
||||
log "Disabling noresolv option to use system resolvfile" "debug"
|
||||
uci_set "dhcp" "@dnsmasq[0]" "noresolv" 0
|
||||
fi
|
||||
else
|
||||
log "Backup DNS servers and default resolvfile not found, possible resolving issues" "warn"
|
||||
fi
|
||||
@@ -485,7 +490,7 @@ list_update() {
|
||||
local i
|
||||
|
||||
# DNS Check
|
||||
for i in $(seq 1 $nslookup_timeout); do
|
||||
for i in $(seq 1 $nslookup_attempts); do
|
||||
if nslookup -timeout=$nslookup_timeout openwrt.org > /dev/null 2>&1; then
|
||||
echolog "✅ DNS check passed"
|
||||
break
|
||||
@@ -588,7 +593,9 @@ sing_box_init_config() {
|
||||
sing_box_configure_log() {
|
||||
log "Configure the log section of a sing-box JSON configuration"
|
||||
|
||||
config=$(sing_box_cm_configure_log "$config" false "$SB_DEFAULT_LOG_LEVEL" false)
|
||||
local log_level
|
||||
config_get log_level "settings" "log_level" "warn"
|
||||
config=$(sing_box_cm_configure_log "$config" false "$log_level" false)
|
||||
}
|
||||
|
||||
sing_box_configure_inbounds() {
|
||||
@@ -641,6 +648,35 @@ configure_outbound_handler() {
|
||||
config_get json_outbound "$section" "outbound_json"
|
||||
config=$(sing_box_cf_add_json_outbound "$config" "$section" "$json_outbound")
|
||||
;;
|
||||
selector)
|
||||
log "Detected proxy configuration type: selector" "debug"
|
||||
local selector_proxy_links udp_over_tcp i outbound_tags outbound_tag default_outbound
|
||||
config_get selector_proxy_links "$section" "selector_proxy_links"
|
||||
config_get udp_over_tcp "$section" "enable_udp_over_tcp"
|
||||
|
||||
if [ -z "$selector_proxy_links" ]; then
|
||||
log "URLTest proxy links is not set. Aborted." "fatal"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
i=1
|
||||
for link in $selector_proxy_links; do
|
||||
config="$(sing_box_cf_add_proxy_outbound "$config" "$section-$i" "$link" "$udp_over_tcp")"
|
||||
outbound_tag="$(get_outbound_tag_by_section "$section-$i")"
|
||||
if [ -z "$outbound_tags" ]; then
|
||||
outbound_tags="$outbound_tag"
|
||||
default_outbound="$outbound_tag"
|
||||
else
|
||||
outbound_tags="$outbound_tags,$outbound_tag"
|
||||
fi
|
||||
i=$((i + 1))
|
||||
done
|
||||
|
||||
selector_tag="$(get_outbound_tag_by_section "$section")"
|
||||
selector_outbounds="$(comma_string_to_json_array "$outbound_tags")"
|
||||
config="$(sing_box_cm_add_selector_outbound "$config" "$selector_tag" "$selector_outbounds" \
|
||||
"$default_outbound")"
|
||||
;;
|
||||
urltest)
|
||||
log "Detected proxy configuration type: urltest" "debug"
|
||||
local urltest_proxy_links udp_over_tcp i urltest_tag selector_tag outbound_tag outbound_tags \
|
||||
@@ -715,6 +751,9 @@ configure_outbound_handler() {
|
||||
block)
|
||||
log "Connection type 'block' detected for the $section section – no outbound will be created (handled via reject route rules)"
|
||||
;;
|
||||
exclusion)
|
||||
log "Connection type 'exclusion' detected for the $section section – no outbound will be created (handled via route rules)"
|
||||
;;
|
||||
*)
|
||||
log "Unknown connection type '$connection_type' for the $section section. Aborted." "fatal"
|
||||
exit 1
|
||||
@@ -783,9 +822,8 @@ sing_box_configure_route() {
|
||||
config=$(sing_box_cf_proxy_domain "$config" "$SB_TPROXY_INBOUND_TAG" "$CHECK_PROXY_IP_DOMAIN" "$first_outbound_tag")
|
||||
config=$(sing_box_cf_override_domain_port "$config" "$FAKEIP_TEST_DOMAIN" 8443)
|
||||
|
||||
config_foreach include_source_ips_in_routing_handler "section"
|
||||
|
||||
configure_common_reject_route_rule
|
||||
configure_common_direct_route_rule
|
||||
|
||||
local routing_excluded_ips
|
||||
config_get routing_excluded_ips "settings" "routing_excluded_ips"
|
||||
@@ -795,6 +833,8 @@ sing_box_configure_route() {
|
||||
config_list_foreach "settings" "routing_excluded_ips" exclude_source_ip_from_routing_handler "$rule_tag"
|
||||
fi
|
||||
|
||||
config_foreach include_source_ips_in_routing_handler "section"
|
||||
|
||||
config_foreach configure_routing_for_section_lists "section"
|
||||
}
|
||||
|
||||
@@ -815,7 +855,7 @@ include_source_ips_in_routing_handler() {
|
||||
|
||||
configure_common_reject_route_rule() {
|
||||
local block_sections block_section_lists_enabled
|
||||
block_sections="$(get_block_sections)"
|
||||
block_sections="$(get_sections_by_connection_type "block")"
|
||||
block_section_lists_enabled=0
|
||||
|
||||
if [ -n "$block_sections" ]; then
|
||||
@@ -833,6 +873,27 @@ configure_common_reject_route_rule() {
|
||||
fi
|
||||
}
|
||||
|
||||
configure_common_direct_route_rule() {
|
||||
local exclusion_sections exclusion_section_list_enabled
|
||||
exclusion_sections="$(get_sections_by_connection_type "exclusion")"
|
||||
exclusion_section_list_enabled=0
|
||||
|
||||
if [ -n "$exclusion_sections" ]; then
|
||||
for exclusion_section in $exclusion_sections; do
|
||||
if section_has_enabled_lists "$exclusion_section"; then
|
||||
exclusion_section_list_enabled=1
|
||||
break
|
||||
fi
|
||||
done
|
||||
if [ "$exclusion_section_list_enabled" -eq 1 ]; then
|
||||
config=$(sing_box_cm_add_route_rule "$config" "$SB_EXCLUSION_RULE_TAG" "$SB_TPROXY_INBOUND_TAG" \
|
||||
"$SB_DIRECT_OUTBOUND_TAG")
|
||||
else
|
||||
log "Exclusion sections does not have any enabled list, route rule is not required" "warn"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
include_source_ip_in_routing_handler() {
|
||||
local source_ip="$1"
|
||||
local rule_tag="$2"
|
||||
@@ -857,7 +918,7 @@ configure_routing_for_section_lists() {
|
||||
fi
|
||||
|
||||
local community_lists user_domain_list_type user_subnet_list_type local_domain_lists local_subnet_lists \
|
||||
remote_domain_lists remote_subnet_lists section_connection_type route_rule_tag
|
||||
remote_domain_lists remote_subnet_lists section_connection_type route_rule_tag resolve_real_ip_for_routing
|
||||
config_get community_lists "$section" "community_lists"
|
||||
config_get user_domain_list_type "$section" "user_domain_list_type" "disabled"
|
||||
config_get user_subnet_list_type "$section" "user_subnet_list_type" "disabled"
|
||||
@@ -866,14 +927,25 @@ configure_routing_for_section_lists() {
|
||||
config_get remote_domain_lists "$section" "remote_domain_lists"
|
||||
config_get remote_subnet_lists "$section" "remote_subnet_lists"
|
||||
config_get section_connection_type "$section" "connection_type"
|
||||
config_get_bool resolve_real_ip_for_routing "$section" "resolve_real_ip_for_routing" 0
|
||||
|
||||
if [ "$section_connection_type" = "block" ]; then
|
||||
route_rule_tag="$SB_REJECT_RULE_TAG"
|
||||
else
|
||||
case "$section_connection_type" in
|
||||
proxy | vpn)
|
||||
route_rule_tag="$(gen_id)"
|
||||
outbound_tag=$(get_outbound_tag_by_section "$section")
|
||||
config=$(sing_box_cm_add_route_rule "$config" "$route_rule_tag" "$SB_TPROXY_INBOUND_TAG" "$outbound_tag")
|
||||
fi
|
||||
;;
|
||||
block)
|
||||
route_rule_tag="$SB_REJECT_RULE_TAG"
|
||||
;;
|
||||
exclusion)
|
||||
route_rule_tag="$SB_EXCLUSION_RULE_TAG"
|
||||
;;
|
||||
*)
|
||||
log "Unsupported '$section_connection_type' connection type. Skipping routing for '$section' section" "fatal"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ -n "$community_lists" ]; then
|
||||
log "Processing community list routing rules for '$section' section"
|
||||
@@ -911,6 +983,11 @@ configure_routing_for_section_lists() {
|
||||
config_list_foreach "$section" "remote_subnet_lists" configure_remote_domain_or_subnet_list_handler \
|
||||
"subnets" "$section" "$route_rule_tag"
|
||||
fi
|
||||
|
||||
if [ "$resolve_real_ip_for_routing" -eq 1 ]; then
|
||||
config=$(sing_box_cm_add_resolve_rule "$config" "$route_rule_tag" "$(gen_id)" "$SB_DNS_SERVER_TAG")
|
||||
log "Added resolve rule for '$section' section" "debug"
|
||||
fi
|
||||
}
|
||||
|
||||
configure_community_list_handler() {
|
||||
@@ -1239,7 +1316,10 @@ import_community_service_subnet_list_handler() {
|
||||
URL=$SUBNETS_DISCORD
|
||||
nft_create_ipv4_set "$NFT_TABLE_NAME" "$NFT_DISCORD_SET_NAME"
|
||||
nft add rule inet "$NFT_TABLE_NAME" mangle iifname "@$NFT_INTERFACE_SET_NAME" ip daddr \
|
||||
"@$NFT_DISCORD_SET_NAME" udp dport '{ 50000-65535 }' meta mark set 0x105 counter
|
||||
"@$NFT_DISCORD_SET_NAME" udp dport '{ 19000-20000, 50000-65535 }' meta mark set "$NFT_FAKEIP_MARK" counter
|
||||
;;
|
||||
"roblox")
|
||||
URL=$SUBNETS_ROBLOX
|
||||
;;
|
||||
*) return 0 ;;
|
||||
esac
|
||||
@@ -1464,12 +1544,16 @@ get_first_outbound_section() {
|
||||
echo "$first_section"
|
||||
}
|
||||
|
||||
get_block_sections() {
|
||||
uci show podkop | grep "\.connection_type='block'" | cut -d'.' -f2
|
||||
get_sections_by_connection_type() {
|
||||
local connection_type="$1"
|
||||
|
||||
uci show podkop | grep "\.connection_type='$connection_type'" | cut -d'.' -f2
|
||||
}
|
||||
|
||||
block_section_exists() {
|
||||
if uci show podkop | grep -q "\.connection_type='block'"; then
|
||||
section_by_connection_type_exists() {
|
||||
local connection_type="$1"
|
||||
|
||||
if uci show podkop | grep -q "\.connection_type='$connection_type'"; then
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
@@ -1505,12 +1589,16 @@ section_has_enabled_lists() {
|
||||
get_service_listen_address() {
|
||||
local service_listen_address
|
||||
|
||||
service_listen_address="$(uci_get "network" "lan" "ipaddr")"
|
||||
|
||||
if [ -z "$service_listen_address" ]; then
|
||||
config_get service_listen_address "settings" "service_listen_address" # TODO(ampetelin): Remove after testing
|
||||
config_get service_listen_address "settings" "service_listen_address"
|
||||
if [ -n "$service_listen_address" ]; then
|
||||
log "Attention! The service_listen_address option is being used, overriding the automatic detection of the listening IP address!" "warn"
|
||||
echo "$service_listen_address"
|
||||
return 0
|
||||
fi
|
||||
|
||||
local interface="lan"
|
||||
network_get_ipaddr service_listen_address "$interface"
|
||||
|
||||
if [ -z "$service_listen_address" ]; then
|
||||
log "Failed to determine the listening IP address. Please open an issue to report this problem: https://github.com/itdoginfo/podkop/issues" "error"
|
||||
return 1
|
||||
@@ -1524,8 +1612,10 @@ nft_list_all_traffic_from_ip() {
|
||||
local ip="$1"
|
||||
|
||||
if ! nft list chain inet "$NFT_TABLE_NAME" mangle | grep -q "ip saddr $ip"; then
|
||||
nft insert rule inet "$NFT_TABLE_NAME" mangle iifname "@$NFT_INTERFACE_SET_NAME" ip saddr "$ip" meta l4proto tcp meta mark set 0x105 counter
|
||||
nft insert rule inet "$NFT_TABLE_NAME" mangle iifname "@$NFT_INTERFACE_SET_NAME" ip saddr "$ip" meta l4proto udp meta mark set 0x105 counter
|
||||
nft insert rule inet "$NFT_TABLE_NAME" mangle iifname "@$NFT_INTERFACE_SET_NAME" ip saddr "$ip" \
|
||||
meta l4proto tcp meta mark set "$NFT_FAKEIP_MARK" counter
|
||||
nft insert rule inet "$NFT_TABLE_NAME" mangle iifname "@$NFT_INTERFACE_SET_NAME" ip saddr "$ip" \
|
||||
meta l4proto udp meta mark set "$NFT_FAKEIP_MARK" counter
|
||||
nft insert rule inet "$NFT_TABLE_NAME" mangle ip saddr "$ip" ip daddr @localv4 return
|
||||
fi
|
||||
}
|
||||
@@ -1750,6 +1840,7 @@ show_config() {
|
||||
sed -e 's/\(option proxy_string\).*/\1 '\''MASKED'\''/g' \
|
||||
-e '/option outbound_json/,/^}/c\ option outbound_json '\''MASKED'\''' \
|
||||
-e 's/\(list urltest_proxy_links\).*/\1 '\''MASKED'\''/g' \
|
||||
-e 's/\(list selector_proxy_links\).*/\1 '\''MASKED'\''/g' \
|
||||
-e "s@\\(option dns_server '[^/]*\\)/[^']*'@\\1/MASKED'@g" \
|
||||
-e "s@\\(option domain_resolver_dns_server '[^/]*\\)/[^']*'@\\1/MASKED'@g" \
|
||||
-e 's/\(option yacd_secret_key\).*/\1 '\''MASKED'\''/g' \
|
||||
|
||||
@@ -12,6 +12,7 @@ TMP_RULESET_FOLDER="$TMP_SING_BOX_FOLDER/rulesets"
|
||||
CLOUDFLARE_OCTETS="8.47 162.159 188.114" # Endpoints https://github.com/ampetelin/warp-endpoint-checker
|
||||
JQ_REQUIRED_VERSION="1.7.1"
|
||||
COREUTILS_BASE64_REQUIRED_VERSION="9.7"
|
||||
RT_TABLE_NAME="podkop"
|
||||
|
||||
## nft
|
||||
NFT_TABLE_NAME="PodkopTable"
|
||||
@@ -19,11 +20,11 @@ NFT_LOCALV4_SET_NAME="localv4"
|
||||
NFT_COMMON_SET_NAME="podkop_subnets"
|
||||
NFT_DISCORD_SET_NAME="podkop_discord_subnets"
|
||||
NFT_INTERFACE_SET_NAME="interfaces"
|
||||
NFT_FAKEIP_MARK="0x00100000"
|
||||
NFT_OUTBOUND_MARK="0x00200000"
|
||||
|
||||
## sing-box
|
||||
SB_REQUIRED_VERSION="1.12.0"
|
||||
# Log
|
||||
SB_DEFAULT_LOG_LEVEL="warn"
|
||||
# DNS
|
||||
SB_DNS_SERVER_TAG="dns-server"
|
||||
SB_FAKEIP_DNS_SERVER_TAG="fakeip-server"
|
||||
@@ -45,23 +46,21 @@ SB_SERVICE_MIXED_INBOUND_PORT=4534
|
||||
SB_DIRECT_OUTBOUND_TAG="direct-out"
|
||||
# Route
|
||||
SB_REJECT_RULE_TAG="reject-rule-tag"
|
||||
SB_EXCLUSION_RULE_TAG="exclusion-rule-tag"
|
||||
# Experimental
|
||||
SB_CLASH_API_CONTROLLER_PORT=9090
|
||||
|
||||
## Lists
|
||||
GITHUB_RAW_URL="https://raw.githubusercontent.com/itdoginfo/allow-domains/main"
|
||||
SRS_MAIN_URL="https://github.com/itdoginfo/allow-domains/releases/latest/download"
|
||||
DOMAINS_RU_INSIDE="${GITHUB_RAW_URL}/Russia/inside-dnsmasq-nfset.lst"
|
||||
DOMAINS_RU_OUTSIDE="${GITHUB_RAW_URL}/Russia/outside-dnsmasq-nfset.lst"
|
||||
DOMAINS_UA="${GITHUB_RAW_URL}/Ukraine/inside-dnsmasq-nfset.lst"
|
||||
DOMAINS_YOUTUBE="${GITHUB_RAW_URL}/Services/youtube.lst"
|
||||
SUBNETS_TWITTER="${GITHUB_RAW_URL}/Subnets/IPv4/twitter.lst"
|
||||
SUBNETS_META="${GITHUB_RAW_URL}/Subnets/IPv4/meta.lst"
|
||||
SUBNETS_DISCORD="${GITHUB_RAW_URL}/Subnets/IPv4/discord.lst"
|
||||
SUBNETS_ROBLOX="${GITHUB_RAW_URL}/Subnets/IPv4/roblox.lst"
|
||||
SUBNETS_TELERAM="${GITHUB_RAW_URL}/Subnets/IPv4/telegram.lst"
|
||||
SUBNETS_CLOUDFLARE="${GITHUB_RAW_URL}/Subnets/IPv4/cloudflare.lst"
|
||||
SUBNETS_HETZNER="${GITHUB_RAW_URL}/Subnets/IPv4/hetzner.lst"
|
||||
SUBNETS_OVH="${GITHUB_RAW_URL}/Subnets/IPv4/ovh.lst"
|
||||
SUBNETS_DIGITALOCEAN="${GITHUB_RAW_URL}/Subnets/IPv4/digitalocean.lst"
|
||||
SUBNETS_CLOUDFRONT="${GITHUB_RAW_URL}/Subnets/IPv4/cloudfront.lst"
|
||||
COMMUNITY_SERVICES="russia_inside russia_outside ukraine_inside geoblock block porn news anime youtube hdrezka tiktok google_ai google_play hodca discord meta twitter cloudflare cloudfront digitalocean hetzner ovh telegram"
|
||||
COMMUNITY_SERVICES="russia_inside russia_outside ukraine_inside geoblock block porn news anime youtube hdrezka tiktok google_ai google_play hodca discord meta twitter cloudflare cloudfront digitalocean hetzner ovh telegram roblox"
|
||||
@@ -18,7 +18,9 @@ nolog() {
|
||||
local timestamp
|
||||
timestamp=$(date +"%Y-%m-%d %H:%M:%S")
|
||||
|
||||
echo -e "${COLOR_CYAN}[$timestamp]${COLOR_RESET} ${COLOR_GREEN}$message${COLOR_RESET}"
|
||||
if [ -t 1 ]; then
|
||||
echo -e "${COLOR_CYAN}[$timestamp]${COLOR_RESET} ${COLOR_GREEN}$message${COLOR_RESET}"
|
||||
fi
|
||||
}
|
||||
|
||||
echolog() {
|
||||
|
||||
@@ -1090,6 +1090,42 @@ sing_box_cm_add_route_rule() {
|
||||
}]'
|
||||
}
|
||||
|
||||
#######################################
|
||||
# Insert a resolve rule immediately before a route rule.
|
||||
# Copies rule_set from the target route rule.
|
||||
# Arguments:
|
||||
# config: string (JSON), sing-box configuration to modify
|
||||
# route_rule_tag: string, tag of the route rule to precede
|
||||
# resolve_rule_tag: string, tag for the new resolve rule
|
||||
# server: string, DNS server tag (optional, default: "dns-server")
|
||||
# Outputs:
|
||||
# Updated JSON config to stdout
|
||||
#######################################
|
||||
sing_box_cm_add_resolve_rule() {
|
||||
local config="$1"
|
||||
local route_rule_tag="$2"
|
||||
local resolve_rule_tag="$3"
|
||||
local server="${4:-dns-server}"
|
||||
|
||||
echo "$config" | jq \
|
||||
--arg service_tag "$SERVICE_TAG" \
|
||||
--arg route_tag "$route_rule_tag" \
|
||||
--arg resolve_tag "$resolve_rule_tag" \
|
||||
--arg server "$server" \
|
||||
'.route.rules |= [
|
||||
.[] |
|
||||
if .[$service_tag] == $route_tag then
|
||||
{
|
||||
action: "resolve",
|
||||
rule_set: (.rule_set // []),
|
||||
server: $server,
|
||||
($service_tag): $resolve_tag
|
||||
}, .
|
||||
else .
|
||||
end
|
||||
]'
|
||||
}
|
||||
|
||||
#######################################
|
||||
# Patch a routing rule in the route section of a sing-box JSON configuration.
|
||||
# Arguments:
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
FROM openwrt/sdk:x86-64-SNAPSHOT
|
||||
FROM openwrt/sdk:x86_64-v25.12.3
|
||||
WORKDIR /builder
|
||||
RUN ./setup.sh \
|
||||
&& ./scripts/feeds update -a \
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
FROM openwrt/sdk:x86_64-v24.10.3
|
||||
FROM openwrt/sdk:x86_64-v24.10.6
|
||||
WORKDIR /builder
|
||||
RUN ./scripts/feeds update -a \
|
||||
&& ./scripts/feeds install luci-base \
|
||||
|
||||
Reference in New Issue
Block a user