Compare commits
5 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f48670018f | ||
|
|
8870a56885 | ||
|
|
16f737914b | ||
|
|
6b19fbf7d9 | ||
|
|
c8051bbbc8 |
25
README.md
25
README.md
@@ -9,7 +9,7 @@ sh <(wget -O - https://raw.githubusercontent.com/itdoginfo/domain-routing-openwr
|
|||||||
|
|
||||||
Оставляет туннели, зоны, forwarding. А также stubby и dnscrypt. Они не помешают. Конфиг sing-box будет перезаписан в podkop.
|
Оставляет туннели, зоны, forwarding. А также stubby и dnscrypt. Они не помешают. Конфиг sing-box будет перезаписан в podkop.
|
||||||
|
|
||||||
# Установка
|
# Установка Podkop
|
||||||
Пакет работает на всех архитектурах.
|
Пакет работает на всех архитектурах.
|
||||||
Будет точно работать только на OpenWrt 23.05.
|
Будет точно работать только на OpenWrt 23.05.
|
||||||
|
|
||||||
@@ -64,6 +64,7 @@ opkg update && opkg install sing-box
|
|||||||
# Известные баги
|
# Известные баги
|
||||||
- [x] Не работает proxy при режимах main vpn, second proxy
|
- [x] Не работает proxy при режимах main vpn, second proxy
|
||||||
- [ ] Не всегда отрабатывает ucitrack (применение настроек из luci). Не удаётся повторить
|
- [ ] Не всегда отрабатывает ucitrack (применение настроек из luci). Не удаётся повторить
|
||||||
|
- [x] All traffic for IP ломает инет на клиенте. Proxy mode
|
||||||
|
|
||||||
# ToDo
|
# ToDo
|
||||||
Сделано
|
Сделано
|
||||||
@@ -73,17 +74,20 @@ opkg update && opkg install sing-box
|
|||||||
- [x] Дополнительная вкладка для ещё одного туннеля. Домены, подсети.
|
- [x] Дополнительная вкладка для ещё одного туннеля. Домены, подсети.
|
||||||
- [x] Улучшение скрипта автоматической установки. Спрашивать про туннели.
|
- [x] Улучшение скрипта автоматической установки. Спрашивать про туннели.
|
||||||
- [x] Зависимость от dnsmasq-full
|
- [x] Зависимость от dnsmasq-full
|
||||||
|
|
||||||
Приоритет 1
|
|
||||||
- [x] В nft разделить правило tproxy на маркировку и tproxy
|
|
||||||
- [ ] Нужен дебаг. Restart ucitrack в отдельный скрипт postinst, не отрабатывает.
|
|
||||||
- [x] Весь трафик для устойства пускать в туннель\прокси
|
- [x] Весь трафик для устойства пускать в туннель\прокси
|
||||||
- [x] Исключение для IP, не ходить в туннель\прокси совсем 0x0
|
- [x] Исключение для IP, не ходить в туннель\прокси совсем 0x0
|
||||||
- [x] Врубать галочкой yacd в sing-box
|
- [x] Врубать галочкой yacd в sing-box
|
||||||
- [x] Свои списки. Просто список доменов с переносом строки
|
- [x] Свои списки. Просто список доменов с переносом строки
|
||||||
- [x] Свои списки ipv4
|
- [x] Свои списки ipv4
|
||||||
- [ ] Ntp (порт 123) делать маркировку 0x0. По галке
|
- [x] В nft разделить правило tproxy на маркировку и tproxy
|
||||||
- [ ] Вернуть две цепочки nft
|
- [x] Вернуть две цепочки nft
|
||||||
|
- [x] Ntp (порт 123) делать маркировку 0x0. По галке
|
||||||
|
- [x] Открытый прокси порт на роутере для браузеров
|
||||||
|
|
||||||
|
Приоритет 1
|
||||||
|
- [x] Переделать на PROCD и выкинуть ucitrack.
|
||||||
|
- [x] Нужен дебаг. Restart ucitrack в отдельный скрипт postinst, не отрабатывает.
|
||||||
|
- [ ] Скрипт установки: проверка установлен ли уже podkop. Если да, то просто предлагать обновится без установки тунелей и прокси.
|
||||||
|
|
||||||
Приоритет 2
|
Приоритет 2
|
||||||
- [ ] Кнопка обновления списка доменов и подсетей
|
- [ ] Кнопка обновления списка доменов и подсетей
|
||||||
@@ -102,20 +106,19 @@ Wiki
|
|||||||
- [ ] Мониторинг tls
|
- [ ] Мониторинг tls
|
||||||
|
|
||||||
Низкий приоритет
|
Низкий приоритет
|
||||||
- [x] Открытый прокси порт на роутере для браузеров
|
|
||||||
- [ ] Переменная, раз во сколько часов обновлять списки
|
- [ ] Переменная, раз во сколько часов обновлять списки
|
||||||
- [ ] Галочка, которая режет доступ к doh серверам
|
- [ ] Галочка, которая режет доступ к doh серверам
|
||||||
|
|
||||||
Рефактор
|
Рефактор
|
||||||
|
- [ ] Handle для sing-box
|
||||||
|
- [ ] Handle для dnsmasq
|
||||||
- [ ] Формирование json для sing-box на уровне jq, а не шаблонов
|
- [ ] Формирование json для sing-box на уровне jq, а не шаблонов
|
||||||
- [ ] Unit тесты (BATS)
|
- [ ] Unit тесты (BATS)
|
||||||
- [ ] Интеграционые тесты бекенда (OpenWrt rootfs + BATS)
|
- [ ] Интеграционые тесты бекенда (OpenWrt rootfs + BATS)
|
||||||
- [ ] RU перевод
|
- [ ] RU перевод
|
||||||
- [ ] Handle для sing-box
|
|
||||||
- [ ] Handle для dnsmasq
|
|
||||||
|
|
||||||
Хз как сделать
|
Хз как сделать
|
||||||
- [ ] Добавить label от конфига vless\ss\etc в luci. Хз как
|
- [ ] Добавить label от конфига vless\ss\etc в luci.
|
||||||
|
|
||||||
# Разработка
|
# Разработка
|
||||||
Есть два варианта:
|
Есть два варианта:
|
||||||
|
|||||||
@@ -66,7 +66,7 @@ while true; do
|
|||||||
;;
|
;;
|
||||||
|
|
||||||
6)
|
6)
|
||||||
echo "Skip"
|
echo "Skip. Use this if you're installing an upgrade."
|
||||||
break
|
break
|
||||||
;;
|
;;
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
include $(TOPDIR)/rules.mk
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
PKG_NAME:=luci-app-podkop
|
PKG_NAME:=luci-app-podkop
|
||||||
PKG_VERSION:=0.1.8
|
PKG_VERSION:=0.2.0
|
||||||
PKG_RELEASE:=1
|
PKG_RELEASE:=1
|
||||||
|
|
||||||
LUCI_TITLE:=LuCI podkop app
|
LUCI_TITLE:=LuCI podkop app
|
||||||
|
|||||||
@@ -135,7 +135,7 @@ return view.extend({
|
|||||||
o.depends('exclude_from_ip_enabled', '1');
|
o.depends('exclude_from_ip_enabled', '1');
|
||||||
o.rmempty = false;
|
o.rmempty = false;
|
||||||
|
|
||||||
o = s.taboption('main', form.Flag, 'yacd', _('Yacd enable'), _('http://openwrt.lan:9090:/ui'));
|
o = s.taboption('main', form.Flag, 'yacd', _('Yacd enable'), _('http://openwrt.lan:9090/ui'));
|
||||||
o.default = '0';
|
o.default = '0';
|
||||||
o.depends('mode', 'proxy');
|
o.depends('mode', 'proxy');
|
||||||
o.rmempty = false;
|
o.rmempty = false;
|
||||||
@@ -145,6 +145,11 @@ return view.extend({
|
|||||||
o.depends('mode', 'proxy');
|
o.depends('mode', 'proxy');
|
||||||
o.rmempty = false;
|
o.rmempty = false;
|
||||||
|
|
||||||
|
o = s.taboption('main', form.Flag, 'exclude_ntp', _('Exclude NTP'), _('For issues with open connections sing-box'));
|
||||||
|
o.default = '0';
|
||||||
|
o.depends('mode', 'proxy');
|
||||||
|
o.rmempty = false;
|
||||||
|
|
||||||
// Second section
|
// Second section
|
||||||
s = m.section(form.TypedSection, 'second');
|
s = m.section(form.TypedSection, 'second');
|
||||||
s.anonymous = true;
|
s.anonymous = true;
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
include $(TOPDIR)/rules.mk
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
PKG_NAME:=podkop
|
PKG_NAME:=podkop
|
||||||
PKG_VERSION:=0.1.8
|
PKG_VERSION:=0.2.0
|
||||||
PKG_RELEASE:=1
|
PKG_RELEASE:=1
|
||||||
|
|
||||||
PKG_MAINTAINER:=ITDog <podkop@itdog.info>
|
PKG_MAINTAINER:=ITDog <podkop@itdog.info>
|
||||||
@@ -28,20 +28,6 @@ endef
|
|||||||
define Build/Compile
|
define Build/Compile
|
||||||
endef
|
endef
|
||||||
|
|
||||||
define Package/podkop/postinst
|
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
if ! uci show ucitrack | grep -q 'podkop'; then
|
|
||||||
uci add ucitrack podkop
|
|
||||||
uci set ucitrack.@podkop[-1].init=podkop
|
|
||||||
uci commit ucitrack
|
|
||||||
|
|
||||||
/etc/init.d/ucitrack restart
|
|
||||||
fi
|
|
||||||
|
|
||||||
exit 0
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Package/podkop/prerm
|
define Package/podkop/prerm
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ config main 'main'
|
|||||||
list exclude_traffic_ip ''
|
list exclude_traffic_ip ''
|
||||||
option yacd '0'
|
option yacd '0'
|
||||||
option socks5 '0'
|
option socks5 '0'
|
||||||
|
option exclude_ntp '0'
|
||||||
|
|
||||||
config second 'second'
|
config second 'second'
|
||||||
option second_enable '0'
|
option second_enable '0'
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
#!/bin/sh /etc/rc.common
|
#!/bin/sh /etc/rc.common
|
||||||
|
|
||||||
START=99
|
START=99
|
||||||
|
USE_PROCD=1
|
||||||
|
|
||||||
script=$(readlink "$initscript")
|
script=$(readlink "$initscript")
|
||||||
NAME="$(basename ${script:-$initscript})"
|
NAME="$(basename ${script:-$initscript})"
|
||||||
@@ -8,13 +9,12 @@ config_load "$NAME"
|
|||||||
|
|
||||||
EXTRA_COMMANDS="list_update add_route_interface version"
|
EXTRA_COMMANDS="list_update add_route_interface version"
|
||||||
EXTRA_HELP=" list_update Updating domain and subnet lists
|
EXTRA_HELP=" list_update Updating domain and subnet lists
|
||||||
version Show version
|
|
||||||
add_route_interface Adding route for interface
|
add_route_interface Adding route for interface
|
||||||
sing_box_config_vless For test vless string"
|
sing_box_config_vless For test vless string"
|
||||||
|
|
||||||
cron_job="0 4 * * * /etc/init.d/podkop list_update"
|
cron_job="0 4 * * * /etc/init.d/podkop list_update"
|
||||||
|
|
||||||
start() {
|
start_service() {
|
||||||
log "Start podkop"
|
log "Start podkop"
|
||||||
|
|
||||||
dnsmasqfull
|
dnsmasqfull
|
||||||
@@ -187,9 +187,15 @@ start() {
|
|||||||
}]' /etc/sing-box/config.json >/tmp/sing-box-config-tmp.json && mv /tmp/sing-box-config-tmp.json /etc/sing-box/config.json
|
}]' /etc/sing-box/config.json >/tmp/sing-box-config-tmp.json && mv /tmp/sing-box-config-tmp.json /etc/sing-box/config.json
|
||||||
/etc/init.d/sing-box restart
|
/etc/init.d/sing-box restart
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
config_get_bool exclude_ntp "main" "exclude_ntp" "0"
|
||||||
|
if [ "$exclude_ntp" -eq 1 ]; then
|
||||||
|
log "NTP traffic exclude for proxy"
|
||||||
|
nft insert rule inet PodkopTable mangle udp dport 123 return
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
stop() {
|
stop_service() {
|
||||||
log "Stopping the podkop"
|
log "Stopping the podkop"
|
||||||
rm -f /tmp/dnsmasq.d/podkop*
|
rm -f /tmp/dnsmasq.d/podkop*
|
||||||
remove_cron_job
|
remove_cron_job
|
||||||
@@ -227,18 +233,18 @@ stop() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
restart() {
|
restart_service() {
|
||||||
stop
|
stop
|
||||||
start
|
start
|
||||||
}
|
}
|
||||||
|
|
||||||
reload() {
|
reload_service() {
|
||||||
stop
|
stop
|
||||||
start
|
start
|
||||||
}
|
}
|
||||||
|
|
||||||
version() {
|
service_triggers() {
|
||||||
echo VERSION_FROM_MAKEFILE
|
procd_add_config_trigger "config.change" "$NAME" "$initscript" reload 'on_config_change'
|
||||||
}
|
}
|
||||||
|
|
||||||
log() {
|
log() {
|
||||||
@@ -390,7 +396,7 @@ add_set() {
|
|||||||
|
|
||||||
nft add table inet PodkopTable
|
nft add table inet PodkopTable
|
||||||
log "Create set $set_name"
|
log "Create set $set_name"
|
||||||
nft add chain inet PodkopTable mangle { type filter hook prerouting priority mangle \; policy accept \;}
|
nft add chain inet PodkopTable mangle { type filter hook prerouting priority -150 \; policy accept \;}
|
||||||
nft add set inet PodkopTable "$set_name" { type ipv4_addr\; flags interval\; auto-merge\; }
|
nft add set inet PodkopTable "$set_name" { type ipv4_addr\; flags interval\; auto-merge\; }
|
||||||
config_get mode "$connect" "mode"
|
config_get mode "$connect" "mode"
|
||||||
case "$mode" in
|
case "$mode" in
|
||||||
@@ -405,8 +411,7 @@ add_set() {
|
|||||||
;;
|
;;
|
||||||
|
|
||||||
"proxy")
|
"proxy")
|
||||||
#nft add chain inet PodkopTable mangle { type filter hook prerouting priority mangle \; }
|
nft add chain inet PodkopTable proxy { type filter hook prerouting priority -100 \; }
|
||||||
#nft add chain inet PodkopTable proxy { type filter hook prerouting priority mangle \; }
|
|
||||||
if nft list table inet PodkopTable | grep -q "ip daddr @"$set_name" meta l4proto"; then
|
if nft list table inet PodkopTable | grep -q "ip daddr @"$set_name" meta l4proto"; then
|
||||||
log "Nft rule tproxy exists"
|
log "Nft rule tproxy exists"
|
||||||
else
|
else
|
||||||
@@ -414,13 +419,17 @@ add_set() {
|
|||||||
if [ "$connect" = "main" ]; then
|
if [ "$connect" = "main" ]; then
|
||||||
nft add rule inet PodkopTable mangle ip daddr @"$set_name" meta l4proto tcp meta mark set 0x105 counter
|
nft add rule inet PodkopTable mangle ip daddr @"$set_name" meta l4proto tcp meta mark set 0x105 counter
|
||||||
nft add rule inet PodkopTable mangle ip daddr @"$set_name" meta l4proto udp meta mark set 0x105 counter
|
nft add rule inet PodkopTable mangle ip daddr @"$set_name" meta l4proto udp meta mark set 0x105 counter
|
||||||
nft add rule inet PodkopTable mangle iifname "br-lan" meta mark 0x105 meta l4proto tcp tproxy ip to :1602 counter
|
if ! ( nft list table inet PodkopTable | grep -q "meta mark 0x00000105 meta l4proto tcp tproxy" ); then
|
||||||
nft add rule inet PodkopTable mangle iifname "br-lan" meta mark 0x105 meta l4proto udp tproxy ip to :1602 counter
|
nft add rule inet PodkopTable proxy iifname "br-lan" meta mark 0x105 meta l4proto tcp tproxy ip to :1602 counter
|
||||||
|
nft add rule inet PodkopTable proxy iifname "br-lan" meta mark 0x105 meta l4proto udp tproxy ip to :1602 counter
|
||||||
|
fi
|
||||||
elif [ "$connect" = "second" ]; then
|
elif [ "$connect" = "second" ]; then
|
||||||
nft add rule inet PodkopTable mangle ip daddr @"$set_name" meta l4proto tcp meta mark set 0x106 counter
|
nft add rule inet PodkopTable mangle ip daddr @"$set_name" meta l4proto tcp meta mark set 0x106 counter
|
||||||
nft add rule inet PodkopTable mangle ip daddr @"$set_name" meta l4proto udp meta mark set 0x106 counter
|
nft add rule inet PodkopTable mangle ip daddr @"$set_name" meta l4proto udp meta mark set 0x106 counter
|
||||||
nft add rule inet PodkopTable mangle iifname "br-lan" meta mark 0x106 meta l4proto tcp tproxy ip to :1603 counter
|
if ! ( nft list table inet PodkopTable | grep -q "meta mark 0x00000106 meta l4proto tcp tproxy" ); then
|
||||||
nft add rule inet PodkopTable mangle iifname "br-lan" meta mark 0x106 meta l4proto udp tproxy ip to :1603 counter
|
nft add rule inet PodkopTable proxy iifname "br-lan" meta mark 0x106 meta l4proto tcp tproxy ip to :1603 counter
|
||||||
|
nft add rule inet PodkopTable proxy iifname "br-lan" meta mark 0x106 meta l4proto udp tproxy ip to :1603 counter
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
@@ -645,14 +654,36 @@ list_custom_subnets_create() {
|
|||||||
list_all_traffic_from_ip() {
|
list_all_traffic_from_ip() {
|
||||||
local ip="$1"
|
local ip="$1"
|
||||||
if ! nft list chain inet PodkopTable mangle | grep -q "ip saddr $ip"; then
|
if ! nft list chain inet PodkopTable mangle | grep -q "ip saddr $ip"; then
|
||||||
nft insert rule inet PodkopTable mangle ip saddr $ip meta mark set 0x105 counter
|
config_get mode "main" "mode" "0"
|
||||||
|
if [ "$mode" = "vpn" ]; then
|
||||||
|
nft insert rule inet PodkopTable mangle ip saddr $ip meta mark set 0x105 counter
|
||||||
|
elif [ "$mode" = "proxy" ]; then
|
||||||
|
nft add set inet PodkopTable localv4 { type ipv4_addr\; flags interval\; }
|
||||||
|
nft add element inet PodkopTable localv4 { \
|
||||||
|
0.0.0.0/8, \
|
||||||
|
10.0.0.0/8, \
|
||||||
|
127.0.0.0/8, \
|
||||||
|
169.254.0.0/16, \
|
||||||
|
172.16.0.0/12, \
|
||||||
|
192.0.0.0/24, \
|
||||||
|
192.0.2.0/24, \
|
||||||
|
192.88.99.0/24, \
|
||||||
|
192.168.0.0/16, \
|
||||||
|
198.18.0.0/15, \
|
||||||
|
198.51.100.0/24, \
|
||||||
|
203.0.113.0/24, \
|
||||||
|
224.0.0.0/4, \
|
||||||
|
240.0.0.0-255.255.255.255 }
|
||||||
|
nft insert rule inet PodkopTable mangle ip saddr $ip meta l4proto { tcp, udp } meta mark set 0x105 counter
|
||||||
|
nft insert rule inet PodkopTable mangle ip saddr $ip ip daddr @localv4 return
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
list_exclude_traffic_from_ip() {
|
list_exclude_traffic_from_ip() {
|
||||||
local ip="$1"
|
local ip="$1"
|
||||||
if ! nft list chain inet PodkopTable mangle | grep -q "ip saddr $ip"; then
|
if ! nft list chain inet PodkopTable mangle | grep -q "ip saddr $ip"; then
|
||||||
nft insert rule inet PodkopTable mangle ip saddr $ip meta mark set 0x0 counter
|
nft insert rule inet PodkopTable mangle ip saddr $ip return
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user