From 74d3ee53742c89ab061247a7022350df749e7b51 Mon Sep 17 00:00:00 2001 From: itdoginfo Date: Tue, 29 Oct 2024 17:47:38 +0300 Subject: [PATCH] Added: exclude for IP, URL lists, yacd, socks for browser and other --- .../resources/view/podkop/podkop.js | 47 ++++++++++ podkop/files/etc/config/podkop | 20 ++-- podkop/files/etc/init.d/podkop | 93 +++++++++++++++++-- 3 files changed, 148 insertions(+), 12 deletions(-) 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 22ac993..948936c 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 @@ -90,6 +90,15 @@ return view.extend({ o.depends('custom_domains_list_enabled', '1'); o.rmempty = false; + o = s.taboption('main', form.Flag, 'custom_download_domains_list_enabled', _('URL domains enable')); + o.default = '0'; + o.rmempty = false; + + o = s.taboption('main', form.DynamicList, 'custom_download_domains', _('Your URL domains')); + o.placeholder = 'URL'; + o.depends('custom_download_domains_list_enabled', '1'); + o.rmempty = false; + o = s.taboption('main', form.Flag, 'custom_subnets_list_enabled', _('Custom subnets enable')); o.default = '0'; o.rmempty = false; @@ -99,6 +108,44 @@ return view.extend({ o.depends('custom_subnets_list_enabled', '1'); o.rmempty = false; + o = s.taboption('main', form.Flag, 'custom_download_subnets_list_enabled', _('URL subnets enable')); + o.default = '0'; + o.rmempty = false; + + o = s.taboption('main', form.DynamicList, 'custom_download_subnets', _('Your URL subnet')); + o.placeholder = 'URL'; + o.depends('custom_download_subnets_list_enabled', '1'); + o.rmempty = false; + + o = s.taboption('main', form.Flag, 'all_traffic_from_ip_enabled', _('IP for full redirection')); + o.default = '0'; + o.rmempty = false; + + o = s.taboption('main', form.DynamicList, 'all_traffic_ip', _('Local IPs')); + o.placeholder = 'IP'; + o.depends('all_traffic_from_ip_enabled', '1'); + o.rmempty = false; + + o = s.taboption('main', form.Flag, 'exclude_from_ip_enabled', _('IP for full exclude')); + o.default = '0'; + o.rmempty = false; + + o = s.taboption('main', form.DynamicList, 'exclude_traffic_ip', _('Local IPs')); + o.placeholder = 'IP'; + o.depends('exclude_from_ip_enabled', '1'); + o.rmempty = false; + + o = s.taboption('main', form.Flag, 'yacd', _('Yacd enable'), _('http://openwrt.lan:9090:/ui')); + o.default = '0'; + o.depends('mode', 'proxy'); + o.rmempty = false; + + o = s.taboption('main', form.Flag, 'socks5', _('Mixed enable'), _('Browser port: 2080')); + o.default = '0'; + o.depends('mode', 'proxy'); + o.rmempty = false; + + // Second section s = m.section(form.TypedSection, 'second'); s.anonymous = true; diff --git a/podkop/files/etc/config/podkop b/podkop/files/etc/config/podkop index 005fc9e..2d7869e 100644 --- a/podkop/files/etc/config/podkop +++ b/podkop/files/etc/config/podkop @@ -1,19 +1,27 @@ config main 'main' option mode 'proxy' option interface 'wg0' - option proxy_string 'vless://60e7a3b2-5edb-4c0e-aa96-16702e4e0501@test.test:443/?type=tcp&encryption=none&flow=xtls-rprx-vision&sni=www.microsoft.com&fp=chrome&security=reality&pbk=O-IOLOcpVuzn9Eo3htHi0lxJ4YmeToNb6BhqUC7f7TQ&sid=4283c431d5a2263d#VLESS-podkop' + option proxy_string '' option domain_list_enabled '1' option domain_list 'ru_inside' option subnets_list_enabled '0' list subnets 'twitter' option custom_domains_list_enabled '0' - list custom_domains 'ifconfig.co' + list custom_domains '' + option custom_download_domains_list_enabled '0' + list custom_download_domains '' option custom_subnets_list_enabled '0' - list custom_subnets '188.114.96.0/20' + list custom_subnets '' + option custom_download_subnets_list_enabled '0' + list custom_download_subnets '' option all_traffic_from_ip_enabled '0' - list all_traffic_ip '192.168.56.226' + list all_traffic_ip '' option delist_domains_enabled '0' - list delist_domains 'zerossl.com' + list delist_domains '' + option exclude_from_ip_enabled '0' + list exclude_traffic_ip '' + option yacd '0' + option socks5 '0' config second 'second' option second_enable '0' @@ -25,4 +33,4 @@ config second 'second' option custom_domains_list_enabled '0' list custom_domains 'ifconfig.io' option custom_subnets_list_enabled '0' - list custom_subnets '-' \ No newline at end of file + list custom_subnets '' \ No newline at end of file diff --git a/podkop/files/etc/init.d/podkop b/podkop/files/etc/init.d/podkop index f09458c..5d76427 100755 --- a/podkop/files/etc/init.d/podkop +++ b/podkop/files/etc/init.d/podkop @@ -6,8 +6,9 @@ script=$(readlink "$initscript") NAME="$(basename ${script:-$initscript})" config_load "$NAME" -EXTRA_COMMANDS="list_update add_route_interface" -EXTRA_HELP=" list_update Updating domain and subnet lists +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" @@ -158,6 +159,34 @@ start() { log "Adding an IP to redirect all traffic" config_list_foreach main all_traffic_ip list_all_traffic_from_ip fi + + config_get_bool exclude_from_ip_enabled "main" "exclude_from_ip_enabled" "0" + if [ "$exclude_from_ip_enabled" -eq 1 ]; then + log "Adding an IP for exclusion" + config_list_foreach main exclude_traffic_ip list_exclude_traffic_from_ip + fi + + config_get_bool yacd "main" "yacd" "0" + if [ "$yacd" -eq 1 ]; then + log "Yacd enable" + jq '.experimental.clash_api = { + "external_ui": "ui", + "external_controller": "0.0.0.0:9090" + }' /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 socks5 "main" "socks5" "0" + if [ "$socks5" -eq 1 ]; then + log "Socks5 local enable port 2080" + jq '.inbounds += [{ + "type": "mixed", + "listen": "0.0.0.0", + "listen_port": 2080, + "set_system_proxy": false + }]' /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 } stop() { @@ -208,6 +237,10 @@ reload() { start } +version() { + echo VERSION_FROM_MAKEFILE +} + log() { local message="$1" local timestamp=$(date +"%Y-%m-%d %H:%M:%S") @@ -253,6 +286,13 @@ list_update() { dnsmasq_config_check podkop-custom-domains.lst fi + config_get_bool custom_download_domains_list_enabled "main" "custom_download_domains_list_enabled" "0" + if [ "$custom_download_domains_list_enabled" -eq 1 ]; then + log "Adding a custom domains list from URL" + add_set "podkop_domains" "main" + config_list_foreach main custom_download_domains "list_custom_download_domains_create" "podkop" + fi + config_get_bool delist_domains_enabled "main" "delist_domains_enabled" "0" if [ "$delist_domains_enabled" -eq 1 ] && [ "$domain_list_enabled" -eq 1 ]; then log "Exclude domains from the common list" @@ -296,6 +336,14 @@ list_update() { config_list_foreach main subnets "list_subnets_download" fi + config_get_bool custom_download_subnets_list_enabled "main" "custom_download_subnets_list_enabled" "0" + if [ "$custom_download_subnets_list_enabled" -eq 1 ]; then + log "Adding a subnets from URL" + mkdir -p /tmp/podkop + add_set "podkop_subnets" "main" + config_list_foreach main custom_download_subnets "list_subnets_download" + fi + config_get_bool custom_subnets_list_enabled "main" "custom_subnets_list_enabled" "0" if [ "$custom_subnets_list_enabled" -eq 1 ]; then log "Adding a custom subnets list" @@ -551,8 +599,12 @@ list_subnets_download() { URL=$DISCORD_SUBNETS ;; *) - log "Unidentified list of subnets" - exit 1 + log "Custom URL for subnet" + if curl --output /dev/null --silent --head --fail "$URL"; then + log "URL is valid" + else + log "URL $URL is not valid" + fi ;; esac @@ -570,6 +622,20 @@ list_custom_domains_create() { log "$domain added to the list" } +list_custom_download_domains_create() { + local URL="$1" + local name="$2" + local filename=$(basename "$URL") + local config="/tmp/dnsmasq.d/${name}-${filename}.lst" + + rm -f $config + curl -f "$URL" --output "/tmp/podkop/${filename}" + while IFS= read -r domain; do + echo "nftset=/$domain/4#inet#PodkopTable#${name}_domains" >>$config + done <"/tmp/podkop/$filename" + dnsmasq_config_check ${name}-${filename}.lst +} + list_custom_subnets_create() { local subnet="$1" local name="$2" @@ -579,7 +645,14 @@ 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 add rule inet PodkopTable mangle ip saddr $ip meta mark set 0x105 + nft insert rule inet PodkopTable mangle ip saddr $ip meta mark set 0x105 counter + 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 fi } @@ -683,6 +756,7 @@ sing_box_config_vless() { security=$(get_param "security") pbk=$(get_param "pbk") sid=$(get_param "sid") + encoding=$(get_param "packetEncoding") alpn=$(echo "$(get_param "alpn" | sed 's/%2C/,/g; s/%2F/\//g')" | jq -R -s -c 'split(",")' | sed 's/\\n//g') label=$(echo "$STRING" | cut -d'#' -f2) @@ -699,6 +773,7 @@ sing_box_config_vless() { --arg pbk "$pbk" \ --arg sid "$sid" \ --argjson alpn "$alpn" \ + --arg encoding "$encoding" \ --arg listen_port "$listen_port" \ '.inbounds[] |= if .type == "tproxy" then @@ -712,10 +787,12 @@ sing_box_config_vless() { .uuid = $uuid | if $security == "reality" then if $flow == "" then del(.flow) else .flow = $flow end | + if $encoding == "" then del(.packet_encoding) else .packet_encoding = $encoding end | .tls.server_name = $sni | .tls.utls.fingerprint = $fp | .tls.reality.public_key = $pbk | .tls.reality.short_id = $sid + .tls.alpn = $alpn | elif $security == "tls" then .tls.alpn = $alpn | .tls.server_name = $sni | @@ -784,6 +861,7 @@ sing_box_config_outbound_vless() { pbk=$(get_param "pbk") sid=$(get_param "sid") alpn=$(echo "$(get_param "alpn" | sed 's/%2C/,/g; s/%2F/\//g')" | jq -R -s -c 'split(",")' | sed 's/\\n//g') + encoding=$(get_param "packetEncoding") label=$(echo "$STRING" | cut -d'#' -f2) template_config="/etc/podkop/sing-box-vless-outbound-template.json" @@ -799,6 +877,7 @@ sing_box_config_outbound_vless() { --arg pbk "$pbk" \ --arg sid "$sid" \ --argjson alpn "$alpn" \ + --arg encoding "$encoding" \ --arg tag "$name" \ '.outbounds[] |= (.server = $server | @@ -806,10 +885,12 @@ sing_box_config_outbound_vless() { .uuid = $uuid | if $security == "reality" then if $flow == "" then del(.flow) else .flow = $flow end | + if $encoding == "" then del(.packet_encoding) else .packet_encoding = $encoding end | .tls.server_name = $sni | .tls.utls.fingerprint = $fp | .tls.reality.public_key = $pbk | .tls.reality.short_id = $sid | + .tls.alpn = $alpn | .tag = $tag elif $security == "tls" then .tls.alpn = $alpn | @@ -832,4 +913,4 @@ sing_box_config_check() { log "Sing-box configuration is invalid" exit 1 fi -} \ No newline at end of file +}