Use upstream zapret provider path
This commit is contained in:
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user