Контейнер VPN АнтиЗапрета для установки на собственный сервер

вообще непонятно, почему на GitHub - zapret-info/z-i: Register of Internet Addresses filtered in Russian Federation убрали кумулятивный файл dump.csv, а на assembla.com и sourceforge (с которого такой большой файл фиг скачаешь) – оставили?
разные команды штоле делаются?

полагаю, что если оставить гитхаб, как в оригинальном скрипте, скачивать диффы и собирать из них искомый dump.csv, можно, наверное, сделать и так:

#!/bin/bash
set -e

HERE="$(dirname "$(readlink -f "${0}")")"
cd "$HERE"

# Ссылки на файлы
BASELINK='https://raw.githubusercontent.com/zapret-info/z-i/master/'
NXDOMAINLINK='https://raw.githubusercontent.com/zapret-info/z-i/master/nxdomain.txt'

# Очистка временных файлов
rm -rf temp
mkdir -p temp

# Скачивание всех частей dump-*.csv
i=0
while true; do
    PARTNAME="dump-$(printf "%02d" "$i").csv"
    PARTLINK="${BASELINK}${PARTNAME}"
    PARTFILE="temp/${PARTNAME}"
    
    # Пытаемся скачать текущую часть
    if ! curl -f --fail-early --compressed -o "$PARTFILE" "$PARTLINK"; then
        # Если файл отсутствует, выходим из цикла
        break
    fi
    
    echo "Скачан $PARTLINK"
    i=$((i + 1))
done

if [[ $i -eq 0 ]]; then
    echo "Не удалось скачать ни одного файла dump-*.csv"
    exit 1
fi

# Объединение всех частей в один файл
cat temp/dump-*.csv > temp/list_orig.csv
echo "Объединены все части dump-*.csv в temp/list_orig.csv"

# Преобразование кодировки dump.csv
iconv -f cp1251 -t utf8 temp/list_orig.csv > temp/list.csv

# Скачивание nxdomain.txt
curl -f --fail-early --compressed -o temp/nxdomain.txt "$NXDOMAINLINK" || exit 1

echo "Скрипт завершён успешно."
exit 0

поправьте, если я не прав

вот тут описано, как изменить стандартное обновление раз в шесть часов,
сделав его, допустим, раз в сутки ночью

понятно, что как минимум раз в сутки репо точно обновляется, но
если представить гипотетически, что это раз в сутки, то все огромные списки будут перекачиваться заново

теоретически, я не претендую на правильность, можно сделать так:

правим
lxc exec antizapret-vpn -- nano /root/antizapret/doall.sh

#!/bin/bash

set -e

# Устанавливаем текущий каталог как рабочий
HERE="$(dirname "$(readlink -f "${0}")")"
cd "$HERE"

# URL RSS-канала
RSS_URL="https://github.com/zapret-info/z-i/commits/master.atom"

# Файл для хранения последнего хэша коммита (с относительным путём)
LAST_COMMIT_FILE="./last_commit.txt"

LOG_FILE="./doall.log"

# Функция для выполнения скриптов с комментариями
run_scripts() {
    if ./update.sh; then
        echo ">>> update.sh выполнен успешно."
    else
        echo ">>> Ошибка в update.sh"
        exit 1
    fi

    if ./parse.sh; then
        echo ">>> parse.sh выполнен успешно."
    else
        echo ">>> Ошибка в parse.sh"
        exit 1
    fi

    if ./process.sh; then
        echo ">>> process.sh выполнен успешно."
    else
        echo ">>> Ошибка в process.sh"
        exit 1
    fi
}

# Проверка на существование файла с хэшем
if [ ! -f "$LAST_COMMIT_FILE" ]; then
    echo "Файл $LAST_COMMIT_FILE отсутствует. Выполняем начальную инициализацию..."
    LATEST_COMMIT=$(curl -s "$RSS_URL" | grep -oPm1 "(?<=Grit::Commit/)[a-f0-9]{40}")
    echo "Последний коммит: $LATEST_COMMIT"
    
    # Выполняем начальную инициализацию
    if run_scripts; then
        echo "$LATEST_COMMIT" > "$LAST_COMMIT_FILE"
        echo "$(date '+%Y-%m-%d %H:%M:%S') Обновление завершено успешно. Коммит: $LATEST_COMMIT" > "$LOG_FILE"
        echo "Инициализация завершена успешно."
    else
        echo "Ошибка при выполнении инициализации."
        exit 1
    fi
    exit 0
fi

# Получаем текущий последний коммит из RSS
LATEST_COMMIT=$(curl -s "$RSS_URL" | grep -oPm1 "(?<=Grit::Commit/)[a-f0-9]{40}")

