mirror of
https://github.com/itdoginfo/podkop.git
synced 2026-01-27 12:50:37 +03:00
Compare commits
30 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
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 |
@@ -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:198"
|
||||
]
|
||||
},
|
||||
{
|
||||
"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:443"
|
||||
]
|
||||
},
|
||||
{
|
||||
"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:524"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -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:298"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -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:389",
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:469"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -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:266",
|
||||
"../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:267",
|
||||
"../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:263",
|
||||
"../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:276",
|
||||
"../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:253"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -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:390",
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:470"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -431,14 +431,14 @@
|
||||
"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:254"
|
||||
]
|
||||
},
|
||||
{
|
||||
"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:662"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -452,7 +452,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:663"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -480,63 +480,63 @@
|
||||
"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:425"
|
||||
]
|
||||
},
|
||||
{
|
||||
"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:399"
|
||||
]
|
||||
},
|
||||
{
|
||||
"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:479"
|
||||
]
|
||||
},
|
||||
{
|
||||
"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:137"
|
||||
]
|
||||
},
|
||||
{
|
||||
"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:138"
|
||||
]
|
||||
},
|
||||
{
|
||||
"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:136"
|
||||
]
|
||||
},
|
||||
{
|
||||
"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:139"
|
||||
]
|
||||
},
|
||||
{
|
||||
"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"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -570,7 +570,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:637"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -711,14 +711,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"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -950,14 +950,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:545"
|
||||
]
|
||||
},
|
||||
{
|
||||
"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:568"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Log Level",
|
||||
"key": "Log Level",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:384"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -978,7 +985,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:673"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -992,14 +999,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:163"
|
||||
]
|
||||
},
|
||||
{
|
||||
"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:207"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1047,7 +1054,7 @@
|
||||
"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:28"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1135,7 +1142,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:35"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1156,21 +1163,21 @@
|
||||
"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:332"
|
||||
]
|
||||
},
|
||||
{
|
||||
"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:591"
|
||||
]
|
||||
},
|
||||
{
|
||||
"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:614"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1198,7 +1205,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 +1261,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:351"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1275,7 +1282,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:299"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1310,14 +1317,14 @@
|
||||
"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:208"
|
||||
]
|
||||
},
|
||||
{
|
||||
"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:277",
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:25"
|
||||
]
|
||||
},
|
||||
@@ -1339,21 +1346,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:264"
|
||||
]
|
||||
},
|
||||
{
|
||||
"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:387"
|
||||
]
|
||||
},
|
||||
{
|
||||
"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:467"
|
||||
]
|
||||
},
|
||||
{
|
||||
"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 +1391,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:26"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Selector Proxy Links",
|
||||
"key": "Selector Proxy Links",
|
||||
"places": [
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:87"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Services info",
|
||||
"key": "Services info",
|
||||
@@ -1459,36 +1487,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:638"
|
||||
]
|
||||
},
|
||||
{
|
||||
"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:592"
|
||||
]
|
||||
},
|
||||
{
|
||||
"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:615"
|
||||
]
|
||||
},
|
||||
{
|
||||
"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:546",
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:569"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1544,8 +1572,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:391",
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:471"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1559,21 +1587,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:134"
|
||||
]
|
||||
},
|
||||
{
|
||||
"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:147"
|
||||
]
|
||||
},
|
||||
{
|
||||
"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:170"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1622,7 +1650,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:268",
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:17"
|
||||
]
|
||||
},
|
||||
@@ -1630,7 +1658,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:197"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1686,70 +1714,70 @@
|
||||
"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:133"
|
||||
]
|
||||
},
|
||||
{
|
||||
"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:110"
|
||||
]
|
||||
},
|
||||
{
|
||||
"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:169"
|
||||
]
|
||||
},
|
||||
{
|
||||
"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:146"
|
||||
]
|
||||
},
|
||||
{
|
||||
"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:386"
|
||||
]
|
||||
},
|
||||
{
|
||||
"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:398"
|
||||
]
|
||||
},
|
||||
{
|
||||
"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:424"
|
||||
]
|
||||
},
|
||||
{
|
||||
"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:466"
|
||||
]
|
||||
},
|
||||
{
|
||||
"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:478"
|
||||
]
|
||||
},
|
||||
{
|
||||
"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:504"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1760,7 +1788,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 +1804,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:457",
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:536"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1795,18 +1823,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:36",
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:88",
|
||||
"../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:111"
|
||||
]
|
||||
},
|
||||
{
|
||||
"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:334"
|
||||
]
|
||||
},
|
||||
{
|
||||
"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:353"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
||||
@@ -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.
|
||||
# divocatt <210179590+divocatt@users.noreply.github.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-01-14 18:21+0200\n"
|
||||
"PO-Revision-Date: 2026-01-14 18:21+0200\n"
|
||||
"Last-Translator: divocatt <210179590+divocatt@users.noreply.github.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:198
|
||||
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:443
|
||||
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:524
|
||||
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:298
|
||||
msgid "Community Lists"
|
||||
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:389
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:469
|
||||
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:266
|
||||
#: ../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:267
|
||||
#: ../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:263
|
||||
#: ../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:276
|
||||
#: ../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:253
|
||||
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:390
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:470
|
||||
msgid "Dynamic List"
|
||||
msgstr ""
|
||||
|
||||
@@ -267,11 +267,11 @@ 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:254
|
||||
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:662
|
||||
msgid "Enable Mixed Proxy"
|
||||
msgstr ""
|
||||
|
||||
@@ -279,7 +279,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:663
|
||||
msgid "Enable the mixed proxy, allowing this section to route traffic through both HTTP and SOCKS proxies"
|
||||
msgstr ""
|
||||
|
||||
@@ -295,39 +295,39 @@ msgstr ""
|
||||
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:425
|
||||
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:399
|
||||
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:479
|
||||
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:137
|
||||
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:138
|
||||
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:136
|
||||
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:139
|
||||
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 ""
|
||||
|
||||
@@ -349,7 +349,7 @@ msgstr ""
|
||||
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:637
|
||||
msgid "Fully Routed IPs"
|
||||
msgstr ""
|
||||
|
||||
@@ -430,11 +430,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 ""
|
||||
|
||||
@@ -567,14 +567,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:545
|
||||
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:568
|
||||
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 +587,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:673
|
||||
msgid "Mixed Proxy Port"
|
||||
msgstr ""
|
||||
|
||||
@@ -591,11 +595,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:163
|
||||
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:207
|
||||
msgid "Network Interface"
|
||||
msgstr ""
|
||||
|
||||
@@ -625,7 +629,7 @@ 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:28
|
||||
msgid "Outbound Config"
|
||||
msgstr ""
|
||||
|
||||
@@ -677,7 +681,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:35
|
||||
msgid "Proxy Configuration URL"
|
||||
msgstr ""
|
||||
|
||||
@@ -689,15 +693,15 @@ 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:332
|
||||
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:591
|
||||
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:614
|
||||
msgid "Remote Subnet Lists"
|
||||
msgstr ""
|
||||
|
||||
@@ -713,7 +717,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 +749,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:351
|
||||
msgid "Russia inside restrictions"
|
||||
msgstr ""
|
||||
|
||||
@@ -757,7 +761,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:299
|
||||
msgid "Select a predefined list for routing"
|
||||
msgstr ""
|
||||
|
||||
@@ -777,11 +781,11 @@ msgstr ""
|
||||
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:208
|
||||
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:277
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:25
|
||||
msgid "Select or enter DNS server address"
|
||||
msgstr ""
|
||||
@@ -794,18 +798,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:264
|
||||
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:387
|
||||
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:467
|
||||
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 +826,14 @@ msgstr ""
|
||||
msgid "Select the WAN interfaces to be monitored"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:26
|
||||
msgid "Selector"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:87
|
||||
msgid "Selector Proxy Links"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/dashboard/initController.ts:340
|
||||
msgid "Services info"
|
||||
msgstr ""
|
||||
@@ -863,24 +879,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:638
|
||||
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:592
|
||||
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:615
|
||||
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:569
|
||||
msgid "Specify the path to the list file located on the router filesystem"
|
||||
msgstr ""
|
||||
|
||||
@@ -912,8 +928,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:391
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:471
|
||||
msgid "Text List"
|
||||
msgstr ""
|
||||
|
||||
@@ -921,15 +937,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:134
|
||||
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:147
|
||||
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:170
|
||||
msgid "The URL used to test server connectivity"
|
||||
msgstr ""
|
||||
|
||||
@@ -957,12 +973,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:268
|
||||
#: ../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:197
|
||||
msgid "UDP over TCP"
|
||||
msgstr ""
|
||||
|
||||
@@ -997,43 +1013,43 @@ msgstr ""
|
||||
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:133
|
||||
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:110
|
||||
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:169
|
||||
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:146
|
||||
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:386
|
||||
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:398
|
||||
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:424
|
||||
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:466
|
||||
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:478
|
||||
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:504
|
||||
msgid "User Subnets List"
|
||||
msgstr ""
|
||||
|
||||
@@ -1041,7 +1057,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 +1070,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:457
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:536
|
||||
msgid "Validation errors:"
|
||||
msgstr ""
|
||||
|
||||
@@ -1068,11 +1084,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:36
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:88
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:111
|
||||
msgid "vless://, ss://, trojan://, socks4/5://, hy2/hysteria2:// links"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:334
|
||||
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:353
|
||||
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.
|
||||
# divocatt, 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-01-14 20:21+0200\n"
|
||||
"PO-Revision-Date: 2026-01-14 20:21+0200\n"
|
||||
"Last-Translator: divocatt\n"
|
||||
"Language-Team: none\n"
|
||||
"Language: ru\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@@ -419,6 +419,9 @@ msgstr "Локальные списки доменов"
|
||||
msgid "Local Subnet Lists"
|
||||
msgstr "Локальные списки подсетей"
|
||||
|
||||
msgid "Log Level"
|
||||
msgstr "Уровень логов"
|
||||
|
||||
msgid "Main DNS"
|
||||
msgstr "Основной DNS"
|
||||
|
||||
@@ -584,6 +587,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 +599,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 +773,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',
|
||||
|
||||
@@ -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`,
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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",
|
||||
@@ -4138,7 +4164,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(
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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.
|
||||
# divocatt, 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-01-14 20:21+0200\n"
|
||||
"PO-Revision-Date: 2026-01-14 20:21+0200\n"
|
||||
"Last-Translator: divocatt\n"
|
||||
"Language-Team: none\n"
|
||||
"Language: ru\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@@ -419,6 +419,9 @@ msgstr "Локальные списки доменов"
|
||||
msgid "Local Subnet Lists"
|
||||
msgstr "Локальные списки подсетей"
|
||||
|
||||
msgid "Log Level"
|
||||
msgstr "Уровень логов"
|
||||
|
||||
msgid "Main DNS"
|
||||
msgstr "Основной DNS"
|
||||
|
||||
@@ -584,6 +587,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 +599,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 +773,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.
|
||||
# divocatt <210179590+divocatt@users.noreply.github.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-01-14 18:21+0200\n"
|
||||
"PO-Revision-Date: 2026-01-14 18:21+0200\n"
|
||||
"Last-Translator: divocatt <210179590+divocatt@users.noreply.github.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:198
|
||||
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:443
|
||||
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:524
|
||||
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:298
|
||||
msgid "Community Lists"
|
||||
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:389
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:469
|
||||
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:266
|
||||
#: ../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:267
|
||||
#: ../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:263
|
||||
#: ../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:276
|
||||
#: ../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:253
|
||||
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:390
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:470
|
||||
msgid "Dynamic List"
|
||||
msgstr ""
|
||||
|
||||
@@ -267,11 +267,11 @@ 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:254
|
||||
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:662
|
||||
msgid "Enable Mixed Proxy"
|
||||
msgstr ""
|
||||
|
||||
@@ -279,7 +279,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:663
|
||||
msgid "Enable the mixed proxy, allowing this section to route traffic through both HTTP and SOCKS proxies"
|
||||
msgstr ""
|
||||
|
||||
@@ -295,39 +295,39 @@ msgstr ""
|
||||
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:425
|
||||
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:399
|
||||
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:479
|
||||
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:137
|
||||
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:138
|
||||
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:136
|
||||
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:139
|
||||
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 ""
|
||||
|
||||
@@ -349,7 +349,7 @@ msgstr ""
|
||||
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:637
|
||||
msgid "Fully Routed IPs"
|
||||
msgstr ""
|
||||
|
||||
@@ -430,11 +430,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 ""
|
||||
|
||||
@@ -567,14 +567,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:545
|
||||
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:568
|
||||
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 +587,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:673
|
||||
msgid "Mixed Proxy Port"
|
||||
msgstr ""
|
||||
|
||||
@@ -591,11 +595,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:163
|
||||
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:207
|
||||
msgid "Network Interface"
|
||||
msgstr ""
|
||||
|
||||
@@ -625,7 +629,7 @@ 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:28
|
||||
msgid "Outbound Config"
|
||||
msgstr ""
|
||||
|
||||
@@ -677,7 +681,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:35
|
||||
msgid "Proxy Configuration URL"
|
||||
msgstr ""
|
||||
|
||||
@@ -689,15 +693,15 @@ 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:332
|
||||
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:591
|
||||
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:614
|
||||
msgid "Remote Subnet Lists"
|
||||
msgstr ""
|
||||
|
||||
@@ -713,7 +717,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 +749,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:351
|
||||
msgid "Russia inside restrictions"
|
||||
msgstr ""
|
||||
|
||||
@@ -757,7 +761,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:299
|
||||
msgid "Select a predefined list for routing"
|
||||
msgstr ""
|
||||
|
||||
@@ -777,11 +781,11 @@ msgstr ""
|
||||
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:208
|
||||
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:277
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/settings.js:25
|
||||
msgid "Select or enter DNS server address"
|
||||
msgstr ""
|
||||
@@ -794,18 +798,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:264
|
||||
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:387
|
||||
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:467
|
||||
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 +826,14 @@ msgstr ""
|
||||
msgid "Select the WAN interfaces to be monitored"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:26
|
||||
msgid "Selector"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:87
|
||||
msgid "Selector Proxy Links"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/dashboard/initController.ts:340
|
||||
msgid "Services info"
|
||||
msgstr ""
|
||||
@@ -863,24 +879,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:638
|
||||
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:592
|
||||
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:615
|
||||
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:569
|
||||
msgid "Specify the path to the list file located on the router filesystem"
|
||||
msgstr ""
|
||||
|
||||
@@ -912,8 +928,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:391
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:471
|
||||
msgid "Text List"
|
||||
msgstr ""
|
||||
|
||||
@@ -921,15 +937,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:134
|
||||
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:147
|
||||
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:170
|
||||
msgid "The URL used to test server connectivity"
|
||||
msgstr ""
|
||||
|
||||
@@ -957,12 +973,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:268
|
||||
#: ../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:197
|
||||
msgid "UDP over TCP"
|
||||
msgstr ""
|
||||
|
||||
@@ -997,43 +1013,43 @@ msgstr ""
|
||||
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:133
|
||||
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:110
|
||||
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:169
|
||||
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:146
|
||||
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:386
|
||||
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:398
|
||||
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:424
|
||||
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:466
|
||||
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:478
|
||||
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:504
|
||||
msgid "User Subnets List"
|
||||
msgstr ""
|
||||
|
||||
@@ -1041,7 +1057,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 +1070,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:457
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:536
|
||||
msgid "Validation errors:"
|
||||
msgstr ""
|
||||
|
||||
@@ -1068,11 +1084,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:36
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:88
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:111
|
||||
msgid "vless://, ss://, trojan://, socks4/5://, hy2/hysteria2:// links"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop/htdocs/luci-static/resources/view/podkop/section.js:334
|
||||
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:353
|
||||
msgid "Warning: Russia inside can only be used with %s. %s already in Russia inside and have been removed from selection."
|
||||
msgstr ""
|
||||
|
||||
|
||||
@@ -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
|
||||
@@ -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"
|
||||
@@ -867,13 +928,23 @@ configure_routing_for_section_lists() {
|
||||
config_get remote_subnet_lists "$section" "remote_subnet_lists"
|
||||
config_get section_connection_type "$section" "connection_type"
|
||||
|
||||
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"
|
||||
@@ -1239,7 +1310,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 '{ 50000-65535 }' meta mark set "$NFT_FAKEIP_MARK" counter
|
||||
;;
|
||||
"roblox")
|
||||
URL=$SUBNETS_ROBLOX
|
||||
;;
|
||||
*) return 0 ;;
|
||||
esac
|
||||
@@ -1464,12 +1538,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
|
||||
@@ -1512,7 +1590,8 @@ get_service_listen_address() {
|
||||
return 0
|
||||
fi
|
||||
|
||||
service_listen_address="$(uci_get "network" "lan" "ipaddr" | awk '{print $1}' | cut -d'/' -f1)"
|
||||
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"
|
||||
@@ -1527,8 +1606,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
|
||||
}
|
||||
@@ -1753,6 +1834,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() {
|
||||
|
||||
Reference in New Issue
Block a user