#!/bin/sh set -e SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" # Source files for name-based VK filtering AUTO_ALL_V4_FILE="${SCRIPT_DIR}/auto/all-ru-ipv4.txt" AUTO_ALL_V6_FILE="${SCRIPT_DIR}/auto/all-ru-ipv6.txt" AUTO_RIPE_V4_FILE="${SCRIPT_DIR}/auto/ripe-ru-ipv4.txt" VK_NAME_PATTERN='VK[[:space:]-]*CLOUD|VKCOMPANY|VKONTAKTE' # Additional VK-only text blacklists VK_INPUT_FILE="${SCRIPT_DIR}/blacklists/blacklist-vk.txt" VK_INPUT_V4_FILE="${SCRIPT_DIR}/blacklists/blacklist-vk-v4.txt" VK_INPUT_V6_FILE="${SCRIPT_DIR}/blacklists/blacklist-vk-v6.txt" # Output directory and files ROUTES_OUTPUT_DIR="${SCRIPT_DIR}/blacklists_route" ROUTES_V4_FILE="${ROUTES_OUTPUT_DIR}/blacklist-vk-v4.routes" ROUTES_V6_FILE="${ROUTES_OUTPUT_DIR}/blacklist-vk-v6.routes" mkdir -p "${ROUTES_OUTPUT_DIR}" "${SCRIPT_DIR}/blacklists" echo "Generating VK route blacklists..." # Build additional VK-only blacklist from network names in auto/*.txt files TMP_VK_FILE="$(mktemp "${SCRIPT_DIR}/blacklists/.blacklist-vk.XXXXXX")" for source_file in "${AUTO_ALL_V4_FILE}" "${AUTO_ALL_V6_FILE}" "${AUTO_RIPE_V4_FILE}"; do [ -f "${source_file}" ] || continue awk -v pattern="${VK_NAME_PATTERN}" 'BEGIN { IGNORECASE = 1 } $0 ~ pattern { print $1 }' "${source_file}" >> "${TMP_VK_FILE}" done sort -u "${TMP_VK_FILE}" > "${VK_INPUT_FILE}" grep ':' "${VK_INPUT_FILE}" | sort -u > "${VK_INPUT_V6_FILE}" || true grep -v ':' "${VK_INPUT_FILE}" | sort -u > "${VK_INPUT_V4_FILE}" || true rm -f "${TMP_VK_FILE}" # Generate IPv4 routes file (route VK prefixes to loopback via 127.0.0.1) cat > "${ROUTES_V4_FILE}" << EOF # Linux routes for VK networks (IPv4) # Auto-generated by $(basename "$0") # Last updated: $(date -u +"%Y-%m-%d %H:%M:%S UTC") # # Apply: # sudo sh $(basename "${ROUTES_V4_FILE}") # EOF while IFS= read -r network; do [ -n "${network}" ] || continue printf 'ip route replace %s via 127.0.0.1 dev lo onlink\n' "${network}" >> "${ROUTES_V4_FILE}" done < "${VK_INPUT_V4_FILE}" # Generate IPv6 routes file (route VK prefixes to loopback via ::1) cat > "${ROUTES_V6_FILE}" << EOF # Linux routes for VK networks (IPv6) # Auto-generated by $(basename "$0") # Last updated: $(date -u +"%Y-%m-%d %H:%M:%S UTC") # # Apply: # sudo sh $(basename "${ROUTES_V6_FILE}") # EOF while IFS= read -r network; do [ -n "${network}" ] || continue printf 'ip -6 route replace %s via ::1 dev lo\n' "${network}" >> "${ROUTES_V6_FILE}" done < "${VK_INPUT_V6_FILE}" echo "✓ Generated: ${ROUTES_V4_FILE} (entries: $(wc -l < "${VK_INPUT_V4_FILE}" | tr -d ' '))" echo "✓ Generated: ${ROUTES_V6_FILE} (entries: $(wc -l < "${VK_INPUT_V6_FILE}" | tr -d ' '))" echo "" echo "Examples:" echo " sudo sh ${ROUTES_V4_FILE}" echo " sudo sh ${ROUTES_V6_FILE}"