Fix all traffic to trpoxy for IP, two chains, exclude NTP

This commit is contained in:
itdoginfo
2024-10-30 16:54:58 +03:00
parent c8051bbbc8
commit 6b19fbf7d9
6 changed files with 58 additions and 24 deletions

View File

@@ -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,19 @@ 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
- [ ] Переделать на PROCD и выкинуть ucitrack
- [ ] Нужен дебаг. Restart ucitrack в отдельный скрипт postinst, не отрабатывает.
Приоритет 2 Приоритет 2
- [ ] Кнопка обновления списка доменов и подсетей - [ ] Кнопка обновления списка доменов и подсетей
@@ -102,7 +105,6 @@ Wiki
- [ ] Мониторинг tls - [ ] Мониторинг tls
Низкий приоритет Низкий приоритет
- [x] Открытый прокси порт на роутере для браузеров
- [ ] Переменная, раз во сколько часов обновлять списки - [ ] Переменная, раз во сколько часов обновлять списки
- [ ] Галочка, которая режет доступ к doh серверам - [ ] Галочка, которая режет доступ к doh серверам

View File

@@ -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.1.9
PKG_RELEASE:=1 PKG_RELEASE:=1
LUCI_TITLE:=LuCI podkop app LUCI_TITLE:=LuCI podkop app

View File

@@ -143,6 +143,11 @@ return view.extend({
o = s.taboption('main', form.Flag, 'socks5', _('Mixed enable'), _('Browser port: 2080')); o = s.taboption('main', form.Flag, 'socks5', _('Mixed enable'), _('Browser port: 2080'));
o.default = '0'; o.default = '0';
o.depends('mode', 'proxy'); o.depends('mode', 'proxy');
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; o.rmempty = false;
// Second section // Second section

View File

@@ -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.1.9
PKG_RELEASE:=1 PKG_RELEASE:=1
PKG_MAINTAINER:=ITDog <podkop@itdog.info> PKG_MAINTAINER:=ITDog <podkop@itdog.info>

View File

@@ -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'

View File

@@ -8,7 +8,6 @@ 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"
@@ -187,6 +186,12 @@ 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() {
@@ -237,10 +242,6 @@ reload() {
start start
} }
version() {
echo VERSION_FROM_MAKEFILE
}
log() { log() {
local message="$1" local message="$1"
local timestamp=$(date +"%Y-%m-%d %H:%M:%S") local timestamp=$(date +"%Y-%m-%d %H:%M:%S")
@@ -390,7 +391,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 +406,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 +414,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 +649,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
} }
@@ -911,4 +937,4 @@ sing_box_config_check() {
log "Sing-box configuration is invalid" log "Sing-box configuration is invalid"
exit 1 exit 1
fi fi
} }