Compare commits
19 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ce9a7cdc45 | ||
|
|
6071a96e9c | ||
|
|
e17422a0cf | ||
|
|
2e78b2b4b8 | ||
|
|
b84f3b6782 | ||
|
|
0f66305e50 | ||
|
|
a32a5c600b | ||
|
|
89737efcbc | ||
|
|
4608bc31cd | ||
|
|
d9e9f2dfe4 | ||
|
|
bb9318e96f | ||
|
|
7ff49c3e4e | ||
|
|
134a79cb3b | ||
|
|
560dda8604 | ||
|
|
255c08a6de | ||
|
|
1f3a65347e | ||
|
|
ec936e2369 | ||
|
|
cee934d139 | ||
|
|
a25c6b8013 |
10
README.md
10
README.md
@@ -89,9 +89,8 @@ Luci: Services/podkop
|
|||||||
- [x] Сеть рестартится при любом раскладе
|
- [x] Сеть рестартится при любом раскладе
|
||||||
- [x] Выкл-вкл wg через luci не отрабатывает поднятие маршрута
|
- [x] Выкл-вкл wg через luci не отрабатывает поднятие маршрута
|
||||||
- [ ] Если eof после последней строки в rt_tables, то скрипт не добавляет перенос строки
|
- [ ] Если eof после последней строки в rt_tables, то скрипт не добавляет перенос строки
|
||||||
- [ ] Парсинг VLESS не отрабатывает, если в SNI два домена. Пример `sni=telegram.org%3Bwww.telegram.org`
|
|
||||||
- [ ] В каких-то случаях плохо отрабатывает localfile
|
- [ ] В каких-то случаях плохо отрабатывает localfile
|
||||||
- [ ] exit 1 если в конфиге присуствует
|
- [ ] warnging если в конфиге присуствует. Значит в системе есть https-dns-proxy, который тоже может перетирать конфигурацию dhcp. Рекомендовать его выключить и сделать disable. Возможно в будущем добавить несовместимость на уровне Makefile
|
||||||
```
|
```
|
||||||
option doh_backup_noresolv '0'
|
option doh_backup_noresolv '0'
|
||||||
list doh_backup_server ''
|
list doh_backup_server ''
|
||||||
@@ -101,7 +100,6 @@ Luci: Services/podkop
|
|||||||
```
|
```
|
||||||
- [x] Только кастомный remote list не создаёт секцию в route-rules-rule-set и dns-rules-ruleset
|
- [x] Только кастомный remote list не создаёт секцию в route-rules-rule-set и dns-rules-ruleset
|
||||||
- [ ] Не отрабатывает service podkop stop, если podkop запущен и не может, к пример, зарезолвить домен с сломанным DNS
|
- [ ] Не отрабатывает service podkop stop, если podkop запущен и не может, к пример, зарезолвить домен с сломанным DNS
|
||||||
- [ ] Всплывает в логах при старте. Не каждый раз. На работу не влияет. Wed Feb 19 17:12:28 2025 daemon.err sh[17665]: Command failed: ubus call service delete { "name": "sing-box" } (Not found)
|
|
||||||
|
|
||||||
# ToDo
|
# ToDo
|
||||||
Этот раздел не означает задачи, которые нужно брать и делать. Это общий список хотелок. Если вы хотите помочь, пожалуйста, спросите сначала в телеграмме.
|
Этот раздел не означает задачи, которые нужно брать и делать. Это общий список хотелок. Если вы хотите помочь, пожалуйста, спросите сначала в телеграмме.
|
||||||
@@ -148,12 +146,9 @@ Luci: Services/podkop
|
|||||||
- [ ] Проверка на ванильную openwrt
|
- [ ] Проверка на ванильную openwrt
|
||||||
- [ ] Проверка откуда установлен sing-box. Например, проверять установлен ли он из официального репозитория
|
- [ ] Проверка откуда установлен sing-box. Например, проверять установлен ли он из официального репозитория
|
||||||
- [x] TG в сервисы
|
- [x] TG в сервисы
|
||||||
- [ ] Выбор ткуда направлять трафик в туннель. В том числе чтоб откуда угодно, а не только br-lan
|
|
||||||
- [ ] Диагностика: Proxy check completed successfully предположительно не показывает IP, если вернулся это IPv6.
|
- [ ] Диагностика: Proxy check completed successfully предположительно не показывает IP, если вернулся это IPv6.
|
||||||
- [ ] Диагностика: podkop_domains: 0 elements как проверять что доходят запросы при fakeip? Мб врубать логи dnsmasq и их чекать.
|
|
||||||
- [ ] Сделать галку запрещающую подкопу редачить dhcp. Допилить в исключение вместе с пустыми полями proxy и vpn
|
- [ ] Сделать галку запрещающую подкопу редачить dhcp. Допилить в исключение вместе с пустыми полями proxy и vpn
|
||||||
- [x] Валидации предустановленных значений. Если прописаны другие, то вывод в лог о неизвестной переменной и продолжение работы
|
- [x] Валидации предустановленных значений. Если прописаны другие, то вывод в лог о неизвестной переменной и продолжение работы
|
||||||
- [ ] Добавление в список доменов домены первого уровня (LuCI)
|
|
||||||
- [ ] Проверка, что версия в makefile совпадает с тегом
|
- [ ] Проверка, что версия в makefile совпадает с тегом
|
||||||
|
|
||||||
Приоритет 2
|
Приоритет 2
|
||||||
@@ -178,9 +173,6 @@ Wiki
|
|||||||
- [ ] Unit тесты (BATS)
|
- [ ] Unit тесты (BATS)
|
||||||
- [ ] Интеграционые тесты бекенда (OpenWrt rootfs + BATS)
|
- [ ] Интеграционые тесты бекенда (OpenWrt rootfs + BATS)
|
||||||
|
|
||||||
Хз как сделать
|
|
||||||
- [ ] Добавить label от конфига vless\ss\etc в luci.
|
|
||||||
|
|
||||||
# Разработка
|
# Разработка
|
||||||
Есть два варианта:
|
Есть два варианта:
|
||||||
- Просто поставить пакет на роутер или виртуалку и прям редактировать через SFTP (opkg install openssh-sftp-server)
|
- Просто поставить пакет на роутер или виртуалку и прям редактировать через SFTP (opkg install openssh-sftp-server)
|
||||||
|
|||||||
@@ -111,7 +111,7 @@ main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
add_tunnel() {
|
add_tunnel() {
|
||||||
printf "\033[32;1mWill you be using Wireguard, AmneziaWG, OpenVPN, OpenConnect? If yes, select a number and they will be automatically installed\033[0m "
|
printf "\033[32;1mWill you be using Wireguard, AmneziaWG, OpenVPN, OpenConnect? If yes, select a number and they will be automatically installed\033[0m\n"
|
||||||
echo "1) Wireguard"
|
echo "1) Wireguard"
|
||||||
echo "2) AmneziaWG"
|
echo "2) AmneziaWG"
|
||||||
echo "3) OpenVPN"
|
echo "3) OpenVPN"
|
||||||
@@ -412,7 +412,7 @@ check_system() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if ! nslookup google.com >/dev/null 2>&1; then
|
if ! nslookup google.com >/dev/null 2>&1; then
|
||||||
log "DNS not working"
|
printf "\033[31;1mDNS not working\033[0m\n"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
include $(TOPDIR)/rules.mk
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
PKG_NAME:=luci-app-podkop
|
PKG_NAME:=luci-app-podkop
|
||||||
PKG_VERSION:=0.3.13
|
PKG_VERSION:=0.3.14
|
||||||
PKG_RELEASE:=1
|
PKG_RELEASE:=1
|
||||||
|
|
||||||
LUCI_TITLE:=LuCI podkop app
|
LUCI_TITLE:=LuCI podkop app
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -521,4 +521,37 @@ msgid "DNS server address cannot be empty"
|
|||||||
msgstr "Адрес DNS сервера не может быть пустым"
|
msgstr "Адрес DNS сервера не может быть пустым"
|
||||||
|
|
||||||
msgid "Invalid DNS server format. Examples: 8.8.8.8 or dns.example.com"
|
msgid "Invalid DNS server format. Examples: 8.8.8.8 or dns.example.com"
|
||||||
msgstr "Неверный формат DNS сервера. Примеры: 8.8.8.8 или dns.example.com"
|
msgstr "Неверный формат DNS сервера. Примеры: 8.8.8.8 или dns.example.com"
|
||||||
|
|
||||||
|
msgid "DNS Rewrite TTL"
|
||||||
|
msgstr "Перезапись TTL для DNS"
|
||||||
|
|
||||||
|
msgid "Time in seconds for DNS record caching (default: 600)"
|
||||||
|
msgstr "Время в секундах для кэширования DNS записей (по умолчанию: 600)"
|
||||||
|
|
||||||
|
msgid "TTL value cannot be empty"
|
||||||
|
msgstr "Значение TTL не может быть пустым"
|
||||||
|
|
||||||
|
msgid "TTL must be a positive number"
|
||||||
|
msgstr "TTL должно быть положительным числом"
|
||||||
|
|
||||||
|
msgid "Cache File Path"
|
||||||
|
msgstr "Путь к файлу кэша"
|
||||||
|
|
||||||
|
msgid "Select or enter path for sing-box cache file. Change this ONLY if you know what you are doing"
|
||||||
|
msgstr "Выберите или введите путь к файлу кэша sing-box. Меняйте ТОЛЬКО если знаете, что делаете"
|
||||||
|
|
||||||
|
msgid "Cache file path cannot be empty"
|
||||||
|
msgstr "Путь к файлу кэша не может быть пустым"
|
||||||
|
|
||||||
|
msgid "Path must be absolute (start with /)"
|
||||||
|
msgstr "Путь должен быть абсолютным (начинаться с /)"
|
||||||
|
|
||||||
|
msgid "Path must end with cache.db"
|
||||||
|
msgstr "Путь должен заканчиваться на cache.db"
|
||||||
|
|
||||||
|
msgid "Path must contain at least one directory (like /tmp/cache.db)"
|
||||||
|
msgstr "Путь должен содержать хотя бы одну директорию (например /tmp/cache.db)"
|
||||||
|
|
||||||
|
msgid "Invalid path format. Must be like /tmp/cache.db"
|
||||||
|
msgstr "Неверный формат пути. Пример: /tmp/cache.db"
|
||||||
@@ -875,4 +875,37 @@ msgid "DNS Server"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
msgid "Select or enter DNS server address"
|
msgid "Select or enter DNS server address"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "DNS Rewrite TTL"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Time in seconds for DNS record caching (default: 600)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "TTL value cannot be empty"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "TTL must be a positive number"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Cache File Path"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Select or enter path for sing-box cache file. Change this ONLY if you know what you are doing"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Cache file path cannot be empty"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Path must be absolute (start with /)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Path must end with cache.db"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Path must contain at least one directory (like /tmp/cache.db)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Invalid path format. Must be like /tmp/cache.db"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
include $(TOPDIR)/rules.mk
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
PKG_NAME:=podkop
|
PKG_NAME:=podkop
|
||||||
PKG_VERSION:=0.3.13
|
PKG_VERSION:=0.3.14
|
||||||
PKG_RELEASE:=1
|
PKG_RELEASE:=1
|
||||||
|
|
||||||
PKG_MAINTAINER:=ITDog <podkop@itdog.info>
|
PKG_MAINTAINER:=ITDog <podkop@itdog.info>
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ script=$(readlink "$initscript")
|
|||||||
NAME="$(basename ${script:-$initscript})"
|
NAME="$(basename ${script:-$initscript})"
|
||||||
config_load "$NAME"
|
config_load "$NAME"
|
||||||
|
|
||||||
EXTRA_COMMANDS="main list_update check_proxy check_nft check_github check_logs check_sing_box_connections check_sing_box_logs check_dnsmasq show_config show_version show_sing_box_config show_luci_version show_sing_box_version show_system_info get_status get_sing_box_status"
|
EXTRA_COMMANDS="main list_update check_proxy check_nft check_github check_logs check_sing_box_connections check_sing_box_logs check_dnsmasq show_config show_version show_sing_box_config show_luci_version show_sing_box_version show_system_info get_status get_sing_box_status get_proxy_label"
|
||||||
EXTRA_HELP=" list_update Updating domain and subnet lists
|
EXTRA_HELP=" list_update Updating domain and subnet lists
|
||||||
check_proxy Check if sing-box proxy works correctly
|
check_proxy Check if sing-box proxy works correctly
|
||||||
check_nft Show PodkopTable nftables rules
|
check_nft Show PodkopTable nftables rules
|
||||||
@@ -37,7 +37,6 @@ SUBNETS_META="${GITHUB_RAW_URL}/Subnets/IPv4/meta.lst"
|
|||||||
SUBNETS_DISCORD="${GITHUB_RAW_URL}/Subnets/IPv4/discord.lst"
|
SUBNETS_DISCORD="${GITHUB_RAW_URL}/Subnets/IPv4/discord.lst"
|
||||||
SUBNETS_TELERAM="${GITHUB_RAW_URL}/Subnets/IPv4/telegram.lst"
|
SUBNETS_TELERAM="${GITHUB_RAW_URL}/Subnets/IPv4/telegram.lst"
|
||||||
SING_BOX_CONFIG="/etc/sing-box/config.json"
|
SING_BOX_CONFIG="/etc/sing-box/config.json"
|
||||||
CACHE_FILE_PATH="/tmp/cache.db"
|
|
||||||
FAKEIP="198.18.0.0/15"
|
FAKEIP="198.18.0.0/15"
|
||||||
VALID_SERVICES="russia_inside russia_outside ukraine_inside geoblock block porn news anime youtube discord meta twitter hdrezka tiktok telegram"
|
VALID_SERVICES="russia_inside russia_outside ukraine_inside geoblock block porn news anime youtube discord meta twitter hdrezka tiktok telegram"
|
||||||
DNS_RESOLVERS="1.1.1.1 1.0.0.1 8.8.8.8 8.8.4.4 9.9.9.9 9.9.9.11 94.140.14.14 94.140.15.15 208.67.220.220 208.67.222.222 77.88.8.1 77.88.8.8"
|
DNS_RESOLVERS="1.1.1.1 1.0.0.1 8.8.8.8 8.8.4.4 9.9.9.9 9.9.9.11 94.140.14.14 94.140.15.15 208.67.220.220 208.67.222.222 77.88.8.1 77.88.8.8"
|
||||||
@@ -709,8 +708,13 @@ sing_box_dns() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
sing_box_dns_rule_fakeip() {
|
sing_box_dns_rule_fakeip() {
|
||||||
log "Configure fakeip route in sing-box"
|
local rewrite_ttl
|
||||||
|
config_get rewrite_ttl "main" "dns_rewrite_ttl" "600"
|
||||||
|
|
||||||
|
log "Configure fakeip route in sing-box and set TTL to $rewrite_ttl seconds"
|
||||||
|
|
||||||
jq \
|
jq \
|
||||||
|
--arg ttl "$rewrite_ttl" \
|
||||||
'.dns += {
|
'.dns += {
|
||||||
"rules": [
|
"rules": [
|
||||||
{
|
{
|
||||||
@@ -727,6 +731,8 @@ sing_box_dns_rule_fakeip() {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"server": "fakeip-server",
|
"server": "fakeip-server",
|
||||||
|
"domain": "",
|
||||||
|
"rewrite_ttl": ($ttl | tonumber),
|
||||||
"rule_set": []
|
"rule_set": []
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -754,14 +760,17 @@ sing_box_dns_rule_fakeip_section() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
sing_box_cache_file() {
|
sing_box_cache_file() {
|
||||||
log "Configure cache.db in sing-box"
|
config_get cache_file "main" "cache_file" "/tmp/cache.db"
|
||||||
|
|
||||||
|
log "Configure sing-box cache.db path"
|
||||||
|
|
||||||
jq \
|
jq \
|
||||||
--arg CACHE_FILE_PATH "$CACHE_FILE_PATH" \
|
--arg cache_file "$cache_file" \
|
||||||
'.experimental = {
|
'.experimental = {
|
||||||
"cache_file": {
|
"cache_file": {
|
||||||
"enabled": true,
|
"enabled": true,
|
||||||
"store_fakeip": true,
|
"store_fakeip": true,
|
||||||
"path": $CACHE_FILE_PATH
|
"path": $cache_file
|
||||||
}
|
}
|
||||||
}' $SING_BOX_CONFIG >/tmp/sing-box-config-tmp.json && mv /tmp/sing-box-config-tmp.json $SING_BOX_CONFIG
|
}' $SING_BOX_CONFIG >/tmp/sing-box-config-tmp.json && mv /tmp/sing-box-config-tmp.json $SING_BOX_CONFIG
|
||||||
}
|
}
|
||||||
@@ -1827,6 +1836,18 @@ get_status() {
|
|||||||
echo "{\"running\":$running,\"enabled\":$enabled,\"status\":\"$status\"}"
|
echo "{\"running\":$running,\"enabled\":$enabled,\"status\":\"$status\"}"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
get_proxy_label() {
|
||||||
|
local section="$1"
|
||||||
|
local proxy_string
|
||||||
|
local label=""
|
||||||
|
|
||||||
|
config_get proxy_string "$section" "proxy_string"
|
||||||
|
if [ -n "$proxy_string" ]; then
|
||||||
|
label=$(echo "$proxy_string" | sed -n 's/.*#\(.*\)$/\1/p')
|
||||||
|
echo "$label"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
sing_box_add_secure_dns_probe_domain() {
|
sing_box_add_secure_dns_probe_domain() {
|
||||||
local domain="httpbin.org"
|
local domain="httpbin.org"
|
||||||
local override_address="numbersapi.com"
|
local override_address="numbersapi.com"
|
||||||
@@ -1843,10 +1864,8 @@ sing_box_add_secure_dns_probe_domain() {
|
|||||||
--arg override "$override_address" \
|
--arg override "$override_address" \
|
||||||
'.dns.rules |= map(
|
'.dns.rules |= map(
|
||||||
if .server == "fakeip-server" then
|
if .server == "fakeip-server" then
|
||||||
{
|
. + {
|
||||||
"server": .server,
|
"domain": $domain
|
||||||
"domain": $domain,
|
|
||||||
"rule_set": .rule_set
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
.
|
.
|
||||||
|
|||||||
Reference in New Issue
Block a user