mirror of
https://github.com/itdoginfo/podkop.git
synced 2025-12-08 04:26:55 +03:00
Compare commits
41 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3d05fe8be4 | ||
|
|
6ddf9d3b24 | ||
|
|
b401243f74 | ||
|
|
407ef404ac | ||
|
|
f2e45bbbb9 | ||
|
|
c2b37a14f4 | ||
|
|
3d029edaea | ||
|
|
b86d6d6294 | ||
|
|
5c48ead9e4 | ||
|
|
53475b5e8a | ||
|
|
59e1d75870 | ||
|
|
3ec6cc4d84 | ||
|
|
3413af9f94 | ||
|
|
76b5ceae5c | ||
|
|
99ccd9fbb3 | ||
|
|
b82c6eb718 | ||
|
|
ccc87d9aa0 | ||
|
|
8bcdee87f5 | ||
|
|
f77ef5626b | ||
|
|
b50a21ded7 | ||
|
|
a831054e5e | ||
|
|
a8dbff816c | ||
|
|
171381fa18 | ||
|
|
b806586a5a | ||
|
|
9e2b192181 | ||
|
|
c5be041664 | ||
|
|
445ad6d3d2 | ||
|
|
9203315107 | ||
|
|
d8d8d79d68 | ||
|
|
615928db4e | ||
|
|
7697754a73 | ||
|
|
25107a0481 | ||
|
|
5f5b1cbe1f | ||
|
|
a278918e77 | ||
|
|
2074ccecce | ||
|
|
06f9bee038 | ||
|
|
febb69d0be | ||
|
|
1a6ee45612 | ||
|
|
891b8f713d | ||
|
|
b96552fb49 | ||
|
|
000d2f8e18 |
90
README.md
90
README.md
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
- Это альфа версия, которая находится в активной разработке. Из версии в версию что-то может меняться.
|
- Это альфа версия, которая находится в активной разработке. Из версии в версию что-то может меняться.
|
||||||
- Основной функционал работает, но побочные штуки сейчас могут сбоить.
|
- Основной функционал работает, но побочные штуки сейчас могут сбоить.
|
||||||
- При обновлении **обязатально** сбрасывайте кэш LuCI.
|
- При обновлении **обязательно** сбрасывайте кэш LuCI.
|
||||||
- Также при обновлении всегда заходите в конфигурацию и проверяйте свои настройки. Конфигурация может измениться.
|
- Также при обновлении всегда заходите в конфигурацию и проверяйте свои настройки. Конфигурация может измениться.
|
||||||
- Необходимо минимум 15МБ свободного места на роутере. Роутерами с флешками на 16МБ сразу мимо.
|
- Необходимо минимум 15МБ свободного места на роутере. Роутерами с флешками на 16МБ сразу мимо.
|
||||||
- При старте программы редактируется конфиг Dnsmasq.
|
- При старте программы редактируется конфиг Dnsmasq.
|
||||||
@@ -49,11 +49,6 @@ sh <(wget -O - https://raw.githubusercontent.com/itdoginfo/podkop/refs/heads/mai
|
|||||||
opkg remove luci-i18n-podkop-ru luci-app-podkop podkop
|
opkg remove luci-i18n-podkop-ru luci-app-podkop podkop
|
||||||
```
|
```
|
||||||
|
|
||||||
Если был установлен русский язык
|
|
||||||
```
|
|
||||||
opkg remove luci-i18n-podkop-ru
|
|
||||||
```
|
|
||||||
|
|
||||||
# Использование
|
# Использование
|
||||||
Конфиг: /etc/config/podkop
|
Конфиг: /etc/config/podkop
|
||||||
|
|
||||||
@@ -74,102 +69,29 @@ Luci: Services/podkop
|
|||||||
## Настройка доменов и подсетей
|
## Настройка доменов и подсетей
|
||||||
**Community Lists** - Включить списки комьюнити
|
**Community Lists** - Включить списки комьюнити
|
||||||
|
|
||||||
**Subnets list enable** - Включить подсети из общего списка, выбрать из предложенных.
|
|
||||||
|
|
||||||
**Custom domains enable** - Добавить свои домены
|
**Custom domains enable** - Добавить свои домены
|
||||||
|
|
||||||
**Custom subnets enable** - Добавить подсети или IP-адреса. Для подсетей задать маску.
|
**Custom subnets enable** - Добавить подсети или IP-адреса. Для подсетей задать маску.
|
||||||
|
|
||||||
# Известные баги
|
# Известные баги
|
||||||
- [x] Не работает proxy при режимах main vpn, second proxy
|
|
||||||
- [x] Не всегда отрабатывает ucitrack (применение настроек из luci). Не удаётся повторить
|
|
||||||
- [x] All traffic for IP ломает инет на клиенте. Proxy mode
|
|
||||||
- [x] Не отрабатывает рестарт, при awg и не применяются изменения при awg
|
|
||||||
- [x] awg работает не стабильно
|
|
||||||
- [x] Сеть рестартится при любом раскладе
|
|
||||||
- [x] Выкл-вкл wg через luci не отрабатывает поднятие маршрута
|
|
||||||
- [ ] Если eof после последней строки в rt_tables, то скрипт не добавляет перенос строки
|
|
||||||
- [ ] В каких-то случаях плохо отрабатывает localfile
|
|
||||||
- [ ] warnging если в конфиге присуствует. Значит в системе есть https-dns-proxy, который тоже может перетирать конфигурацию dhcp. Рекомендовать его выключить и сделать disable. Возможно в будущем добавить несовместимость на уровне Makefile
|
|
||||||
```
|
|
||||||
option doh_backup_noresolv '0'
|
|
||||||
list doh_backup_server ''
|
|
||||||
list doh_backup_server ''
|
|
||||||
list doh_server '127.0.0.1#5053'
|
|
||||||
list doh_server '127.0.0.1#5054'
|
|
||||||
```
|
|
||||||
- [x] Только кастомный remote list не создаёт секцию в route-rules-rule-set и dns-rules-ruleset
|
|
||||||
- [ ] Не отрабатывает service podkop stop, если podkop запущен и не может, к пример, зарезолвить домен с сломанным DNS
|
- [ ] Не отрабатывает service podkop stop, если podkop запущен и не может, к пример, зарезолвить домен с сломанным DNS
|
||||||
|
- [ ] Update list из remote url domain не удаляет старые домены. А добавляет новые. Для подсетей тоже самое скорее всего. Пересоздавать ruleset?
|
||||||
|
|
||||||
# ToDo
|
# ToDo
|
||||||
Этот раздел не означает задачи, которые нужно брать и делать. Это общий список хотелок. Если вы хотите помочь, пожалуйста, спросите сначала в телеграмме.
|
Этот раздел не означает задачи, которые нужно брать и делать. Это общий список хотелок. Если вы хотите помочь, пожалуйста, спросите сначала в телеграмме.
|
||||||
|
|
||||||
Сделано
|
- [ ] Проверка, что версия в makefile совпадает с тегом
|
||||||
- [x] Скрипт для автоматической установки.
|
|
||||||
- [x] Подсети дискорда.
|
|
||||||
- [x] Удаление getdomains через скрипт. Кроме туннеля и sing-box.
|
|
||||||
- [x] Дополнительная вкладка для ещё одного туннеля. Домены, подсети.
|
|
||||||
- [x] Улучшение скрипта автоматической установки. Спрашивать про туннели.
|
|
||||||
- [x] Зависимость от dnsmasq-full
|
|
||||||
- [x] Весь трафик для устойства пускать в туннель\прокси
|
|
||||||
- [x] Исключение для IP, не ходить в туннель\прокси совсем 0x0
|
|
||||||
- [x] Врубать галочкой yacd в sing-box
|
|
||||||
- [x] Свои списки. Просто список доменов с переносом строки
|
|
||||||
- [x] Свои списки ipv4
|
|
||||||
- [x] В nft разделить правило tproxy на маркировку и tproxy
|
|
||||||
- [x] Вернуть две цепочки nft
|
|
||||||
- [x] Ntp (порт 123) делать маркировку 0x0. По галке
|
|
||||||
- [x] Открытый прокси порт на роутере для браузеров
|
|
||||||
- [x] Автонастройка wireguard по примеру getdomains
|
|
||||||
- [x] Автонастройка awg по примеру getdomains
|
|
||||||
- [x] RU перевод
|
|
||||||
- [x] Переделать на PROCD и выкинуть ucitrack.
|
|
||||||
- [x] Нужен дебаг. Restart ucitrack в отдельный скрипт postinst, не отрабатывает.
|
|
||||||
- [x] Закомментировать дефолтные значения у list. interface поставить в пустое.
|
|
||||||
- [x] Скрипт установки: проверка установлен ли уже podkop. Если да, то просто предлагать обновится без установки тунелей и прокси.
|
|
||||||
|
|
||||||
Приоритет 1
|
|
||||||
- [x] Изменить название "Alternative Config"
|
|
||||||
- [x] "domain_service_enabled" Добавить _second
|
|
||||||
- [x] Установка Ru пакета в install.sh
|
|
||||||
- [x] Правка nft mark, tproxy
|
|
||||||
- [x] Правка перевода минимальная
|
|
||||||
- [x] Вставлять готовый outdbound вместо строки. Отдельная галка, которая в идеале должны скрывать поле для строки
|
|
||||||
- [ ] udp over tcp для ss сделать с выбором:
|
|
||||||
1) отключен (ПО на сервере -Shadowsocks)
|
|
||||||
2) включен, версия 2 (новые релизы xray-core, sing-box на сервере)
|
|
||||||
3) включен, версия 1 (старые релизы xray, sing-box на сервере)
|
|
||||||
Проблема в том, что это нужно только если SS. Выставлять выбор при парсинг из конфига вопрос можно ли. Если совсем тупо - сделать костыль в допонительные настройки
|
|
||||||
- [x] Проверка места в скрипте install. Если доступно меньше 20MB - exit 1 c выводом колько надо и сколько доступно. + показ модели роутера
|
|
||||||
- [x] Правило запрещающее QUIC
|
|
||||||
- [ ] Проверить обновление списков, отрабатывает ли
|
|
||||||
- [ ] Проверка на ванильную openwrt
|
|
||||||
- [ ] Проверка откуда установлен sing-box. Например, проверять установлен ли он из официального репозитория
|
|
||||||
- [x] TG в сервисы
|
|
||||||
- [ ] Диагностика: Proxy check completed successfully предположительно не показывает IP, если вернулся это IPv6.
|
- [ ] Диагностика: Proxy check completed successfully предположительно не показывает IP, если вернулся это IPv6.
|
||||||
- [ ] Сделать галку запрещающую подкопу редачить dhcp. Допилить в исключение вместе с пустыми полями proxy и vpn
|
- [ ] Сделать галку запрещающую подкопу редачить dhcp. Допилить в исключение вместе с пустыми полями proxy и vpn
|
||||||
- [x] Валидации предустановленных значений. Если прописаны другие, то вывод в лог о неизвестной переменной и продолжение работы
|
- [ ] Обработка ошибки `sing-box[9345]: FATAL[0000] start service: initialize DNS rule[2]: rule-set not found: main`. Когда не задана строка\интерфейс
|
||||||
- [ ] Проверка, что версия в makefile совпадает с тегом
|
|
||||||
|
|
||||||
Приоритет 2
|
|
||||||
- [x] Списки доменов и подсетей с роутера
|
|
||||||
- [x] Кнопка обновления списка доменов и подсетей. Запихнуть в главное меню
|
|
||||||
- [ ] IPv6
|
|
||||||
|
|
||||||
Wiki
|
|
||||||
- [x] Тема
|
|
||||||
- [x] Изначальное наполнение
|
|
||||||
|
|
||||||
Низкий приоритет
|
Низкий приоритет
|
||||||
- [x] Переменная, раз во сколько часов обновлять списки
|
|
||||||
- [ ] Галочка, которая режет доступ к doh серверам
|
- [ ] Галочка, которая режет доступ к doh серверам
|
||||||
- [ ] Свой конфиг sing-box
|
- [ ] IPv6. Только после наполнения Wiki
|
||||||
- [x] Поменять curl на wget, убрать зависимость. Проверять доступность списков лучше всего curl`ом
|
|
||||||
|
|
||||||
Рефактор
|
Рефактор
|
||||||
- [ ] Handle для sing-box
|
- [ ] Handle для sing-box
|
||||||
- [ ] Handle для dnsmasq
|
- [ ] Handle для dnsmasq
|
||||||
- [ ] Формирование json для sing-box на уровне jq, а не шаблонов
|
|
||||||
- [ ] Unit тесты (BATS)
|
- [ ] Unit тесты (BATS)
|
||||||
- [ ] Интеграционые тесты бекенда (OpenWrt rootfs + BATS)
|
- [ ] Интеграционые тесты бекенда (OpenWrt rootfs + BATS)
|
||||||
|
|
||||||
@@ -221,7 +143,7 @@ make package/luci-app-podkop/{clean,compile} V=s
|
|||||||
|
|
||||||
.ipk лежат в `bin/packages/x86_64/base/`
|
.ipk лежат в `bin/packages/x86_64/base/`
|
||||||
|
|
||||||
## Примеры строкs
|
## Примеры строк
|
||||||
https://github.com/itdoginfo/podkop/blob/main/String-example.md
|
https://github.com/itdoginfo/podkop/blob/main/String-example.md
|
||||||
|
|
||||||
## Ошибки
|
## Ошибки
|
||||||
|
|||||||
@@ -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.14
|
PKG_VERSION:=0.3.21
|
||||||
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
@@ -554,4 +554,172 @@ msgid "Path must contain at least one directory (like /tmp/cache.db)"
|
|||||||
msgstr "Путь должен содержать хотя бы одну директорию (например /tmp/cache.db)"
|
msgstr "Путь должен содержать хотя бы одну директорию (например /tmp/cache.db)"
|
||||||
|
|
||||||
msgid "Invalid path format. Must be like /tmp/cache.db"
|
msgid "Invalid path format. Must be like /tmp/cache.db"
|
||||||
msgstr "Неверный формат пути. Пример: /tmp/cache.db"
|
msgstr "Неверный формат пути. Пример: /tmp/cache.db"
|
||||||
|
|
||||||
|
msgid "Copy to Clipboard"
|
||||||
|
msgstr "Копировать в буфер обмена"
|
||||||
|
|
||||||
|
msgid "Close"
|
||||||
|
msgstr "Закрыть"
|
||||||
|
|
||||||
|
msgid "Loading..."
|
||||||
|
msgstr "Загрузка..."
|
||||||
|
|
||||||
|
msgid "Loading version information..."
|
||||||
|
msgstr "Загрузка информации о версии..."
|
||||||
|
|
||||||
|
msgid "Checking FakeIP..."
|
||||||
|
msgstr "Проверка FakeIP..."
|
||||||
|
|
||||||
|
msgid "timeout"
|
||||||
|
msgstr "таймаут"
|
||||||
|
|
||||||
|
msgid "Current config: "
|
||||||
|
msgstr "Текущая конфигурация: "
|
||||||
|
|
||||||
|
msgid "Invalid VLESS URL: type must be one of tcp, udp, grpc, http"
|
||||||
|
msgstr "Неверный URL VLESS: тип должен быть одним из tcp, udp, grpc, http"
|
||||||
|
|
||||||
|
msgid "Invalid VLESS URL: security must be one of tls, reality, none"
|
||||||
|
msgstr "Неверный URL VLESS: security должен быть одним из tls, reality, none"
|
||||||
|
|
||||||
|
msgid "Podkop"
|
||||||
|
msgstr "Podkop"
|
||||||
|
|
||||||
|
msgid "Proxy"
|
||||||
|
msgstr "Прокси"
|
||||||
|
|
||||||
|
msgid "VPN"
|
||||||
|
msgstr "VPN"
|
||||||
|
|
||||||
|
msgid "http://openwrt.lan:9090/ui"
|
||||||
|
msgstr "http://openwrt.lan:9090/ui"
|
||||||
|
|
||||||
|
msgid "Podkop Configuration"
|
||||||
|
msgstr "Конфигурация Podkop"
|
||||||
|
|
||||||
|
msgid "Active Connections"
|
||||||
|
msgstr "Активные соединения"
|
||||||
|
|
||||||
|
msgid "DNSMasq Configuration"
|
||||||
|
msgstr "Конфигурация DNSMasq"
|
||||||
|
|
||||||
|
msgid "Sing-box Configuration"
|
||||||
|
msgstr "Конфигурация Sing-box"
|
||||||
|
|
||||||
|
msgid "Extra configurations"
|
||||||
|
msgstr "Дополнительные конфигурации"
|
||||||
|
|
||||||
|
msgid "Add Section"
|
||||||
|
msgstr "Добавить раздел"
|
||||||
|
|
||||||
|
msgid "No output"
|
||||||
|
msgstr "Нет вывода"
|
||||||
|
|
||||||
|
msgid "Failed to copy: "
|
||||||
|
msgstr "Не удалось скопировать: "
|
||||||
|
|
||||||
|
msgid "Show Config"
|
||||||
|
msgstr "Показать конфигурацию"
|
||||||
|
|
||||||
|
msgid "View Logs"
|
||||||
|
msgstr "Просмотр логов"
|
||||||
|
|
||||||
|
msgid "Check Connections"
|
||||||
|
msgstr "Проверить соединения"
|
||||||
|
|
||||||
|
msgid "FakeIP Status"
|
||||||
|
msgstr "Статус FakeIP"
|
||||||
|
|
||||||
|
msgid "Device Model: "
|
||||||
|
msgstr "Модель устройства: "
|
||||||
|
|
||||||
|
msgid "OpenWrt Version: "
|
||||||
|
msgstr "Версия OpenWrt: "
|
||||||
|
|
||||||
|
msgid "Check DNSMasq"
|
||||||
|
msgstr "Проверить DNSMasq"
|
||||||
|
|
||||||
|
msgid "Check NFT Rules"
|
||||||
|
msgstr "Проверить правила NFT"
|
||||||
|
|
||||||
|
msgid "Update Lists"
|
||||||
|
msgstr "Обновить списки"
|
||||||
|
|
||||||
|
msgid "Lists Update Results"
|
||||||
|
msgstr "Результаты обновления списков"
|
||||||
|
|
||||||
|
msgid "NFT Rules"
|
||||||
|
msgstr "Правила NFT"
|
||||||
|
|
||||||
|
msgid "GitHub Connectivity"
|
||||||
|
msgstr "Подключение к GitHub"
|
||||||
|
|
||||||
|
msgid "Check GitHub"
|
||||||
|
msgstr "Проверить GitHub"
|
||||||
|
|
||||||
|
msgid "GitHub Connectivity Results"
|
||||||
|
msgstr "Результаты проверки подключения к GitHub"
|
||||||
|
|
||||||
|
msgid "Sing-Box Logs"
|
||||||
|
msgstr "Логи Sing-Box"
|
||||||
|
|
||||||
|
msgid "View recent sing-box logs from system journal"
|
||||||
|
msgstr "Просмотр последних логов sing-box из системного журнала"
|
||||||
|
|
||||||
|
msgid "View Sing-Box Logs"
|
||||||
|
msgstr "Просмотр логов Sing-Box"
|
||||||
|
|
||||||
|
msgid "Podkop Logs"
|
||||||
|
msgstr "Логи Podkop"
|
||||||
|
|
||||||
|
msgid "View recent podkop logs from system journal"
|
||||||
|
msgstr "Просмотр последних логов podkop из системного журнала"
|
||||||
|
|
||||||
|
msgid "View Podkop Logs"
|
||||||
|
msgstr "Просмотр логов Podkop"
|
||||||
|
|
||||||
|
msgid "Active Connections"
|
||||||
|
msgstr "Активные соединения"
|
||||||
|
|
||||||
|
msgid "View active sing-box network connections"
|
||||||
|
msgstr "Просмотр активных сетевых подключений sing-box"
|
||||||
|
|
||||||
|
msgid "DNSMasq Configuration"
|
||||||
|
msgstr "Конфигурация DNSMasq"
|
||||||
|
|
||||||
|
msgid "View current DNSMasq configuration settings"
|
||||||
|
msgstr "Просмотр текущих настроек конфигурации DNSMasq"
|
||||||
|
|
||||||
|
msgid "Sing-Box Configuration"
|
||||||
|
msgstr "Конфигурация Sing-Box"
|
||||||
|
|
||||||
|
msgid "Show current sing-box configuration"
|
||||||
|
msgstr "Показать текущую конфигурацию sing-box"
|
||||||
|
|
||||||
|
msgid "Show Sing-Box Config"
|
||||||
|
msgstr "Показать конфигурацию Sing-Box"
|
||||||
|
|
||||||
|
msgid "Diagnostic Tools"
|
||||||
|
msgstr "Инструменты диагностики"
|
||||||
|
|
||||||
|
msgid "Unknown"
|
||||||
|
msgstr "Неизвестно"
|
||||||
|
|
||||||
|
msgid "sing-box not running"
|
||||||
|
msgstr "sing-box не запущен"
|
||||||
|
|
||||||
|
msgid "DNS not configured"
|
||||||
|
msgstr "DNS не настроен"
|
||||||
|
|
||||||
|
msgid "running & enabled"
|
||||||
|
msgstr "запущен и активирован"
|
||||||
|
|
||||||
|
msgid "running but disabled"
|
||||||
|
msgstr "запущен, но деактивирован"
|
||||||
|
|
||||||
|
msgid "stopped but enabled"
|
||||||
|
msgstr "остановлен, но активирован"
|
||||||
|
|
||||||
|
msgid "stopped & disabled"
|
||||||
|
msgstr "остановлен и деактивирован"
|
||||||
@@ -908,4 +908,172 @@ msgid "Path must contain at least one directory (like /tmp/cache.db)"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
msgid "Invalid path format. Must be like /tmp/cache.db"
|
msgid "Invalid path format. Must be like /tmp/cache.db"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Copy to Clipboard"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Close"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Loading..."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Loading version information..."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Checking FakeIP..."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "timeout"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Current config: "
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Invalid VLESS URL: type must be one of tcp, udp, grpc, http"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Invalid VLESS URL: security must be one of tls, reality, none"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Podkop"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Proxy"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "VPN"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "http://openwrt.lan:9090/ui"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Podkop Configuration"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Active Connections"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "DNSMasq Configuration"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Sing-box Configuration"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Extra configurations"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Add Section"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "No output"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Failed to copy: "
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Show Config"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "View Logs"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Check Connections"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "FakeIP Status"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Device Model: "
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "OpenWrt Version: "
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Check DNSMasq"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Check NFT Rules"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Update Lists"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Lists Update Results"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "NFT Rules"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "GitHub Connectivity"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Check GitHub"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "GitHub Connectivity Results"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Sing-Box Logs"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "View recent sing-box logs from system journal"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "View Sing-Box Logs"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Podkop Logs"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "View recent podkop logs from system journal"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "View Podkop Logs"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Active Connections"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "View active sing-box network connections"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "DNSMasq Configuration"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "View current DNSMasq configuration settings"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Sing-Box Configuration"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Show current sing-box configuration"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Show Sing-Box Config"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Diagnostic Tools"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Unknown"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "sing-box not running"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "DNS not configured"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "running & enabled"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "running but disabled"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "stopped but enabled"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "stopped & disabled"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
include $(TOPDIR)/rules.mk
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
PKG_NAME:=podkop
|
PKG_NAME:=podkop
|
||||||
PKG_VERSION:=0.3.14
|
PKG_VERSION:=0.3.21
|
||||||
PKG_RELEASE:=1
|
PKG_RELEASE:=1
|
||||||
|
|
||||||
PKG_MAINTAINER:=ITDog <podkop@itdog.info>
|
PKG_MAINTAINER:=ITDog <podkop@itdog.info>
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
config main 'main'
|
config main 'main'
|
||||||
option mode 'proxy'
|
option mode 'proxy'
|
||||||
#option interface ''
|
#option interface ''
|
||||||
option proxy_config_type ''
|
option proxy_config_type 'url'
|
||||||
#option outbound_json ''
|
#option outbound_json ''
|
||||||
option proxy_string ''
|
option proxy_string ''
|
||||||
option domain_list_enabled '1'
|
option domain_list_enabled '1'
|
||||||
option domain_list 'russia_inside'
|
list domain_list 'russia_inside'
|
||||||
option subnets_list_enabled '0'
|
option subnets_list_enabled '0'
|
||||||
option custom_domains_list_type 'disable'
|
option custom_domains_list_type 'disabled'
|
||||||
#list custom_domains ''
|
#list custom_domains ''
|
||||||
#option custom_domains_text ''
|
#option custom_domains_text ''
|
||||||
option custom_local_domains_list_enabled '0'
|
option custom_local_domains_list_enabled '0'
|
||||||
@@ -31,4 +31,7 @@ config main 'main'
|
|||||||
option quic_disable '0'
|
option quic_disable '0'
|
||||||
option dont_touch_dhcp '0'
|
option dont_touch_dhcp '0'
|
||||||
option update_interval '1d'
|
option update_interval '1d'
|
||||||
option custom_domains_text
|
option dns_type 'doh'
|
||||||
|
option dns_server '1.1.1.1'
|
||||||
|
option dns_rewrite_ttl '600'
|
||||||
|
option cache_file '/tmp/cache.db'
|
||||||
@@ -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 get_proxy_label"
|
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_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
|
||||||
@@ -53,8 +53,12 @@ start_service() {
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if opkg list-installed | grep -qE "iptables|kmod-iptab"; then
|
if grep -q FriendlyWrt /etc/banner; then
|
||||||
printf "\033[31;1mFound incompatible iptables packages. If you're using FriendlyWrt: https://t.me/itdogchat/44512/181082\033[0m\n"
|
printf "\033[31;1mYou use FriendlyWrt. If you have problems, check out: https://t.me/itdogchat/44512/181082\033[0m\n"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if grep -qE 'doh_backup_noresolv|doh_backup_server|doh_server' /etc/config/dhcp; then
|
||||||
|
printf "\033[31;1mDetected https-dns-proxy. Disable or uninstall it for correct functionality.\033[0m\n"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if ! ip addr | grep -q "br-lan"; then
|
if ! ip addr | grep -q "br-lan"; then
|
||||||
@@ -142,9 +146,7 @@ nolog() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
main() {
|
main() {
|
||||||
sleep 5
|
sleep 3
|
||||||
|
|
||||||
config_foreach wget_github
|
|
||||||
|
|
||||||
mkdir -p /tmp/podkop
|
mkdir -p /tmp/podkop
|
||||||
|
|
||||||
@@ -208,8 +210,9 @@ main() {
|
|||||||
|
|
||||||
config_get proxy_string "main" "proxy_string"
|
config_get proxy_string "main" "proxy_string"
|
||||||
config_get interface "main" "interface"
|
config_get interface "main" "interface"
|
||||||
|
config_get outbound_json "main" "outbound_json"
|
||||||
|
|
||||||
if [ -n "$proxy_string" ] || [ -n "$interface" ]; then
|
if [ -n "$proxy_string" ] || [ -n "$interface" ] || [ -n "$outbound_json" ]; then
|
||||||
config_get_bool dont_touch_dhcp "main" "dont_touch_dhcp" "0"
|
config_get_bool dont_touch_dhcp "main" "dont_touch_dhcp" "0"
|
||||||
if [ "$dont_touch_dhcp" -eq 0 ]; then
|
if [ "$dont_touch_dhcp" -eq 0 ]; then
|
||||||
dnsmasq_add_resolver
|
dnsmasq_add_resolver
|
||||||
@@ -407,14 +410,17 @@ process_domains_text() {
|
|||||||
local tmp_file=$(mktemp)
|
local tmp_file=$(mktemp)
|
||||||
echo "$text" > "$tmp_file"
|
echo "$text" > "$tmp_file"
|
||||||
|
|
||||||
sed 's/[, ]\+/\n/g' "$tmp_file" | while IFS= read -r domain; do
|
# First filter out full comment lines and remove comments after domains
|
||||||
|
grep -v "^[[:space:]]*\/\/" "$tmp_file" | sed 's/\/\/.*$//' > "${tmp_file}.filtered"
|
||||||
|
|
||||||
|
sed 's/[, ]\+/\n/g' "${tmp_file}.filtered" | while IFS= read -r domain; do
|
||||||
domain=$(echo "$domain" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')
|
domain=$(echo "$domain" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')
|
||||||
if [ -n "$domain" ]; then
|
if [ -n "$domain" ]; then
|
||||||
sing_box_ruleset_domains "$domain" "$name"
|
sing_box_ruleset_domains "$domain" "$name"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
rm -f "$tmp_file"
|
rm -f "$tmp_file" "${tmp_file}.filtered"
|
||||||
}
|
}
|
||||||
|
|
||||||
process_subnets_text() {
|
process_subnets_text() {
|
||||||
@@ -424,7 +430,10 @@ process_subnets_text() {
|
|||||||
local tmp_file=$(mktemp)
|
local tmp_file=$(mktemp)
|
||||||
echo "$text" > "$tmp_file"
|
echo "$text" > "$tmp_file"
|
||||||
|
|
||||||
sed 's/[, ]\+/\n/g' "$tmp_file" | while IFS= read -r subnet; do
|
# First filter out full comment lines and remove comments after subnets
|
||||||
|
grep -v "^[[:space:]]*\/\/" "$tmp_file" | sed 's/\/\/.*$//' > "${tmp_file}.filtered"
|
||||||
|
|
||||||
|
sed 's/[, ]\+/\n/g' "${tmp_file}.filtered" | while IFS= read -r subnet; do
|
||||||
subnet=$(echo "$subnet" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')
|
subnet=$(echo "$subnet" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')
|
||||||
if [ -n "$subnet" ]; then
|
if [ -n "$subnet" ]; then
|
||||||
if ! echo "$subnet" | grep -q "/"; then
|
if ! echo "$subnet" | grep -q "/"; then
|
||||||
@@ -434,66 +443,9 @@ process_subnets_text() {
|
|||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
rm -f "$tmp_file"
|
rm -f "$tmp_file" "${tmp_file}.filtered"
|
||||||
}
|
}
|
||||||
|
|
||||||
wget_github() {
|
|
||||||
local count_nslookup=0
|
|
||||||
local count_curl=0
|
|
||||||
|
|
||||||
config_get domain_list_enabled "$section" "domain_list_enabled"
|
|
||||||
config_get subnets_list_enabled "$section" "subnets_list_enabled"
|
|
||||||
config_get custom_download_domains_list_enabled "$section" "custom_download_domains_list_enabled"
|
|
||||||
config_get custom_download_subnets_list_enabled "$section" "custom_download_subnets_list_enabled"
|
|
||||||
|
|
||||||
if [ "$domain_list_enabled" -eq 1 ] || [ "$subnets_list_enabled" -eq 1 ] ||
|
|
||||||
[ "$custom_download_domains_list_enabled" -eq 1 ] || [ "$custom_download_subnets_list_enabled" -eq 1 ] ; then
|
|
||||||
|
|
||||||
while true; do
|
|
||||||
if ! nslookup google.com >/dev/null 2>&1; then
|
|
||||||
log "DNS not working. Retrying... [$count_nslookup sec]"
|
|
||||||
count_nslookup=$((count_nslookup + 1))
|
|
||||||
else
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ $count_nslookup -lt 30 ]; then
|
|
||||||
sleep_interval=1
|
|
||||||
elif [ $count_nslookup -ge 30 ] && [ $count_nslookup -lt 60 ]; then
|
|
||||||
sleep_interval=5
|
|
||||||
elif [ $count_nslookup -ge 60 ] && [ $count_nslookup -lt 90 ]; then
|
|
||||||
sleep_interval=10
|
|
||||||
else
|
|
||||||
sleep_interval=30
|
|
||||||
fi
|
|
||||||
|
|
||||||
sleep $sleep_interval
|
|
||||||
done
|
|
||||||
|
|
||||||
while true; do
|
|
||||||
if ! curl -m 3 github.com; then
|
|
||||||
log "GitHub is not available. Check the internet availability [$count_curl sec]"
|
|
||||||
count_curl=$((count_curl + 1))
|
|
||||||
else
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ $count_curl -lt 30 ]; then
|
|
||||||
sleep_interval=1
|
|
||||||
elif [ $count_curl -ge 30 ] && [ $count_curl -lt 60 ]; then
|
|
||||||
sleep_interval=5
|
|
||||||
elif [ $count_curl -ge 60 ] && [ $count_curl -lt 90 ]; then
|
|
||||||
sleep_interval=10
|
|
||||||
else
|
|
||||||
sleep_interval=30
|
|
||||||
fi
|
|
||||||
|
|
||||||
sleep $sleep_interval
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
add_cron_job() {
|
add_cron_job() {
|
||||||
## Future: make a check so that it doesn't recreate many times
|
## Future: make a check so that it doesn't recreate many times
|
||||||
config_get domain_list_enabled "$section" "domain_list_enabled"
|
config_get domain_list_enabled "$section" "domain_list_enabled"
|
||||||
@@ -794,17 +746,26 @@ sing_box_outdound() {
|
|||||||
config_get outbound_json $section "outbound_json"
|
config_get outbound_json $section "outbound_json"
|
||||||
if [ -n "$outbound_json" ]; then
|
if [ -n "$outbound_json" ]; then
|
||||||
log "Using JSON outbound configuration"
|
log "Using JSON outbound configuration"
|
||||||
sing_box_config_outbound_json "$outbound_json"
|
sing_box_config_outbound_json "$outbound_json" "$section"
|
||||||
else
|
else
|
||||||
log "Missing outbound JSON configuration"
|
log "Missing outbound JSON configuration"
|
||||||
return
|
return
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
config_get proxy_string $section "proxy_string"
|
config_get proxy_string $section "proxy_string"
|
||||||
if [[ "$proxy_string" =~ ^ss:// ]]; then
|
|
||||||
sing_box_config_shadowsocks "$section" "$proxy_string"
|
# Extract the first non-comment line as the active configuration
|
||||||
elif [[ "$proxy_string" =~ ^vless:// ]]; then
|
active_proxy_string=$(echo "$proxy_string" | grep -v "^[[:space:]]*\/\/" | head -n 1)
|
||||||
sing_box_config_vless "$section" "$proxy_string"
|
|
||||||
|
if [ -z "$active_proxy_string" ]; then
|
||||||
|
log "No active proxy configuration found"
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "$active_proxy_string" =~ ^ss:// ]]; then
|
||||||
|
sing_box_config_shadowsocks "$section" "$active_proxy_string"
|
||||||
|
elif [[ "$active_proxy_string" =~ ^vless:// ]]; then
|
||||||
|
sing_box_config_vless "$section" "$active_proxy_string"
|
||||||
else
|
else
|
||||||
log "Unsupported proxy type or missing configuration"
|
log "Unsupported proxy type or missing configuration"
|
||||||
return
|
return
|
||||||
@@ -876,40 +837,35 @@ sing_box_config_check() {
|
|||||||
|
|
||||||
sing_box_config_outbound_json() {
|
sing_box_config_outbound_json() {
|
||||||
local json_config="$1"
|
local json_config="$1"
|
||||||
local listen_port="$2"
|
local section="$2"
|
||||||
|
|
||||||
cat > /tmp/base_config.json << EOF
|
# Create new object with tag first, then merge with the rest of the config
|
||||||
{
|
local modified_config=$(echo "$json_config" | jq --arg section "$section" \
|
||||||
"log": {
|
'del(.tag) | {"tag": $section} + .')
|
||||||
"level": "warn"
|
|
||||||
},
|
jq --argjson outbound "$modified_config" \
|
||||||
"inbounds": [
|
--arg section "$section" \
|
||||||
{
|
'. |
|
||||||
"type": "tproxy",
|
.outbounds |= (
|
||||||
"listen": "::",
|
map(
|
||||||
"listen_port": $listen_port,
|
if .tag == $section then
|
||||||
"tcp_fast_open": true,
|
$outbound
|
||||||
"udp_fragment": true
|
else . end
|
||||||
},
|
) +
|
||||||
{
|
(
|
||||||
"tag": "dns-in",
|
if (map(select(.tag == $section)) | length) == 0 then
|
||||||
"type": "direct",
|
[$outbound]
|
||||||
"listen": "127.0.0.42",
|
else [] end
|
||||||
"listen_port": 53
|
)
|
||||||
}
|
)' $SING_BOX_CONFIG >/tmp/sing-box-config-tmp.json && mv /tmp/sing-box-config-tmp.json $SING_BOX_CONFIG
|
||||||
],
|
|
||||||
"outbounds": [],
|
if [ $? -eq 0 ]; then
|
||||||
"route": {
|
log "Outbound config updated successfully"
|
||||||
"auto_detect_interface": true
|
else
|
||||||
}
|
log "Error: Invalid JSON config generated"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
EOF
|
|
||||||
|
|
||||||
jq --argjson outbound "$json_config" '.outbounds += [$outbound]' /tmp/base_config.json > $SING_BOX_CONFIG
|
|
||||||
rm -f /tmp/base_config.json
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
sing_box_config_shadowsocks() {
|
sing_box_config_shadowsocks() {
|
||||||
local section="$1"
|
local section="$1"
|
||||||
@@ -981,7 +937,7 @@ sing_box_config_vless() {
|
|||||||
get_param() {
|
get_param() {
|
||||||
local param="$1"
|
local param="$1"
|
||||||
local value=$(echo "$STRING" | sed -n "s/.*[?&]$param=\([^&?#]*\).*/\1/p")
|
local value=$(echo "$STRING" | sed -n "s/.*[?&]$param=\([^&?#]*\).*/\1/p")
|
||||||
value=$(echo "$value" | sed 's/%2F/\//g; s/%2C/,/g; s/%3D/=/g; s/%2B/+/g; s/%20/ /g' | tr -d '\n' | tr -d '\r')
|
value=$(echo "$value" | sed 's/%2F/\//g; s/%2C/,/g; s/%3D/=/g; s/%2B/+/g; s/%20/ /g; s/%3B/;/g' | tr -d '\n' | tr -d '\r')
|
||||||
echo "$value"
|
echo "$value"
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1279,7 +1235,7 @@ list_subnets_download() {
|
|||||||
esac
|
esac
|
||||||
|
|
||||||
local filename=$(basename "$URL")
|
local filename=$(basename "$URL")
|
||||||
wget -q -O "/tmp/podkop/$filename" "$URL"
|
wget -O "/tmp/podkop/$filename" "$URL"
|
||||||
|
|
||||||
while IFS= read -r subnet; do
|
while IFS= read -r subnet; do
|
||||||
if [ "$service" = "discord" ]; then
|
if [ "$service" = "discord" ]; then
|
||||||
@@ -1352,10 +1308,16 @@ sing_box_rule_preset() {
|
|||||||
config_get custom_subnets_list_enabled "$section" "custom_subnets_list_enabled"
|
config_get custom_subnets_list_enabled "$section" "custom_subnets_list_enabled"
|
||||||
config_get custom_local_domains_list_enabled "$section" "custom_local_domains_list_enabled"
|
config_get custom_local_domains_list_enabled "$section" "custom_local_domains_list_enabled"
|
||||||
config_get custom_download_domains_list_enabled "$section" "custom_download_domains_list_enabled"
|
config_get custom_download_domains_list_enabled "$section" "custom_download_domains_list_enabled"
|
||||||
|
config_get custom_download_subnets_list_enabled "$section" "custom_download_subnets_list_enabled"
|
||||||
|
|
||||||
if [ "$custom_domains_list_type" != "disabled" ] || [ "$custom_subnets_list_enabled" != "disabled" ] ||
|
if [ "$custom_domains_list_type" != "disabled" ] || [ "$custom_subnets_list_enabled" != "disabled" ] ||
|
||||||
[ "$custom_local_domains_list_enabled" = "1" ] || [ "$custom_download_domains_list_enabled" = "1" ]; then
|
[ "$custom_local_domains_list_enabled" = "1" ] || [ "$custom_download_domains_list_enabled" = "1" ] ||
|
||||||
|
[ "$custom_download_subnets_list_enabled" = "1" ]; then
|
||||||
sing_box_rules "$section" "$section"
|
sing_box_rules "$section" "$section"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$custom_domains_list_type" != "disabled" ] || [ "$custom_local_domains_list_enabled" = "1" ] ||
|
||||||
|
[ "$custom_download_domains_list_enabled" = "1" ]; then
|
||||||
sing_box_dns_rule_fakeip_section "$section" "$section"
|
sing_box_dns_rule_fakeip_section "$section" "$section"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -1373,8 +1335,13 @@ list_custom_local_domains_create() {
|
|||||||
local filename=$(basename "$local_file" | cut -d. -f1)
|
local filename=$(basename "$local_file" | cut -d. -f1)
|
||||||
|
|
||||||
while IFS= read -r domain; do
|
while IFS= read -r domain; do
|
||||||
log "From local file: $domain"
|
domain=$(echo "$domain" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')
|
||||||
sing_box_ruleset_domains $domain $section
|
if [ -n "$domain" ] && echo "$domain" | grep -E -q '^([a-zA-Z0-9][-a-zA-Z0-9]*\.)+[a-zA-Z]{2,}$'; then
|
||||||
|
log "Added $domain from local file"
|
||||||
|
sing_box_ruleset_domains "$domain" "$section"
|
||||||
|
else
|
||||||
|
log "Invalid domain skipped: $domain"
|
||||||
|
fi
|
||||||
done <"$local_file"
|
done <"$local_file"
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1458,14 +1425,14 @@ process_all_traffic_for_section() {
|
|||||||
if [ "$all_traffic_from_ip_enabled" -eq "1" ]; then
|
if [ "$all_traffic_from_ip_enabled" -eq "1" ]; then
|
||||||
log "Adding an IP to redirect all traffic"
|
log "Adding an IP to redirect all traffic"
|
||||||
config_list_foreach $section all_traffic_ip list_all_traffic_from_ip
|
config_list_foreach $section all_traffic_ip list_all_traffic_from_ip
|
||||||
config_list_foreach $section all_traffic_ip sing_box_rules_source_ip_cidr "$section" "$all_traffic_ip"
|
config_list_foreach $section all_traffic_ip sing_box_rules_source_ip_cidr
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
sing_box_rules_source_ip_cidr() {
|
sing_box_rules_source_ip_cidr() {
|
||||||
log "Configure source_ip_cidr rule in sing-box"
|
log "Configure source_ip_cidr rule in sing-box"
|
||||||
local outbound="$2"
|
|
||||||
local source_ip_cidr="$1"
|
local source_ip_cidr="$1"
|
||||||
|
local outbound="$section"
|
||||||
|
|
||||||
local current_source_ip_cidr=$(jq -r ".route.rules[] | select(.outbound == \"$outbound\" and .source_ip_cidr) | .rule_set" $SING_BOX_CONFIG)
|
local current_source_ip_cidr=$(jq -r ".route.rules[] | select(.outbound == \"$outbound\" and .source_ip_cidr) | .rule_set" $SING_BOX_CONFIG)
|
||||||
|
|
||||||
@@ -1773,6 +1740,7 @@ get_sing_box_status() {
|
|||||||
local enabled=0
|
local enabled=0
|
||||||
local status=""
|
local status=""
|
||||||
local version=""
|
local version=""
|
||||||
|
local dns_configured=0
|
||||||
|
|
||||||
# Check if service is enabled
|
# Check if service is enabled
|
||||||
if [ -x /etc/rc.d/S99sing-box ]; then
|
if [ -x /etc/rc.d/S99sing-box ]; then
|
||||||
@@ -1785,6 +1753,12 @@ get_sing_box_status() {
|
|||||||
version=$(sing-box version | head -n 1 | awk '{print $3}')
|
version=$(sing-box version | head -n 1 | awk '{print $3}')
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Check DNS configuration
|
||||||
|
local dns_server=$(uci get dhcp.@dnsmasq[0].server 2>/dev/null)
|
||||||
|
if [ "$dns_server" = "127.0.0.42" ]; then
|
||||||
|
dns_configured=1
|
||||||
|
fi
|
||||||
|
|
||||||
# Format status message
|
# Format status message
|
||||||
if [ $running -eq 1 ]; then
|
if [ $running -eq 1 ]; then
|
||||||
if [ $enabled -eq 1 ]; then
|
if [ $enabled -eq 1 ]; then
|
||||||
@@ -1800,7 +1774,7 @@ get_sing_box_status() {
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "{\"running\":$running,\"enabled\":$enabled,\"status\":\"$status\"}"
|
echo "{\"running\":$running,\"enabled\":$enabled,\"status\":\"$status\",\"dns_configured\":$dns_configured}"
|
||||||
}
|
}
|
||||||
|
|
||||||
get_status() {
|
get_status() {
|
||||||
@@ -1836,18 +1810,6 @@ 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"
|
||||||
|
|||||||
Reference in New Issue
Block a user