From 6b19fbf7d9d6fa7ac59298f3be8d5b70ce540a14 Mon Sep 17 00:00:00 2001 From: itdoginfo Date: Wed, 30 Oct 2024 16:54:58 +0300 Subject: [PATCH] Fix all traffic to trpoxy for IP, two chains, exclude NTP --- README.md | 16 +++--- luci-app-podkop/Makefile | 2 +- .../resources/view/podkop/podkop.js | 5 ++ podkop/Makefile | 2 +- podkop/files/etc/config/podkop | 1 + podkop/files/etc/init.d/podkop | 56 ++++++++++++++----- 6 files changed, 58 insertions(+), 24 deletions(-) diff --git a/README.md b/README.md index be0bd2e..35e728b 100644 --- a/README.md +++ b/README.md @@ -64,6 +64,7 @@ opkg update && opkg install sing-box # Известные баги - [x] Не работает proxy при режимах main vpn, second proxy - [ ] Не всегда отрабатывает ucitrack (применение настроек из luci). Не удаётся повторить +- [x] All traffic for IP ломает инет на клиенте. Proxy mode # ToDo Сделано @@ -73,17 +74,19 @@ opkg update && opkg install sing-box - [x] Дополнительная вкладка для ещё одного туннеля. Домены, подсети. - [x] Улучшение скрипта автоматической установки. Спрашивать про туннели. - [x] Зависимость от dnsmasq-full - -Приоритет 1 -- [x] В nft разделить правило tproxy на маркировку и tproxy -- [ ] Нужен дебаг. Restart ucitrack в отдельный скрипт postinst, не отрабатывает. - [x] Весь трафик для устойства пускать в туннель\прокси - [x] Исключение для IP, не ходить в туннель\прокси совсем 0x0 - [x] Врубать галочкой yacd в sing-box - [x] Свои списки. Просто список доменов с переносом строки - [x] Свои списки ipv4 -- [ ] Ntp (порт 123) делать маркировку 0x0. По галке -- [ ] Вернуть две цепочки nft +- [x] В nft разделить правило tproxy на маркировку и tproxy +- [x] Вернуть две цепочки nft +- [x] Ntp (порт 123) делать маркировку 0x0. По галке +- [x] Открытый прокси порт на роутере для браузеров + +Приоритет 1 +- [ ] Переделать на PROCD и выкинуть ucitrack +- [ ] Нужен дебаг. Restart ucitrack в отдельный скрипт postinst, не отрабатывает. Приоритет 2 - [ ] Кнопка обновления списка доменов и подсетей @@ -102,7 +105,6 @@ Wiki - [ ] Мониторинг tls Низкий приоритет -- [x] Открытый прокси порт на роутере для браузеров - [ ] Переменная, раз во сколько часов обновлять списки - [ ] Галочка, которая режет доступ к doh серверам diff --git a/luci-app-podkop/Makefile b/luci-app-podkop/Makefile index 0deb7c4..2d7bc3b 100644 --- a/luci-app-podkop/Makefile +++ b/luci-app-podkop/Makefile @@ -4,7 +4,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=luci-app-podkop -PKG_VERSION:=0.1.8 +PKG_VERSION:=0.1.9 PKG_RELEASE:=1 LUCI_TITLE:=LuCI podkop app diff --git a/luci-app-podkop/htdocs/luci-static/resources/view/podkop/podkop.js b/luci-app-podkop/htdocs/luci-static/resources/view/podkop/podkop.js index 28459cf..065fad8 100644 --- a/luci-app-podkop/htdocs/luci-static/resources/view/podkop/podkop.js +++ b/luci-app-podkop/htdocs/luci-static/resources/view/podkop/podkop.js @@ -143,6 +143,11 @@ return view.extend({ o = s.taboption('main', form.Flag, 'socks5', _('Mixed enable'), _('Browser port: 2080')); o.default = '0'; 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; // Second section diff --git a/podkop/Makefile b/podkop/Makefile index f3d589b..381a78f 100644 --- a/podkop/Makefile +++ b/podkop/Makefile @@ -1,7 +1,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=podkop -PKG_VERSION:=0.1.8 +PKG_VERSION:=0.1.9 PKG_RELEASE:=1 PKG_MAINTAINER:=ITDog diff --git a/podkop/files/etc/config/podkop b/podkop/files/etc/config/podkop index 2d7869e..3aa07c2 100644 --- a/podkop/files/etc/config/podkop +++ b/podkop/files/etc/config/podkop @@ -22,6 +22,7 @@ config main 'main' list exclude_traffic_ip '' option yacd '0' option socks5 '0' + option exclude_ntp '0' config second 'second' option second_enable '0' diff --git a/podkop/files/etc/init.d/podkop b/podkop/files/etc/init.d/podkop index 5886f3f..775f249 100755 --- a/podkop/files/etc/init.d/podkop +++ b/podkop/files/etc/init.d/podkop @@ -8,7 +8,6 @@ config_load "$NAME" EXTRA_COMMANDS="list_update add_route_interface version" EXTRA_HELP=" list_update Updating domain and subnet lists - version Show version add_route_interface Adding route for interface 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/init.d/sing-box restart 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() { @@ -237,10 +242,6 @@ reload() { start } -version() { - echo VERSION_FROM_MAKEFILE -} - log() { local message="$1" local timestamp=$(date +"%Y-%m-%d %H:%M:%S") @@ -390,7 +391,7 @@ add_set() { nft add table inet PodkopTable 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\; } config_get mode "$connect" "mode" case "$mode" in @@ -405,8 +406,7 @@ add_set() { ;; "proxy") - #nft add chain inet PodkopTable mangle { type filter hook prerouting priority mangle \; } - #nft add chain inet PodkopTable proxy { type filter hook prerouting priority mangle \; } + nft add chain inet PodkopTable proxy { type filter hook prerouting priority -100 \; } if nft list table inet PodkopTable | grep -q "ip daddr @"$set_name" meta l4proto"; then log "Nft rule tproxy exists" else @@ -414,13 +414,17 @@ add_set() { 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 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 - nft add rule inet PodkopTable mangle iifname "br-lan" meta mark 0x105 meta l4proto udp 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 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 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 iifname "br-lan" meta mark 0x106 meta l4proto tcp tproxy ip to :1603 counter - nft add rule inet PodkopTable mangle iifname "br-lan" meta mark 0x106 meta l4proto udp 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 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 ;; @@ -645,14 +649,36 @@ list_custom_subnets_create() { list_all_traffic_from_ip() { local ip="$1" 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 } list_exclude_traffic_from_ip() { local ip="$1" 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 } @@ -911,4 +937,4 @@ sing_box_config_check() { log "Sing-box configuration is invalid" exit 1 fi -} +} \ No newline at end of file