# Сравниваем с сохраненным коммитом
SAVED_COMMIT=$(cat "$LAST_COMMIT_FILE")

if [ "$LATEST_COMMIT" != "$SAVED_COMMIT" ]; then
    echo "Обнаружен новый коммит: $LATEST_COMMIT"
    
    # Выполняем обновление
    if run_scripts; then
        echo "$LATEST_COMMIT" > "$LAST_COMMIT_FILE"
        echo "$(date '+%Y-%m-%d %H:%M:%S') Обновление завершено успешно. Коммит: $LATEST_COMMIT" >> "$LOG_FILE"
        # Ограничиваем файл лога последними 15 записями
        tail -n 15 "$LOG_FILE" > "/tmp/$(basename "$LOG_FILE").tmp" && mv "/tmp/$(basename "$LOG_FILE").tmp" "$LOG_FILE"
        echo "Обновление завершено успешно."
    else
        echo "Ошибка при выполнении обновления."
        exit 1
    fi
else
    echo "Новых коммитов нет."
fi

далее правим
lxc exec antizapret-vpn -- nano /root/antizapret/update.sh

#!/bin/bash
set -e

HERE="$(dirname "$(readlink -f "${0}")")"
cd "$HERE"

# Базовые ссылки для скачивания
BASELINK='https://raw.githubusercontent.com/zapret-info/z-i/master/'
NXDOMAINLINK='https://raw.githubusercontent.com/zapret-info/z-i/master/nxdomain.txt'

# Очистка временных файлов
rm -rf temp
mkdir -p temp

# Скачивание всех частей dump-*.csv
i=0
while true; do
    PARTNAME="dump-$(printf "%02d" "$i").csv"
    PARTLINK="${BASELINK}${PARTNAME}"
    PARTFILE="temp/${PARTNAME}"
    
    # Пытаемся скачать текущую часть
    if ! curl -f --fail-early --compressed -o "$PARTFILE" "$PARTLINK" 2>/dev/null; then
        # Если файл отсутствует, выходим из цикла
        break
    fi
    
    echo "Скачан $PARTLINK"
    
    # Проверка размера файла
    EXPECTED_SIZE=$(curl -sI "$PARTLINK" | awk 'BEGIN {IGNORECASE=1;} /content-length/ {sub(/[ \t\r\n]+$/, "", $2); print $2}')
    ACTUAL_SIZE=$(stat -c '%s' "$PARTFILE")
    if [[ "$EXPECTED_SIZE" != "$ACTUAL_SIZE" ]]; then
        echo "Ошибка: размер файла $PARTNAME отличается (ожидалось: $EXPECTED_SIZE, фактически: $ACTUAL_SIZE)"
        exit 2
    fi
    echo "Размер файла $PARTNAME совпадает (размер: $ACTUAL_SIZE байт)"
    
    i=$((i + 1))
done

# Проверяем, были ли скачаны файлы
if [[ $i -eq 0 ]]; then
    echo "Не удалось скачать ни одного файла dump-*.csv"
    exit 1
fi

echo "Всего скачано частей: $i"

# Объединение всех частей в один файл
cat temp/dump-*.csv > temp/list_orig.csv
echo "Объединены все части dump-*.csv в temp/list_orig.csv"

# Преобразование кодировки dump.csv
iconv -f cp1251 -t utf8 temp/list_orig.csv > temp/list.csv
echo "Файл temp/list_orig.csv преобразован в UTF-8 и сохранён как temp/list.csv"

# Скачивание nxdomain.txt
curl -f --fail-early --compressed -o temp/nxdomain.txt "$NXDOMAINLINK" 2>/dev/null || exit 1
echo "Файл nxdomain.txt успешно скачан в temp/nxdomain.txt"

# Проверка размера nxdomain.txt
EXPECTED_SIZE=$(curl -sI "$NXDOMAINLINK" | awk 'BEGIN {IGNORECASE=1;} /content-length/ {sub(/[ \t\r\n]+$/, "", $2); print $2}')
ACTUAL_SIZE=$(stat -c '%s' temp/nxdomain.txt)
if [[ "$EXPECTED_SIZE" != "$ACTUAL_SIZE" ]]; then
    echo "Ошибка: размер файла nxdomain.txt отличается (ожидалось: $EXPECTED_SIZE, фактически: $ACTUAL_SIZE)"
    exit 2
fi
echo "Размер файла nxdomain.txt совпадает (размер: $ACTUAL_SIZE байт)"

echo "Скрипт update.sh завершён успешно"
exit 0

и таймер
lxc exec antizapret-vpn -- nano /etc/systemd/system/antizapret-update.timer

[Unit]
Description=Run antizapret-vpn update every 30 minutes

