Use upstream zapret provider path

This commit is contained in:
ushan0v
2026-05-01 15:47:00 +03:00
parent b2bbc0c926
commit 5f0415dc83
2 changed files with 49 additions and 62 deletions
+11 -13
View File
@@ -79,25 +79,23 @@ SUBNETS_CLOUDFRONT="${GITHUB_RAW_URL}/Subnets/IPv4/cloudfront.lst"
COMMUNITY_SERVICES="russia_inside russia_outside ukraine_inside geoblock block porn news anime youtube hdrezka tiktok google_ai google_play hodca discord meta twitter cloudflare cloudfront digitalocean hetzner ovh telegram roblox"
## Zapret
ZAPRET_SOURCE_BASE_DIR="/opt/zapret"
ZAPRET_SOURCE_NFQWS_BIN="$ZAPRET_SOURCE_BASE_DIR/nfq/nfqws"
ZAPRET_SOURCE_FILES_DIR="$ZAPRET_SOURCE_BASE_DIR/files"
ZAPRET_SOURCE_IPSET_DIR="$ZAPRET_SOURCE_BASE_DIR/ipset"
ZAPRET_BASE_DIR="/var/run/podkop-plus/zapret-runtime"
ZAPRET_RUNTIME_BASE_DIR="$ZAPRET_BASE_DIR"
ZAPRET_RUNTIME_NFQWS_BIN="$ZAPRET_RUNTIME_BASE_DIR/nfq/nfqws"
ZAPRET_RUNTIME_FILES_DIR="$ZAPRET_RUNTIME_BASE_DIR/files"
ZAPRET_RUNTIME_IPSET_DIR="$ZAPRET_RUNTIME_BASE_DIR/ipset"
ZAPRET_HOSTLIST_BASE="$ZAPRET_RUNTIME_IPSET_DIR"
ZAPRET_NFQWS_BIN="$ZAPRET_RUNTIME_NFQWS_BIN"
ZAPRET_PROVIDER_BASE_DIR="/opt/zapret"
ZAPRET_PROVIDER_NFQWS_BIN="$ZAPRET_PROVIDER_BASE_DIR/nfq/nfqws"
ZAPRET_PROVIDER_FILES_DIR="$ZAPRET_PROVIDER_BASE_DIR/files"
ZAPRET_PROVIDER_IPSET_DIR="$ZAPRET_PROVIDER_BASE_DIR/ipset"
ZAPRET_LEGACY_RUNTIME_BASE_DIR="/var/run/podkop-plus/zapret-runtime"
ZAPRET_NFQWS_BIN="$ZAPRET_PROVIDER_NFQWS_BIN"
ZAPRET_STATE_DIR="/var/run/podkop-plus/zapret"
ZAPRET_PID_DIR="$ZAPRET_STATE_DIR/pid"
ZAPRET_CHILD_PID_DIR="$ZAPRET_STATE_DIR/child-pid"
ZAPRET_LOG_DIR="$ZAPRET_STATE_DIR/log"
ZAPRET_HOSTLIST_DIR="$ZAPRET_STATE_DIR/hostlist"
ZAPRET_ROUTE_MARK_BASE="0x01000000"
# Podkop Plus uses a dedicated NFQUEUE range so its embedded nfqws runtime can
# coexist with standalone zapret/uci-app-zapret instances on the same router.
# Podkop Plus uses a dedicated NFQUEUE range so its managed nfqws processes can
# coexist with standalone zapret/luci-app-zapret instances on the same router.
ZAPRET_QUEUE_BASE=4000
ZAPRET_QUEUE_RANGE_SIZE=256
ZAPRET_NFQWS_RESPAWN_DELAY=5
ZAPRET_DESYNC_MARK="0x40000000"
ZAPRET_DESYNC_MARK_POSTNAT="0x20000000"
ZAPRET_LEGACY_DEFAULT_NFQWS_OPT="--filter-tcp=80 <HOSTLIST> --dpi-desync=fake,fakedsplit --dpi-desync-autottl=2 --dpi-desync-fooling=badsum --new --filter-tcp=443 --hostlist=/opt/zapret/ipset/zapret-hosts-google.txt --dpi-desync=fake,multidisorder --dpi-desync-split-pos=1,midsld --dpi-desync-repeats=11 --dpi-desync-fooling=badsum --dpi-desync-fake-tls-mod=rnd,dupsid,sni=www.google.com --new --filter-udp=443 --hostlist=/opt/zapret/ipset/zapret-hosts-google.txt --dpi-desync=fake --dpi-desync-repeats=11 --dpi-desync-fake-quic=/opt/zapret/files/fake/quic_initial_www_google_com.bin --new --filter-udp=443 <HOSTLIST_NOAUTO> --dpi-desync=fake --dpi-desync-repeats=11 --new --filter-tcp=443 <HOSTLIST> --dpi-desync=multidisorder --dpi-desync-split-pos=1,sniext+1,host+1,midsld-2,midsld,midsld+2,endhost-1"
+38 -49
View File
@@ -436,16 +436,10 @@ run_nfqws_dry_run_validation() {
local raw_opt="$1"
local old_ifs output_file output summary needles rc
if ! is_zapret_installed; then
if ! is_zapret_provider_available; then
return 0
fi
if ! prepare_zapret_runtime; then
set_nfqws_validation_failure \
"The Podkop Plus zapret runtime is unavailable. Install the upstream zapret package so $ZAPRET_SOURCE_NFQWS_BIN exists."
return 1
fi
raw_opt="$(expand_zapret_nfqws_opt "$raw_opt")"
raw_opt="$(normalize_nfqws_strategy_whitespace "$raw_opt")"
[ -n "$raw_opt" ] || return 0
@@ -629,46 +623,41 @@ escape_sed_replacement() {
printf '%s' "$1" | sed 's/[\/&]/\\&/g'
}
prepare_zapret_runtime_dir() {
local source_dir="$1"
local target_dir="$2"
[ -d "$source_dir" ] || return 0
mkdir -p "$target_dir" || return 1
cp -R "$source_dir"/. "$target_dir"/ >/dev/null 2>&1 || return 1
prepare_zapret_runtime() {
mkdir -p "$ZAPRET_STATE_DIR" "$ZAPRET_PID_DIR" "$ZAPRET_CHILD_PID_DIR" "$ZAPRET_LOG_DIR" "$ZAPRET_HOSTLIST_DIR"
}
prepare_zapret_runtime() {
mkdir -p "$ZAPRET_STATE_DIR" "$ZAPRET_PID_DIR" "$ZAPRET_LOG_DIR" "$ZAPRET_HOSTLIST_DIR" || return 1
[ -x "$ZAPRET_SOURCE_NFQWS_BIN" ] || return 1
mkdir -p "$ZAPRET_RUNTIME_BASE_DIR/nfq" "$ZAPRET_RUNTIME_FILES_DIR" "$ZAPRET_RUNTIME_IPSET_DIR" || return 1
cp -f "$ZAPRET_SOURCE_NFQWS_BIN" "$ZAPRET_NFQWS_BIN" >/dev/null 2>&1 || return 1
chmod 0755 "$ZAPRET_NFQWS_BIN" >/dev/null 2>&1 || true
prepare_zapret_runtime_dir "$ZAPRET_SOURCE_FILES_DIR" "$ZAPRET_RUNTIME_FILES_DIR" || return 1
prepare_zapret_runtime_dir "$ZAPRET_SOURCE_IPSET_DIR" "$ZAPRET_RUNTIME_IPSET_DIR" || return 1
return 0
is_zapret_provider_available() {
[ -x "$ZAPRET_PROVIDER_NFQWS_BIN" ]
}
is_zapret_installed() {
[ -x "$ZAPRET_SOURCE_NFQWS_BIN" ]
is_zapret_provider_available
}
rewrite_zapret_runtime_paths() {
local source_path runtime_path
zapret_package_installed() {
if command -v apk >/dev/null 2>&1 && apk info -e zapret >/dev/null 2>&1; then
return 0
fi
source_path="$(escape_sed_replacement "$ZAPRET_SOURCE_BASE_DIR")"
runtime_path="$(escape_sed_replacement "$ZAPRET_RUNTIME_BASE_DIR")"
if command -v opkg >/dev/null 2>&1 && opkg list-installed 2>/dev/null | grep -Eq '^zapret[[:space:]-]'; then
return 0
fi
printf '%s' "$1" | sed "s#${source_path}#${runtime_path}#g"
return 1
}
rewrite_legacy_zapret_runtime_paths() {
local provider_path legacy_path
provider_path="$(escape_sed_replacement "$ZAPRET_PROVIDER_BASE_DIR")"
legacy_path="$(escape_sed_replacement "$ZAPRET_LEGACY_RUNTIME_BASE_DIR")"
printf '%s' "$1" | sed "s#${legacy_path}#${provider_path}#g"
}
expand_zapret_nfqws_opt() {
rewrite_zapret_runtime_paths "$1"
rewrite_legacy_zapret_runtime_paths "$1"
}
get_zapret_rule_hostlist_path() {
@@ -878,13 +867,13 @@ build_generated_zapret_hostlist() {
check_zapret_requirements() {
has_enabled_zapret_rules || return 0
if ! is_zapret_installed; then
log "Zapret package is not installed. Rules with action 'zapret' will be skipped until zapret is installed." "error"
if ! is_zapret_provider_available; then
log "Zapret provider is not available at $ZAPRET_PROVIDER_NFQWS_BIN. Rules with action 'zapret' will be skipped until the zapret provider is installed." "error"
return 0
fi
if ! prepare_zapret_runtime; then
log "Failed to prepare the Podkop Plus zapret runtime in $ZAPRET_RUNTIME_BASE_DIR. Aborted." "fatal"
log "Failed to prepare the Podkop Plus zapret state directory in $ZAPRET_STATE_DIR. Aborted." "fatal"
exit 1
fi
}
@@ -898,8 +887,8 @@ get_zapret_package_version() {
version="$(opkg list-installed 2>/dev/null | awk '$1 == "zapret" { print $3; exit }')"
fi
if [ -z "$version" ] && [ -x "$ZAPRET_SOURCE_NFQWS_BIN" ]; then
version="$("$ZAPRET_SOURCE_NFQWS_BIN" --version 2>/dev/null | sed -n '1s/^.*version[[:space:]]*//p' | awk '{ print $1; exit }')"
if [ -z "$version" ] && [ -x "$ZAPRET_PROVIDER_NFQWS_BIN" ]; then
version="$("$ZAPRET_PROVIDER_NFQWS_BIN" --version 2>/dev/null | sed -n '1s/^.*version[[:space:]]*//p' | awk '{ print $1; exit }')"
fi
echo "$version"
@@ -938,13 +927,13 @@ zapret_standalone_defaults_active() {
}
sync_zapret_standalone_config() {
if [ -x "$ZAPRET_SOURCE_BASE_DIR/sync_config.sh" ]; then
"$ZAPRET_SOURCE_BASE_DIR/sync_config.sh" >/dev/null 2>&1
if [ -x "$ZAPRET_PROVIDER_BASE_DIR/sync_config.sh" ]; then
"$ZAPRET_PROVIDER_BASE_DIR/sync_config.sh" >/dev/null 2>&1
return $?
fi
if [ -x "$ZAPRET_SOURCE_BASE_DIR/renew-cfg.sh" ]; then
"$ZAPRET_SOURCE_BASE_DIR/renew-cfg.sh" sync >/dev/null 2>&1
if [ -x "$ZAPRET_PROVIDER_BASE_DIR/renew-cfg.sh" ]; then
"$ZAPRET_PROVIDER_BASE_DIR/renew-cfg.sh" sync >/dev/null 2>&1
return $?
fi
@@ -1122,7 +1111,7 @@ get_zapret_status_json() {
configured=1
fi
if [ -x "$ZAPRET_SOURCE_NFQWS_BIN" ]; then
if is_zapret_provider_available; then
installed=1
version="$(get_zapret_package_version)"
[ -n "$version" ] || version="unknown"
@@ -1182,7 +1171,7 @@ get_zapret_status_json() {
check_zapret_runtime_json() {
local installed=0
if [ -x "$ZAPRET_SOURCE_NFQWS_BIN" ]; then
if is_zapret_provider_available; then
installed=1
fi
@@ -1232,7 +1221,7 @@ stop_zapret_runtime() {
done
fi
rm -rf "$ZAPRET_PID_DIR" "$ZAPRET_LOG_DIR" "$ZAPRET_HOSTLIST_DIR" "$ZAPRET_RUNTIME_BASE_DIR"
rm -rf "$ZAPRET_PID_DIR" "$ZAPRET_CHILD_PID_DIR" "$ZAPRET_LOG_DIR" "$ZAPRET_HOSTLIST_DIR" "$ZAPRET_LEGACY_RUNTIME_BASE_DIR"
}
_start_zapret_runtime_handler() {
@@ -1272,10 +1261,10 @@ _start_zapret_runtime_handler() {
start_zapret_runtime() {
has_enabled_zapret_rules || return 0
is_zapret_installed || return 0
is_zapret_provider_available || return 0
stop_zapret_runtime
check_zapret_requirements
mkdir -p "$ZAPRET_PID_DIR" "$ZAPRET_LOG_DIR" "$ZAPRET_HOSTLIST_DIR"
mkdir -p "$ZAPRET_PID_DIR" "$ZAPRET_CHILD_PID_DIR" "$ZAPRET_LOG_DIR" "$ZAPRET_HOSTLIST_DIR"
config_foreach _start_zapret_runtime_handler "rule"
}