From 5fd0e23cf93a45b1a9121cb4d78ea8b86f80c5e7 Mon Sep 17 00:00:00 2001 From: itdoginfo Date: Wed, 19 Feb 2025 22:40:17 +0300 Subject: [PATCH] Added backup dhcp and don't touch dhcp. Firefox disable doh FQDN moved to sing-box --- README.md | 2 + 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 | 81 ++++++++++++++++--- 6 files changed, 79 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index d7e979f..ac9afa6 100644 --- a/README.md +++ b/README.md @@ -102,6 +102,8 @@ Luci: Services/podkop list doh_server '127.0.0.1#5054' ``` - [x] Только кастомный remote list не создаёт секцию в route-rules-rule-set и dns-rules-ruleset +- [ ] Не отрабатывает service podkop stop, если podkop запущен и не может, к пример, зарезолвить домен с сломанным DNS +- [ ] Всплывает в логах при старте. Не каждый раз. На работу не влияет. Wed Feb 19 17:12:28 2025 daemon.err sh[17665]: Command failed: ubus call service delete { "name": "sing-box" } (Not found) # ToDo Этот раздел не означает задачи, которые нужно брать и делать. Это общий список хотелок. Если вы хотите помочь, пожалуйста, спросите сначала в телеграмме. diff --git a/luci-app-podkop/Makefile b/luci-app-podkop/Makefile index 3a05355..d52a3d3 100644 --- a/luci-app-podkop/Makefile +++ b/luci-app-podkop/Makefile @@ -1,7 +1,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=luci-app-podkop -PKG_VERSION:=0.3.10 +PKG_VERSION:=0.3.11 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 c27548a..bc0d1f2 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 @@ -628,6 +628,11 @@ return view.extend({ o.rmempty = false; o.ucisection = 'main'; + o = s.taboption('additional', form.Flag, 'dont_touch_dhcp', _('Dont touch my DHCP!'), _('Podkop will not change the DHCP config')); + o.default = '0'; + o.rmempty = false; + o.ucisection = 'main'; + o = s.taboption('additional', form.Flag, 'exclude_ntp', _('Exclude NTP'), _('For issues with open connections sing-box')); o.default = '0'; o.rmempty = false; diff --git a/podkop/Makefile b/podkop/Makefile index eb8a91d..aa550e0 100644 --- a/podkop/Makefile +++ b/podkop/Makefile @@ -1,7 +1,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=podkop -PKG_VERSION:=0.3.10 +PKG_VERSION:=0.3.11 PKG_RELEASE:=1 PKG_MAINTAINER:=ITDog diff --git a/podkop/files/etc/config/podkop b/podkop/files/etc/config/podkop index af71581..72cba1d 100644 --- a/podkop/files/etc/config/podkop +++ b/podkop/files/etc/config/podkop @@ -29,5 +29,6 @@ config main 'main' option socks5 '0' option exclude_ntp '0' option quic_disable '0' + option dont_touch_dhcp '0' option update_interval '1d' option custom_domains_text \ No newline at end of file diff --git a/podkop/files/etc/init.d/podkop b/podkop/files/etc/init.d/podkop index 390287f..a8dc9b7 100755 --- a/podkop/files/etc/init.d/podkop +++ b/podkop/files/etc/init.d/podkop @@ -75,7 +75,11 @@ start_service() { stop_service() { log "Stopping the podkop" remove_cron_job - dnsmasq_rm + + config_get_bool dont_touch_dhcp "main" "dont_touch_dhcp" "0" + if [ "$dont_touch_dhcp" -eq 0 ]; then + dnsmasq_restore + fi rm -rf /tmp/podkop/*.lst @@ -205,7 +209,10 @@ main() { config_get interface "main" "interface" if [ -n "$proxy_string" ] || [ -n "$interface" ]; then - dnsmasq_add + config_get_bool dont_touch_dhcp "main" "dont_touch_dhcp" "0" + if [ "$dont_touch_dhcp" -eq 0 ]; then + dnsmasq_add_resolver + fi fi } @@ -315,27 +322,71 @@ create_nft_table() { nft add rule inet $table proxy meta mark 0x105 meta l4proto udp tproxy ip to :1602 counter } -dnsmasq_add() { - ## Future: Check config and skip restart +save_dnsmasq_config() { + local key="$1" + local backup_key="$2" + value=$(uci get "$key" 2>/dev/null) + + if [ -z "$value" ]; then + uci -q delete "$backup_key" + else + uci set "$backup_key"="$value" + fi +} + +dnsmasq_add_resolver() { + log "Save dnsmasq config" + save_dnsmasq_config "dhcp.@dnsmasq[0].noresolv" "dhcp.@dnsmasq[0].podkop_noresolv" + save_dnsmasq_config "dhcp.@dnsmasq[0].cachesize" "dhcp.@dnsmasq[0].podkop_cachesize" + + uci -q delete dhcp.@dnsmasq[0].podkop_server + for server in $(uci get dhcp.@dnsmasq[0].server 2>/dev/null); do + if [[ "$server" == "127.0.0.42" ]]; then + log "Dnsmasq save config error: server=127.0.0.42" + else + uci add_list dhcp.@dnsmasq[0].podkop_server="$server" + fi + done + log "Configure dnsmasq for sing-box" uci set dhcp.@dnsmasq[0].noresolv="1" - uci set dhcp.@dnsmasq[0].filter_aaaa="1" uci set dhcp.@dnsmasq[0].cachesize="0" uci -q delete dhcp.@dnsmasq[0].server uci add_list dhcp.@dnsmasq[0].server="127.0.0.42" - uci add_list dhcp.@dnsmasq[0].server='/use-application-dns.net/' uci commit dhcp /etc/init.d/dnsmasq restart } -dnsmasq_rm() { +dnsmasq_restore() { log "Removing configuration for dnsmasq" - uci set dhcp.@dnsmasq[0].noresolv="0" - uci set dhcp.@dnsmasq[0].filter_aaaa="0" - uci set dhcp.@dnsmasq[0].cachesize="1000" - uci -q delete dhcp.@dnsmasq[0].server - uci add_list dhcp.@dnsmasq[0].server="8.8.8.8" + + local cachesize=$(uci get dhcp.@dnsmasq[0].podkop_cachesize 2>/dev/null) + if [ -z "$cachesize" ]; then + log "dnsmasq revert: cachesize is unset" + else + uci set dhcp.@dnsmasq[0].cachesize="$cachesize" + fi + + local noresolv=$(uci get dhcp.@dnsmasq[0].podkop_noresolv 2>/dev/null) + if [ -z "$noresolv" ]; then + log "dnsmasq revert: noresolv is unset" + else + uci set dhcp.@dnsmasq[0].noresolv="$noresolv" + fi + + local server=$(uci get dhcp.@dnsmasq[0].server 2>/dev/null) + if [[ "$server" == "127.0.0.42" ]]; then + uci -q delete dhcp.@dnsmasq[0].server + for server in $(uci get dhcp.@dnsmasq[0].podkop_server 2>/dev/null); do + uci add_list dhcp.@dnsmasq[0].server="$server" + done + uci delete dhcp.@dnsmasq[0].podkop_server + fi + + uci delete dhcp.@dnsmasq[0].podkop_cachesize + uci delete dhcp.@dnsmasq[0].podkop_noresolv + uci commit dhcp /etc/init.d/dnsmasq restart @@ -600,6 +651,12 @@ sing_box_dns_rule_fakeip() { "action": "reject" }, { + "domain_suffix": [ + "use-application-dns.net" + ], + "action": "reject" + }, + { "server": "fakeip-server", "rule_set": [] }