Compare commits
8 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
29159243ea | ||
|
|
269123600a | ||
|
|
49add27f81 | ||
|
|
c929c74da5 | ||
|
|
bb91144a91 | ||
|
|
2291d9fb9d | ||
|
|
f722a513d0 | ||
|
|
a71707f174 |
17
README.md
17
README.md
@@ -4,12 +4,13 @@
|
|||||||
- При возникновении проблем, нужен технически грамотный фидбэк в чат.
|
- При возникновении проблем, нужен технически грамотный фидбэк в чат.
|
||||||
- При обновлении **обязательно** [сбрасывайте кэш LuCI](https://podkop.net/docs/clear-browser-cache/).
|
- При обновлении **обязательно** [сбрасывайте кэш LuCI](https://podkop.net/docs/clear-browser-cache/).
|
||||||
- Также при обновлении всегда заходите в конфигурацию и проверяйте свои настройки. Конфигурация может измениться.
|
- Также при обновлении всегда заходите в конфигурацию и проверяйте свои настройки. Конфигурация может измениться.
|
||||||
- Необходимо минимум 15МБ свободного места на роутере. Роутеры с флешками на 16МБ сразу мимо.
|
- Необходимо минимум 25МБ свободного места на роутере. Роутеры с флешками на 16МБ сразу мимо.
|
||||||
- При старте программы редактируется конфиг Dnsmasq.
|
- При старте программы редактируется конфиг Dnsmasq.
|
||||||
- Podkop редактирует конфиг sing-box. Обязательно сохраните ваш конфиг sing-box перед установкой, если он вам нужен.
|
- Podkop редактирует конфиг sing-box. Обязательно сохраните ваш конфиг sing-box перед установкой, если он вам нужен.
|
||||||
- Информация здесь может быть устаревшей. Все изменения фиксируются в [телеграм-чате](https://t.me/itdogchat/81758/420321).
|
- Информация здесь может быть устаревшей. Все изменения фиксируются в [телеграм-чате](https://t.me/itdogchat/81758/420321).
|
||||||
- [Если у вас не что-то не работает.](https://podkop.net/docs/diagnostics/)
|
- [Если у вас не что-то не работает.](https://podkop.net/docs/diagnostics/)
|
||||||
- Если у вас установлен Getdomains, [его следует удалить](https://github.com/itdoginfo/domain-routing-openwrt?tab=readme-ov-file#%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82-%D0%B4%D0%BB%D1%8F-%D1%83%D0%B4%D0%B0%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F).
|
- Если у вас установлен Getdomains, [его следует удалить](https://github.com/itdoginfo/domain-routing-openwrt?tab=readme-ov-file#%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82-%D0%B4%D0%BB%D1%8F-%D1%83%D0%B4%D0%B0%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F).
|
||||||
|
- Требуется версия OpenWrt 24.10.
|
||||||
|
|
||||||
# Документация
|
# Документация
|
||||||
https://podkop.net/
|
https://podkop.net/
|
||||||
@@ -28,17 +29,17 @@ sh <(wget -O - https://raw.githubusercontent.com/itdoginfo/podkop/refs/heads/mai
|
|||||||
Основные задачи в issues.
|
Основные задачи в issues.
|
||||||
|
|
||||||
## Рефактор
|
## Рефактор
|
||||||
- [ ] Очевидные повторения в `/usr/bin/podkop` загнать в переменые
|
- [x] Очевидные повторения в `/usr/bin/podkop` загнать в переменые
|
||||||
- [x] Возможно поменять структуру
|
- [x] Возможно поменять структуру
|
||||||
|
|
||||||
## Списки
|
## Списки
|
||||||
- [ ] CloudFront
|
- [x] CloudFront
|
||||||
- [ ] DO
|
- [x] DO
|
||||||
- [ ] HODCA
|
- [x] HODCA
|
||||||
|
|
||||||
## Будущее
|
## Будущее
|
||||||
- [ ] [Подписка](https://github.com/itdoginfo/podkop/issues/118). Здесь нужна реализация, чтоб для каждой секции помимо ручного выбора, был выбор фильтрации по тегу. Например, для main выбираем ключевые слова NL, DE, FI. А для extra секции фильтруем по RU. И создаётся outbound c urltest в которых перечислены outbound из фильтров.
|
- [ ] [Подписка](https://github.com/itdoginfo/podkop/issues/118). Здесь нужна реализация, чтоб для каждой секции помимо ручного выбора, был выбор фильтрации по тегу. Например, для main выбираем ключевые слова NL, DE, FI. А для extra секции фильтруем по RU. И создаётся outbound c urltest в которых перечислены outbound из фильтров.
|
||||||
- [ ] Опция, когда все запросы (с роутера в первую очередь), а не только br-lan идут в прокси. С этим связана #95. Требуется много переделать для nftables.
|
- [x] Опция, когда все запросы (с роутера в первую очередь), а не только br-lan идут в прокси. С этим связана #95. Требуется много переделать для nftables.
|
||||||
- [ ] Весь трафик в Proxy\VPN. Вопрос, что делать с экстрасекциями в этом случае. FakeIP здесь скорее не нужен, а значит только main секция остаётся. Всё что касается fakeip проверок, придётся выключать в этом режиме.
|
- [ ] Весь трафик в Proxy\VPN. Вопрос, что делать с экстрасекциями в этом случае. FakeIP здесь скорее не нужен, а значит только main секция остаётся. Всё что касается fakeip проверок, придётся выключать в этом режиме.
|
||||||
- [x] Поддержка Source format. Нужна расшифровка в json и если присуствуют подсети, заносить их в custom subnet nftset.
|
- [x] Поддержка Source format. Нужна расшифровка в json и если присуствуют подсети, заносить их в custom subnet nftset.
|
||||||
- [x] Переделывание функции формирования кастомных списков в JSON. Обрабатывать сразу скопом, а не по одному.
|
- [x] Переделывание функции формирования кастомных списков в JSON. Обрабатывать сразу скопом, а не по одному.
|
||||||
@@ -49,4 +50,6 @@ sh <(wget -O - https://raw.githubusercontent.com/itdoginfo/podkop/refs/heads/mai
|
|||||||
|
|
||||||
## Тесты
|
## Тесты
|
||||||
- [ ] Unit тесты (BATS)
|
- [ ] Unit тесты (BATS)
|
||||||
- [ ] Интеграционые тесты бекенда (OpenWrt rootfs + BATS)
|
- [ ] Интеграционые тесты бекенда (OpenWrt rootfs + BATS)
|
||||||
|
|
||||||
|
[](https://deepwiki.com/itdoginfo/podkop)
|
||||||
11
install.sh
11
install.sh
@@ -108,6 +108,15 @@ check_system() {
|
|||||||
MODEL=$(cat /tmp/sysinfo/model)
|
MODEL=$(cat /tmp/sysinfo/model)
|
||||||
msg "Router model: $MODEL"
|
msg "Router model: $MODEL"
|
||||||
|
|
||||||
|
# Check OpenWrt version
|
||||||
|
openwrt_version=$(cat /etc/openwrt_release | grep DISTRIB_RELEASE | cut -d"'" -f2 | cut -d'.' -f1)
|
||||||
|
if [ "$openwrt_version" = "23" ]; then
|
||||||
|
msg "OpenWrt 23.05 не поддерживается начиная с podkop 0.5.0"
|
||||||
|
msg "Для OpenWrt 23.05 используйте podkop версии 0.4.11 или устанавливайте зависимости и podkop вручную"
|
||||||
|
msg "Подробности: https://podkop.net/docs/install/#%d1%83%d1%81%d1%82%d0%b0%d0%bd%d0%be%d0%b2%d0%ba%d0%b0-%d0%bd%d0%b0-2305"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
# Check available space
|
# Check available space
|
||||||
AVAILABLE_SPACE=$(df /overlay | awk 'NR==2 {print $4}')
|
AVAILABLE_SPACE=$(df /overlay | awk 'NR==2 {print $4}')
|
||||||
REQUIRED_SPACE=15360 # 15MB in KB
|
REQUIRED_SPACE=15360 # 15MB in KB
|
||||||
@@ -150,7 +159,7 @@ sing_box() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
sing_box_version=$(sing-box version | head -n 1 | awk '{print $3}')
|
sing_box_version=$(sing-box version | head -n 1 | awk '{print $3}')
|
||||||
required_version="1.11.1"
|
required_version="1.12.4"
|
||||||
|
|
||||||
if [ "$(echo -e "$sing_box_version\n$required_version" | sort -V | head -n 1)" != "$required_version" ]; then
|
if [ "$(echo -e "$sing_box_version\n$required_version" | sort -V | head -n 1)" != "$required_version" ]; then
|
||||||
msg "sing-box version $sing_box_version is older than required $required_version"
|
msg "sing-box version $sing_box_version is older than required $required_version"
|
||||||
|
|||||||
@@ -1021,7 +1021,7 @@ import_local_domain_or_subnet_list() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
local items json_array
|
local items json_array
|
||||||
items="$(parse_domain_or_subnet_file_to_comma_string "$tmpfile" "domains")"
|
items="$(parse_domain_or_subnet_file_to_comma_string "$filepath" "$type")"
|
||||||
|
|
||||||
if [ -z "$items" ]; then
|
if [ -z "$items" ]; then
|
||||||
log "No valid $type found in $filepath"
|
log "No valid $type found in $filepath"
|
||||||
@@ -1375,7 +1375,7 @@ get_service_proxy_address() {
|
|||||||
local detour
|
local detour
|
||||||
config_get_bool detour "main" "detour" 0
|
config_get_bool detour "main" "detour" 0
|
||||||
if [ "$detour" -eq 1 ]; then
|
if [ "$detour" -eq 1 ]; then
|
||||||
echo "$SB_SERVICE_MIXED_INBOUND_TAG:$SB_SERVICE_MIXED_INBOUND_PORT"
|
echo "$SB_SERVICE_MIXED_INBOUND_ADDRESS:$SB_SERVICE_MIXED_INBOUND_PORT"
|
||||||
else
|
else
|
||||||
echo ""
|
echo ""
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -16,10 +16,18 @@ is_ipv4_ip_or_ipv4_cidr() {
|
|||||||
is_ipv4 "$1" || is_ipv4_cidr "$1"
|
is_ipv4 "$1" || is_ipv4_cidr "$1"
|
||||||
}
|
}
|
||||||
|
|
||||||
# Check if string is valid domain
|
|
||||||
is_domain() {
|
is_domain() {
|
||||||
local str="$1"
|
local str="$1"
|
||||||
echo "$str" | grep -Eq '^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])(\.[a-z0-9]([a-z0-9-]{0,61}[a-z0-9]))+$'
|
local regex='^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$'
|
||||||
|
|
||||||
|
[[ "$str" =~ $regex ]]
|
||||||
|
}
|
||||||
|
|
||||||
|
is_domain_suffix() {
|
||||||
|
local str="$1"
|
||||||
|
local normalized="${str#.}"
|
||||||
|
|
||||||
|
is_domain "$normalized"
|
||||||
}
|
}
|
||||||
|
|
||||||
# Checks if the given string is a valid base64-encoded sequence
|
# Checks if the given string is a valid base64-encoded sequence
|
||||||
@@ -295,7 +303,7 @@ parse_domain_or_subnet_string_to_commas_string() {
|
|||||||
for item in $string; do
|
for item in $string; do
|
||||||
case "$type" in
|
case "$type" in
|
||||||
domains)
|
domains)
|
||||||
if ! is_domain "$item"; then
|
if ! is_domain_suffix "$item"; then
|
||||||
log "'$item' is not a valid domain" "debug"
|
log "'$item' is not a valid domain" "debug"
|
||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
@@ -341,7 +349,7 @@ parse_domain_or_subnet_file_to_comma_string() {
|
|||||||
|
|
||||||
case "$type" in
|
case "$type" in
|
||||||
domains)
|
domains)
|
||||||
if ! is_domain "$line"; then
|
if ! is_domain_suffix "$line"; then
|
||||||
log "'$line' is not a valid domain" "debug"
|
log "'$line' is not a valid domain" "debug"
|
||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
|
|||||||
Reference in New Issue
Block a user