[Timer]
# Запускать задачу каждые 30 минут с момента последнего запуска
OnUnitActiveSec=30m
# Сохранить пропущенные запуски, если система была выключена
Persistent=true

[Install]
WantedBy=timers.target

по итогу таймер будет проверять раз в тридцать минут (по желанию) последний комит, и при несовпадении – уже скачивать

как обычно проверяем запуск
lxc exec antizapret-vpn -- sh -c "LANG=C.UTF-8 /root/antizapret/doall.sh"
lxc exec antizapret-vpn -- sh -c "echo 'cache.clear()' | socat - /run/knot-resolver/control/1"

и для контроля
lxc exec antizapret-vpn -- cat /root/antizapret/doall.log
lxc exec antizapret-vpn -- systemctl list-timers --all | awk 'NR==1 || /antizapret-update.timer/'

1 Like

очень давно не было обновлений =( команда LANG=C.UTF-8 /root/antizapret/doall.sh - не работает…

И не будет, актульные ветки обсуждений от коммунити:
Неофициальный docker-контейнер АнтиЗапрета
Скрипт для автоматического развертывания AntiZapret VPN (без контейнера)

Подскажите пожалуйста, а контейнер в шапке этот уже неактуальный и вообще нерабочий или только у меня с ним проблемы? Вроде как с сайта именно на него ссылка идет же…

Я установил его на ubuntu 22 используя LXC- вроде бы всё встало, к серверу подключаюсь… НО - ни один сайт не работает через vpn -всё как было так и пытается лезть напрямую. Ни из списка антизапрета, ни из списка, который я добавил в файл include-hosts-custom.txt - я что-то не так установил или лучше поставить уже какой-то неофициальный вариант сервера, но более актуальный?
В чем может быть проблема, почему не идет траффик через сервер? LXC полностью по умолчанию настроен. Пробовал перезагружать и сервер и отдельно контейнер -не помогло… также пытался подключиться с конфигом udp вместо tcp- то же самое. Подключение есть к серверу, но не идет через него траффик. tracert по запрещенным доменам смотрю- как будто напрямую всё идет тупо… нет ip сервера там моего вообще. Или как правильно проверять работоспособность? Можно ли где-то логи глянуть?


и скрипт этот не работает что-то с сервера…

Не могу подсказать, я не пользуюсь антизапретом.

Конечно, для этого ссылки и были приведены. В варианте от @Tyman есть даже правила netFilter для защиты от флуда.

я даже не знаю, что тебе сказать на это

буквально над первым же твоим постом пять сообщений вверх прочитать,

а если только установил, то да, придётся лопатить
как минимум вот:

(или вот Контейнер VPN АнтиЗапрета для установки на собственный сервер - #636 by stek29)
и вот
Контейнер VPN АнтиЗапрета для установки на собственный сервер - #535 by ValdikSS
и вот Контейнер VPN АнтиЗапрета для установки на собственный сервер - #519 by ValdikSS

это вроде из основного

из полезного вот Контейнер VPN АнтиЗапрета для установки на собственный сервер - #127 by ValdikSS
вот https://ntc.party/t/vpn/129/194
https://ntc.party/t/vpn/129/76
https://ntc.party/t/vpn-vpn/2040
https://ntc.party/t/vpn/129/329
https://ntc.party/t/vpn/129/160
https://ntc.party/t/vpn/129/247
https://ntc.party/t/vpn/129/344
https://ntc.party/t/vpn/129/39
https://ntc.party/t/vpn/129/74
https://ntc.party/t/vpn/129/372
https://ntc.party/t/vpn/129/503
https://ntc.party/t/vpn/129/505
https://ntc.party/t/vpn/129/533
https://ntc.party/t/контейнер-vpn-антизапрета-для-установки-на-собственный-сервер/129/693
https://ntc.party/t/добавление-chatgpt-в-antizapret/7216
https://ntc.party/t/rutrackerorg-плохо-открывается-через-антизапрет-vpn/7546/15
https://ntc.party/t/antizapret-на-роутере-не-резольвит-некоторые-сайты/7659/5
https://ntc.party/t/контейнер-vpn-антизапрета-для-установки-на-собственный-сервер/129/827
https://ntc.party/t/обход-блокировок-в-россии-через-антизапрет-на-прошивке-keenetic/7768
https://ntc.party/t/контейнер-vpn-антизапрета-для-установки-на-собственный-сервер/129/436
https://ntc.party/t/контейнер-vpn-антизапрета-для-установки-на-собственный-сервер/129/939
https://github.com/v2fly/domain-list-community/blob/master/data/discord

и ещё много чего, в этой теме почти всё есть

Как сейчас установить контейнер с нуля? очень много всяких правок было спустя столько времени