Контейнер 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

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

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

добавляю
4pda.to
в
/root/antizapret/config/include-hosts-custom.txt

всё равно резолвится по своим реальным ip

нет случаем никаких особенностей в работе правил с цифрами (в начале?) имени домена?

в файле config/exclude-regexp-dist.awk убери последнюю строку /^[0-9]/ {next}

или переходи на более современную версию:

или

у меня такого правила нет

вот мой файл

(/duckdns/) {next}
(/linode\.com/) {next}
(/upcloud\.com/) {next}
#(/googleusercontent\.com/) {next}
(/\.sl\.pt/) {next}
(/\.biz\.ski/) {next}
(/\.sloat\.biz/) {next}
(/\.new-rutor\.org/) {next}
(/\.traderc\.biz/) {next}
(/\.o-q\.biz/) {next}
(/\.dcge\.biz/) {next}
(/fonbet/) {next}
(/betcity/) {next}
(/zerkalo/) {next}
(/zigzag/) {next}
(/zenitbet/) {next}
(/winline/) {next}
(/ttrcasino/) {next}
(/paripartners/) {next}
(/parimatch/) {next}
(/ligastavok/) {next}
(/liga-stavok/) {next}
(/baltplay/) {next}
(/azino777/) {next}
(/vulkan/) {next}
(/leonbet/) {next}
(/ru\.leon/) {next}
(/ru\.adleon/) {next}
(/leonaccess/) {next}
(/leon-[0-9]{3}/) {next}
(/pm-[0-9]{2,3}\./) {next}
(/mf-[0-9]{2,3}\.online/) {next}
(/fon-[0-9]{2,3}\./) {next}
(/most.{3}\./) {next}
(/casino\-/) {next}
(/bcity\-/) {next}
(/1x\-/) {next}
#(/1xbet/) {next}
(/1xmob/) {next}
#(/melbet/) {next}
(/bk\-info/) {next}
(/bkinfo/) {next}
(/marathon/) {next}
(/gaminator/) {next}
(/joycasino/) {next}
(/goldenstar/) {next}
/marafon/ {next}
/olimp/ {next}
/kasino/ {next}
/depozit/ {next}
/kazino/ {next}
/777/ {next}
/casino/ {next}
/admiral/ {next}
/zerkala/ {next}
/avtomat/ {next}
/igrat/ {next}
/azart/ {next}
#/besplatno/ {next}
/sloty/ {next}
/bet-boom/ {next}
/betsbc/ {next}
/^bk-/ {next}
/^bkr/ {next}
/bkinf0/ {next}
/bukmeker/ {next}
/ruletka/ {next}
/vulcan/ {next}
/vylkan/ {next}
/wulcan/ {next}
/wulkan/ {next}
/vullkan/ {next}
/volcan/ {next}
/^vlc/ {next}
/^vlk/ {next}
/eldorado/ {next}
/lotto/ {next}
/lottery/ {next}
/fbmetrix/ {next}
/^diplom-/ {next}
/^dosug-/ {next}
/^dosug[0-9]{2}/ {next}
/fon-bet/ {next}
/^hydra[0-9]{2}/ {next}
/^intim[0-9]{2}/ {next}
/^livetv[0-9]{2}/ {next}
/marafon/ {next}
#/^melb/ {next}
/^melm/ {next}
/^mf-[0-9]{2}/ {next}
/^most/ {next}
#/^new-/ {next}
/^pari-/ {next}
/^pokerdom/ {next}
/prostitutki/ {next}
/spravka/ {next}
/mossst/ {next}
/mostbet/ {next}
/diplom/ {next}
/pharaon/ {next}
/fortuna/ {next}
/^rotate/ {next}
/^ref.{5}\./ {next}
/play\-/ {next}
/^1w.{3,4}\./ {next}
/^mylove[0-9]{2,3}\./ {next}
#/^1x.{3,4}\./ {next}
/^mirror[0-9]{2,3}\./ {next}
/^mob.{3,4}\./ {next}
/^777/ {next}
/hydra/ {next}
/spravok/ {next}
/spravka/ {next}
/zenit/ {next}
/zakladki/ {next}
/vullcan/ {next}
/vulslots/ {next}
/vulwinners/ {next}
/slots/ {next}
/traffaccess/ {next}
/tide24/ {next}
/swleon/ {next}
/sportingbull/ {next}
/sokol-24/ {next}
/silmag/ {next}
/faraon/ {next}
/marbet/ {next}
/joycazino/ {next}
/joy-cazino/ {next}
/jackpot/ {next}
/semyanich/ {next}
/semenarnia/ {next}
/prostitutki/ {next}
/shishkin-semena/ {next}
/vulkanstavka/ {next}
/bukvaved/ {next}
/rastarasha/ {next}
/errors-seeds/ {next}
/casino-x/ {next}
/kinogb/ {next}
/vulkanstars/ {next}
/vulcanwin/ {next}
/vlk-slots/ {next}
/rutorg/ {next}
/leonbets/ {next}
/parimatch/ {next}
/azartplay/ {next}
/bbplay2017/ {next}
/baltplay2017/ {next}
/hiwager/ {next}
/seedbanda/ {next}
#/gidonline/ {next}
/^alco/ {next}
(/\.r\.cloudfront\.net/) {next}
(/\*/) {next}
(/\\/) {next}

Простите за тупость, но я не сильно разбираюсь в таких делах, можете уточнить, для развертывания нужен свой сервер за пределами РФ или это можно сделать на своём домашнем NAS?

нужен свой сервер, используйте более новые версии выше по ссылкам

Т.е мой домашний подойдёт?
Главное, что бы он поддерживал докеры и к нему был доступ из внешней сети?

Так кто нибудь даст мне чёткий ответ, что вы подразумеваете под “собственный сервер”?
Это аренда сервера за предалами РФ?
Это домашний NAS сервер который находится в РФ?

вы написали: “нужен свой сервер за пределами РФ или это можно сделать на своём домашнем NAS?”
я и отвечаю, что: нужен свой сервер - подразумевая что по контексту вопрос про свой сервер был задан с уточнением что он должен быть за пределами РФ, и да, он должен быть за пределами РФ

Можно и в пределах РФ, но сервер должен иметь доступ в интернет без блокировок (у некоторых хостеров, не будем показывать пальцем, доступ в интернет не фильтруется). Это ключевое требование.

Если ваш NAS получает интернет с блокировками (фильтрованный), то он не подходит.

Установка сервиса (антизапрет) на сервер, к которому у вас есть доступ.

zapret-info/z-i: Register of Internet Addresses filtered in Russian Federation
опять не обновляется

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

Видимо свободное место на GitHub закончилось. На других площадках данные обновляются.