Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f1e7bfc377 | ||
|
|
34d524ef51 | ||
|
|
c914d38ff2 | ||
|
|
543b66a6cc | ||
|
|
c046930032 | ||
|
|
12264b6ec0 | ||
|
|
d4b7d77e10 |
10
README.md
10
README.md
@@ -90,7 +90,14 @@ Luci: Services/podkop
|
|||||||
- [ ] `service network restart` ломает маршруты при sing-box
|
- [ ] `service network restart` ломает маршруты при sing-box
|
||||||
- [ ] Совпадение секции с ruleset ломает конфиг sing-box
|
- [ ] Совпадение секции с ruleset ломает конфиг sing-box
|
||||||
- [ ] В каких-то случаях плохо отрабатывает localfile
|
- [ ] В каких-то случаях плохо отрабатывает localfile
|
||||||
|
- [ ] exit 1 если в конфиге присуствует
|
||||||
|
```
|
||||||
|
option doh_backup_noresolv '0'
|
||||||
|
list doh_backup_server ''
|
||||||
|
list doh_backup_server ''
|
||||||
|
list doh_server '127.0.0.1#5053'
|
||||||
|
list doh_server '127.0.0.1#5054'
|
||||||
|
```
|
||||||
# ToDo
|
# ToDo
|
||||||
Этот раздел не означает задачи, которые нужно брать и делать. Это общий список хотелок. Если вы хотите помочь, пожалуйста, спросите сначала в телеграмме.
|
Этот раздел не означает задачи, которые нужно брать и делать. Это общий список хотелок. Если вы хотите помочь, пожалуйста, спросите сначала в телеграмме.
|
||||||
|
|
||||||
@@ -140,6 +147,7 @@ Luci: Services/podkop
|
|||||||
- [ ] Диагностика: Proxy check completed successfully предположительно не показывает IP, если вернулся это IPv6.
|
- [ ] Диагностика: Proxy check completed successfully предположительно не показывает IP, если вернулся это IPv6.
|
||||||
- [ ] Диагностика: podkop_domains: 0 elements как проверять что доходят запросы при fakeip? Мб врубать логи dnsmasq и их чекать.
|
- [ ] Диагностика: podkop_domains: 0 elements как проверять что доходят запросы при fakeip? Мб врубать логи dnsmasq и их чекать.
|
||||||
- [ ] Сделать галку запрещающую подкопу редачить dhcp. Допилить в исключение вместе с пустыми полями proxy и vpn
|
- [ ] Сделать галку запрещающую подкопу редачить dhcp. Допилить в исключение вместе с пустыми полями proxy и vpn
|
||||||
|
- [ ] Валидации предустановленных значений. Если прописаны другие, то вывод в лог о неизвестной переменной и продолжение работы
|
||||||
|
|
||||||
Приоритет 2
|
Приоритет 2
|
||||||
- [x] Списки доменов и подсетей с роутера
|
- [x] Списки доменов и подсетей с роутера
|
||||||
|
|||||||
@@ -28,7 +28,6 @@ main() {
|
|||||||
case $UPDATE in
|
case $UPDATE in
|
||||||
y)
|
y)
|
||||||
echo "Upgraded podkop..."
|
echo "Upgraded podkop..."
|
||||||
sed -i '/second/d' /etc/config/podkop
|
|
||||||
break
|
break
|
||||||
;;
|
;;
|
||||||
|
|
||||||
@@ -78,12 +77,12 @@ main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
add_tunnel() {
|
add_tunnel() {
|
||||||
echo "What type of VPN or proxy will be used? We also can automatically configure Wireguard and Amnezia WireGuard."
|
echo "Will you be using Wireguard, AmneziaWG, OpenVPN, OpenConnect? If yes, select a number and they will be automatically installed"
|
||||||
echo "1) Wireguard"
|
echo "1) Wireguard"
|
||||||
echo "2) AmneziaWG"
|
echo "2) AmneziaWG"
|
||||||
echo "3) OpenVPN"
|
echo "3) OpenVPN"
|
||||||
echo "4) OpenConnect"
|
echo "4) OpenConnect"
|
||||||
echo "5) Skip this step"
|
echo "5) I use VLESS/SS. Skip this step"
|
||||||
|
|
||||||
while true; do
|
while true; do
|
||||||
read -r -p '' TUNNEL
|
read -r -p '' TUNNEL
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
include $(TOPDIR)/rules.mk
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
PKG_NAME:=luci-app-podkop
|
PKG_NAME:=luci-app-podkop
|
||||||
PKG_VERSION:=0.3.0
|
PKG_VERSION:=0.3.3
|
||||||
PKG_RELEASE:=1
|
PKG_RELEASE:=1
|
||||||
|
|
||||||
LUCI_TITLE:=LuCI podkop app
|
LUCI_TITLE:=LuCI podkop app
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
include $(TOPDIR)/rules.mk
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
PKG_NAME:=podkop
|
PKG_NAME:=podkop
|
||||||
PKG_VERSION:=0.3.0
|
PKG_VERSION:=0.3.3
|
||||||
PKG_RELEASE:=1
|
PKG_RELEASE:=1
|
||||||
|
|
||||||
PKG_MAINTAINER:=ITDog <podkop@itdog.info>
|
PKG_MAINTAINER:=ITDog <podkop@itdog.info>
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ script=$(readlink "$initscript")
|
|||||||
NAME="$(basename ${script:-$initscript})"
|
NAME="$(basename ${script:-$initscript})"
|
||||||
config_load "$NAME"
|
config_load "$NAME"
|
||||||
|
|
||||||
EXTRA_COMMANDS="list_update check_proxy check_nft check_github check_logs check_all check_three"
|
EXTRA_COMMANDS="list_update check_proxy check_nft check_github check_logs check_all check_three main"
|
||||||
EXTRA_HELP=" list_update Updating domain and subnet lists
|
EXTRA_HELP=" list_update Updating domain and subnet lists
|
||||||
sing_box_config_vless For test vless string
|
sing_box_config_vless For test vless string
|
||||||
check_proxy Check if sing-box proxy works correctly
|
check_proxy Check if sing-box proxy works correctly
|
||||||
@@ -15,7 +15,8 @@ EXTRA_HELP=" list_update Updating domain and subnet lists
|
|||||||
check_github Check GitHub connectivity and lists availability
|
check_github Check GitHub connectivity and lists availability
|
||||||
check_logs Show podkop logs from system journal
|
check_logs Show podkop logs from system journal
|
||||||
check_all Run all checks
|
check_all Run all checks
|
||||||
check_three Run check_proxy, check_nft and check_github"
|
check_three Run check_proxy, check_nft and check_github
|
||||||
|
main Main function"
|
||||||
|
|
||||||
[ ! -L /usr/sbin/podkop ] && ln -s /etc/init.d/podkop /usr/sbin/podkop
|
[ ! -L /usr/sbin/podkop ] && ln -s /etc/init.d/podkop /usr/sbin/podkop
|
||||||
|
|
||||||
@@ -36,75 +37,11 @@ FAKEIP="198.18.0.0/15"
|
|||||||
start_service() {
|
start_service() {
|
||||||
log "Start podkop"
|
log "Start podkop"
|
||||||
|
|
||||||
sing_box_version=$(sing-box version | head -n 1 | awk '{print $3}')
|
procd_open_instance
|
||||||
required_version="1.11.1"
|
procd_set_param command /bin/sh -c "/etc/init.d/podkop main &"
|
||||||
|
procd_set_param stdout 1
|
||||||
if [ "$(echo -e "$sing_box_version\n$required_version" | sort -V | head -n 1)" != "$required_version" ]; then
|
procd_set_param stderr 1
|
||||||
echo "The version of sing-box ($sing_box_version) is lower than the minimum version. Update sing-box: opkg update && opkg install sing-box"
|
procd_close_instance
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
config_foreach wget_github
|
|
||||||
|
|
||||||
mkdir -p /tmp/podkop
|
|
||||||
|
|
||||||
# base
|
|
||||||
route_table_rule_mark
|
|
||||||
create_nft_table
|
|
||||||
sing_box_uci
|
|
||||||
|
|
||||||
# sing-box
|
|
||||||
sing_box_inbound_proxy 1602
|
|
||||||
sing_box_dns
|
|
||||||
sing_box_dns_rule_fakeip
|
|
||||||
sing_box_rule_dns
|
|
||||||
sing_box_cache_file
|
|
||||||
process_socks5
|
|
||||||
|
|
||||||
# sing-box outbounds and rules
|
|
||||||
config_foreach sing_box_outdound
|
|
||||||
config_foreach process_domains_for_section
|
|
||||||
config_foreach process_remote_ruleset
|
|
||||||
config_foreach sing_box_rule_preset
|
|
||||||
config_foreach process_domains_list_local
|
|
||||||
config_foreach process_domains_list_url
|
|
||||||
config_foreach process_subnet_for_section
|
|
||||||
config_foreach process_subnet_for_section_remote
|
|
||||||
config_foreach process_all_traffic_for_section
|
|
||||||
config_foreach add_cron_job
|
|
||||||
|
|
||||||
#Future: exclude at the fakeip?
|
|
||||||
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 sing_box_rules_source_ip_cidr $exclude_traffic_ip direct-out
|
|
||||||
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"
|
|
||||||
}' $SING_BOX_CONFIG >/tmp/sing-box-config-tmp.json && mv /tmp/sing-box-config-tmp.json $SING_BOX_CONFIG
|
|
||||||
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
|
|
||||||
|
|
||||||
sing_box_config_check
|
|
||||||
/etc/init.d/sing-box restart
|
|
||||||
/etc/init.d/sing-box enable
|
|
||||||
|
|
||||||
config_get proxy_string "main" "proxy_string"
|
|
||||||
config_get interface "main" "interface"
|
|
||||||
|
|
||||||
if [ -n "$proxy_string" ] || [ -n "$interface" ]; then
|
|
||||||
dnsmasq_add
|
|
||||||
fi
|
|
||||||
}
|
}
|
||||||
|
|
||||||
stop_service() {
|
stop_service() {
|
||||||
@@ -171,6 +108,96 @@ nolog() {
|
|||||||
echo -e "${CYAN}[$timestamp]${RESET} ${GREEN}$message${RESET}"
|
echo -e "${CYAN}[$timestamp]${RESET} ${GREEN}$message${RESET}"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
main() {
|
||||||
|
sing_box_version=$(sing-box version | head -n 1 | awk '{print $3}')
|
||||||
|
required_version="1.11.1"
|
||||||
|
|
||||||
|
if [ "$(echo -e "$sing_box_version\n$required_version" | sort -V | head -n 1)" != "$required_version" ]; then
|
||||||
|
echo "The version of sing-box ($sing_box_version) is lower than the minimum version. Update sing-box: opkg update && opkg install sing-box"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
migration
|
||||||
|
|
||||||
|
sleep 5
|
||||||
|
|
||||||
|
config_foreach wget_github
|
||||||
|
|
||||||
|
mkdir -p /tmp/podkop
|
||||||
|
|
||||||
|
# base
|
||||||
|
route_table_rule_mark
|
||||||
|
create_nft_table
|
||||||
|
sing_box_uci
|
||||||
|
|
||||||
|
# sing-box
|
||||||
|
sing_box_inbound_proxy 1602
|
||||||
|
sing_box_dns
|
||||||
|
sing_box_dns_rule_fakeip
|
||||||
|
sing_box_rule_dns
|
||||||
|
sing_box_cache_file
|
||||||
|
process_socks5
|
||||||
|
|
||||||
|
# sing-box outbounds and rules
|
||||||
|
config_foreach sing_box_outdound
|
||||||
|
config_foreach process_domains_for_section
|
||||||
|
config_foreach process_remote_ruleset
|
||||||
|
config_foreach sing_box_rule_preset
|
||||||
|
config_foreach process_domains_list_local
|
||||||
|
config_foreach process_domains_list_url
|
||||||
|
config_foreach process_subnet_for_section
|
||||||
|
config_foreach process_subnet_for_section_remote
|
||||||
|
config_foreach process_all_traffic_for_section
|
||||||
|
config_foreach add_cron_job
|
||||||
|
|
||||||
|
# Future: exclude at the fakeip?
|
||||||
|
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 sing_box_rules_source_ip_cidr $exclude_traffic_ip direct-out
|
||||||
|
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"
|
||||||
|
}' $SING_BOX_CONFIG >/tmp/sing-box-config-tmp.json && mv /tmp/sing-box-config-tmp.json $SING_BOX_CONFIG
|
||||||
|
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
|
||||||
|
|
||||||
|
sing_box_config_check
|
||||||
|
/etc/init.d/sing-box restart
|
||||||
|
/etc/init.d/sing-box enable
|
||||||
|
|
||||||
|
config_get proxy_string "main" "proxy_string"
|
||||||
|
config_get interface "main" "interface"
|
||||||
|
|
||||||
|
if [ -n "$proxy_string" ] || [ -n "$interface" ]; then
|
||||||
|
dnsmasq_add
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Migrations funcs
|
||||||
|
migration() {
|
||||||
|
# list migrate
|
||||||
|
grep -q "list domain_list 'ru_inside'" /etc/config/podkop && sed -i "s/list domain_list 'ru_inside'/list domain_list 'russia_inside'/" /etc/config/podkop
|
||||||
|
grep -q "list domain_list 'ru_outside'" /etc/config/podkop && sed -i "s/list domain_list 'ru_outside'/list domain_list 'russia_outside'/" /etc/config/podkop
|
||||||
|
grep -q "list domain_list 'ua'" /etc/config/podkop && sed -i "s/list domain_list 'ua'/list domain_list 'ukraine_inside'/" /etc/config/podkop
|
||||||
|
|
||||||
|
# second remove
|
||||||
|
grep -q "config second 'second'" /etc/config/podkop && sed -i '/second/d' /etc/config/podkop
|
||||||
|
|
||||||
|
# cron update
|
||||||
|
grep -qE "^\s*option update_interval '[0-9*/,-]+( [0-9*/,-]+){4}'" /etc/config/podkop && sed -i "s|^\(\s*option update_interval\) '[0-9*/,-]\+\( [0-9*/,-]\+\)\{4\}'|\1 '1d'|" /etc/config/podkop
|
||||||
|
}
|
||||||
|
|
||||||
# Main funcs
|
# Main funcs
|
||||||
|
|
||||||
route_table_rule_mark() {
|
route_table_rule_mark() {
|
||||||
@@ -279,7 +306,8 @@ process_subnets_text() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
wget_github() {
|
wget_github() {
|
||||||
local count=0
|
local count_nslookup=0
|
||||||
|
local count_curl=0
|
||||||
|
|
||||||
config_get domain_list_enabled "$section" "domain_list_enabled"
|
config_get domain_list_enabled "$section" "domain_list_enabled"
|
||||||
config_get subnets_list_enabled "$section" "subnets_list_enabled"
|
config_get subnets_list_enabled "$section" "subnets_list_enabled"
|
||||||
@@ -290,18 +318,39 @@ wget_github() {
|
|||||||
[ "$custom_download_domains_list_enabled" -eq 1 ] || [ "$custom_download_subnets_list_enabled" -eq 1 ] ; then
|
[ "$custom_download_domains_list_enabled" -eq 1 ] || [ "$custom_download_subnets_list_enabled" -eq 1 ] ; then
|
||||||
|
|
||||||
while true; do
|
while true; do
|
||||||
if ! curl -m 3 github.com; then
|
if ! nslookup google.com >/dev/null 2>&1; then
|
||||||
log "GitHub is not available. Check the internet availability [$count sec]"
|
log "DNS not working. Retrying... [$count_nslookup sec]"
|
||||||
count=$((count + 1))
|
count_nslookup=$((count_nslookup + 1))
|
||||||
else
|
else
|
||||||
return
|
return
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ $count -lt 30 ]; then
|
if [ $count_nslookup -lt 30 ]; then
|
||||||
sleep_interval=1
|
sleep_interval=1
|
||||||
elif [ $count -ge 30 ] && [ $count -lt 60 ]; then
|
elif [ $count_nslookup -ge 30 ] && [ $count_nslookup -lt 60 ]; then
|
||||||
sleep_interval=5
|
sleep_interval=5
|
||||||
elif [ $count -ge 60 ] && [ $count -lt 90 ]; then
|
elif [ $count_nslookup -ge 60 ] && [ $count_nslookup -lt 90 ]; then
|
||||||
|
sleep_interval=10
|
||||||
|
else
|
||||||
|
sleep_interval=30
|
||||||
|
fi
|
||||||
|
|
||||||
|
sleep $sleep_interval
|
||||||
|
done
|
||||||
|
|
||||||
|
while true; do
|
||||||
|
if ! curl -m 3 github.com; then
|
||||||
|
log "GitHub is not available. Check the internet availability [$count_curl sec]"
|
||||||
|
count_curl=$((count_curl + 1))
|
||||||
|
else
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ $count_curl -lt 30 ]; then
|
||||||
|
sleep_interval=1
|
||||||
|
elif [ $count_curl -ge 30 ] && [ $count_curl -lt 60 ]; then
|
||||||
|
sleep_interval=5
|
||||||
|
elif [ $count_curl -ge 60 ] && [ $count_curl -lt 90 ]; then
|
||||||
sleep_interval=10
|
sleep_interval=10
|
||||||
else
|
else
|
||||||
sleep_interval=30
|
sleep_interval=30
|
||||||
@@ -481,20 +530,24 @@ sing_box_dns_rule_fakeip() {
|
|||||||
|
|
||||||
sing_box_dns_rule_fakeip_section() {
|
sing_box_dns_rule_fakeip_section() {
|
||||||
local rule_set=$1
|
local rule_set=$1
|
||||||
|
echo $rule_set
|
||||||
log "Adding section to fakeip route rules in sing-box"
|
log "Adding section to fakeip route rules in sing-box"
|
||||||
|
|
||||||
jq \
|
jq \
|
||||||
--arg rule_set "$rule_set" \
|
--arg rule_set "$rule_set" \
|
||||||
'.dns.rules |= map(
|
'.dns.rules |= map(
|
||||||
if .server == "fakeip-server" then
|
if .server == "fakeip-server" then
|
||||||
.rule_set += [$rule_set]
|
if any(.rule_set[]?; . == $rule_set) then
|
||||||
|
.
|
||||||
|
else
|
||||||
|
.rule_set += [$rule_set]
|
||||||
|
end
|
||||||
else
|
else
|
||||||
.
|
.
|
||||||
end
|
end
|
||||||
)' $SING_BOX_CONFIG >/tmp/sing-box-config-tmp.json && mv /tmp/sing-box-config-tmp.json $SING_BOX_CONFIG
|
)' "$SING_BOX_CONFIG" >/tmp/sing-box-config-tmp.json && mv /tmp/sing-box-config-tmp.json "$SING_BOX_CONFIG"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
sing_box_cache_file() {
|
sing_box_cache_file() {
|
||||||
log "Configure cache.db in sing-box"
|
log "Configure cache.db in sing-box"
|
||||||
jq \
|
jq \
|
||||||
@@ -515,7 +568,7 @@ sing_box_outdound() {
|
|||||||
case "$mode" in
|
case "$mode" in
|
||||||
"vpn")
|
"vpn")
|
||||||
log "VPN mode"
|
log "VPN mode"
|
||||||
log "You are using VPN mode, make sure you have installed all the necessary packages, configured, created the zone and forwarding."
|
log "You are using VPN mode, make sure you have installed all the necessary packages and configured."
|
||||||
config_get interface "$section" "interface"
|
config_get interface "$section" "interface"
|
||||||
sing_box_outbound_interface $section $interface
|
sing_box_outbound_interface $section $interface
|
||||||
;;
|
;;
|
||||||
@@ -603,7 +656,7 @@ sing_box_rule_dns() {
|
|||||||
sing_box_config_check() {
|
sing_box_config_check() {
|
||||||
if ! sing-box -c $SING_BOX_CONFIG check >/dev/null 2>&1; then
|
if ! sing-box -c $SING_BOX_CONFIG check >/dev/null 2>&1; then
|
||||||
log "Sing-box configuration is invalid"
|
log "Sing-box configuration is invalid"
|
||||||
return
|
exit 1
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -954,27 +1007,37 @@ process_domains_for_section() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
sing_box_ruleset_remote() {
|
sing_box_ruleset_remote() {
|
||||||
log "Configure ruleset remote in sing-box"
|
|
||||||
|
|
||||||
local tag=$1
|
local tag=$1
|
||||||
local type=$2
|
local type=$2
|
||||||
local update_interval=$3
|
local update_interval=$3
|
||||||
|
|
||||||
url="$SRS_MAIN_URL/$tag.srs"
|
url="$SRS_MAIN_URL/$tag.srs"
|
||||||
|
|
||||||
jq \
|
local tag_exists=$(jq -r --arg tag "$tag" '
|
||||||
--arg tag "$tag" \
|
.route.rule_set[]? | select(.tag == $tag) | .tag
|
||||||
--arg type "$type" \
|
' "$SING_BOX_CONFIG")
|
||||||
--arg url "$url" \
|
|
||||||
--arg update_interval "$update_interval" \
|
if [[ -n "$tag_exists" ]]; then
|
||||||
'.route |= (if . == null then {rule_set: []} else . end) |
|
log "Ruleset with tag $tag already exists. Skipping addition."
|
||||||
.route.rule_set += [{
|
else
|
||||||
|
jq \
|
||||||
|
--arg tag "$tag" \
|
||||||
|
--arg type "$type" \
|
||||||
|
--arg url "$url" \
|
||||||
|
--arg update_interval "$update_interval" \
|
||||||
|
'
|
||||||
|
.route.rule_set += [
|
||||||
|
{
|
||||||
"tag": $tag,
|
"tag": $tag,
|
||||||
"type": $type,
|
"type": $type,
|
||||||
"format": "binary",
|
"format": "binary",
|
||||||
"url": $url,
|
"url": $url,
|
||||||
"update_interval": $update_interval
|
"update_interval": $update_interval
|
||||||
}]' $SING_BOX_CONFIG >/tmp/sing-box-config-tmp.json && mv /tmp/sing-box-config-tmp.json $SING_BOX_CONFIG
|
}
|
||||||
|
]' "$SING_BOX_CONFIG" > /tmp/sing-box-config-tmp.json && mv /tmp/sing-box-config-tmp.json "$SING_BOX_CONFIG"
|
||||||
|
|
||||||
|
log "Added new ruleset with tag $tag"
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
list_subnets_download() {
|
list_subnets_download() {
|
||||||
|
|||||||
Reference in New Issue
Block a user