В первой части мы разобрали теорию работы SNI-прокси и Smart DNS, а также настроили всю систему вручную — от веб-сервера Nginx/Angie и DNS-сервера AdGuard Home/Blocky до защиты Firewall. В конце я упомянул утилиту Flowgate, которая автоматизирует весь этот процесс.

Судя по комментариям, у многих возникли вопросы по её использованию. Поэтому я подготовил пошаговую инструкцию, которая поможет развернуть полностью рабочий шлюз на чистом VPS с нуля, используя Flowgate. В результате вы получите работающий доступ к ChatGPT, Claude и другим сервисам без необходимости вручную править конфигурационные файлы.


Что понадобится

  • VPS с зарубежным IP-адресом (любая локация, где доступны нужные вам сервисы).

  • Операционная система: Debian 12/13 или Ubuntu 22.04/24.04 (рекомендую Debian, если хотите минимальное количество предустановленных пакетов).

  • Доменное имя (потребуется для настройки шифрованного DNS DoH/DoT).

  • Терминал и 10 минут времени.

Требования к ресурсам: Решение очень легкое. Минимального тарифа (1 vCPU, 512 MB RAM) будет достаточно.


Шаг 1: Подготовка сервера

Подключаемся к серверу по SSH, обновляем список пакетов, устанавливаем базовые зависимости:

ssh root@IP_ВАШЕГО_VPS
apt update && apt install -y curl wget gnupg ca-certificates python3 python3-yaml

Какие-то пакеты из этого списка могут быть уже установлены ранее в зависимости от образа VPS, это нормально. В этот список входят и те пакеты, которые понадобятся для установки большинства компонентов вручную.


Шаг 2: Установка Angie

Angie — это веб-сервер (форк Nginx), который нам нужен для работы SNI-прокси. Его главное преимущество в данном случае — встроенная поддержка ACME, которая позволяет автоматически получать и обновлять SSL-сертификаты.

Добавляем репозиторий и устанавливаем:

curl -o /etc/apt/trusted.gpg.d/angie-signing.gpg \
    https://angie.software/keys/angie-signing.gpg

echo "deb https://download.angie.software/angie/$(. /etc/os-release && echo "$ID/$VERSION_ID $VERSION_CODENAME") main" \
    | tee /etc/apt/sources.list.d/angie.list

apt update && apt install -y angie

Шаг 3: Проверка порта 53

DNS-сервер должен работать на 53 порту, даже если мы не будем светить его наружу. В Ubuntu и Debian этот порт часто занят системной службой systemd-resolved.

Проверим, занят ли порт:

ss -tlnup | grep :53

Если вывод команды пустой — порт свободен, можно переходить к следующему шагу.

Проверка порта 53
Проверка порта 53

Если вы видите процессы systemd-resolve, службу нужно отключить, чтобы освободить порт для Blocky:

systemctl stop systemd-resolved
systemctl disable systemd-resolved

# Настраиваем DNS для самого сервера (чтобы он мог разрешать доменные имена)
rm -f /etc/resolv.conf
echo "nameserver 8.8.8.8" > /etc/resolv.conf

Примечание: В некоторых минимальных образах на VPS эта служба может быть отключена по умолчанию.


Шаг 4: Установка Flowgate и Blocky

Blocky — быстрый DNS-сервер с поддержкой блокировки рекламы и гибкой настройки.
Flowgate — утилита управления, которая связывает Blocky и Angie.

Рекомендуемый способ: Установка из APT-репозитория

Для удобства обновления и управления пакетами рекомендую использовать APT-репозиторий:

# Добавляем GPG-ключ репозитория
curl -fsSL https://crim50n.github.io/flowgate-repo/key.gpg | sudo tee /usr/share/keyrings/flowgate.asc > /dev/null

# Добавляем репозиторий
echo "deb [signed-by=/usr/share/keyrings/flowgate.asc] https://crim50n.github.io/flowgate-repo stable main" | sudo tee /etc/apt/sources.list.d/flowgate.list

# Обновляем список пакетов и устанавливаем
apt update
apt install -y flowgate blocky

# Включаем службу синхронизации конфигурации
systemctl enable --now flowgate-sync.path

Преимущества этого способа:

  • Автоматические обновления через apt upgrade

  • Простота установки и удаления

  • Доступ к исходным кодам через apt source flowgate

Альтернатива: Установка из .deb файлов

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

cd /tmp
wget -q https://github.com/crim50n/flowgate/releases/download/v1.1.3/flowgate_1.1.3-1_all.deb
wget -q https://github.com/crim50n/blocky-deb/releases/download/v0.28.2-4/blocky_0.28.2-4_amd64.deb

# Устанавливаем пакеты (префикс ./ обязателен)
apt install -y ./blocky_0.28.2-4_amd64.deb ./flowgate_1.1.3-1_all.deb

# Включаем службу синхронизации
systemctl enable --now flowgate-sync.path

Альтернатива: Ручная установка

Если вы используете дистрибутив, не основанный на Debian (например, CentOS, AlmaLinux или любой другой) или просто хотите усложнить себе жизнь, установку можно выполнить вручную.

Установка Blocky:

cd /tmp
wget -q https://github.com/0xERR0R/blocky/releases/download/v0.24/blocky_v0.24_Linux_x86_64.tar.gz
tar -xzf blocky_v0.24_Linux_x86_64.tar.gz
mv blocky /usr/local/bin/
chmod +x /usr/local/bin/blocky

# Проверка версии
blocky version

Создаем пользователя и systemd-сервис:

useradd -r -s /usr/sbin/nologin blocky
mkdir -p /etc/blocky
chown blocky:blocky /etc/blocky

cat > /etc/systemd/system/blocky.service << 'EOF'
[Unit]
Description=Blocky DNS Proxy
Documentation=https://0xerr0r.github.io/blocky/
After=network.target

[Service]
Type=simple
User=blocky
Group=blocky
ExecStart=/usr/local/bin/blocky --config /etc/blocky/config.yml
Restart=on-failure
RestartSec=5
AmbientCapabilities=CAP_NET_BIND_SERVICE
NoNewPrivileges=true

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload

Установка Flowgate:

cd /tmp
git clone --depth 1 https://github.com/crim50n/flowgate.git
cd flowgate/flowgate
make install INIT_SYSTEM=systemd

Для систем без systemd: используйте make install INIT_SYSTEM=none и настройте автозапуск служб средствами вашей системы инициализации.


Шаг 5: Настройка конфигурации

Запустите команду инициализации. Flowgate определит внешний IP сервера, создаст конфигурацию для Blocky и настроит Angie для проксирования трафика.

flowgate init
Инициализация Flowgate
Инициализация Flowgate

Проверяем статус служб:

flowgate status
Статус служб Flowgate
Статус служб Flowgate

Шаг 6: Проверка работы

Убедимся, что DNS-сервер корректно обрабатывает запросы. Для проверки используем утилиту dig (из пакета dnsutils).

Проверяем домен, который должен проксироваться (например, chatgpt.com):

apt install -y dnsutils
dig @127.0.0.1 chatgpt.com +short
Проверка DNS для ChatGPT
Проверка DNS для ChatGPT

В ответе должен вернуться IP-адрес вашего VPS. Это означает, что Smart DNS работает и перенаправляет трафик на ваш прокси.

Проверяем обычный домен (например, ya.ru):

dig @127.0.0.1 ya.ru +short

Здесь должны вернуться реальные IP-адреса Яндекса.


Шаг 7: Настройка DNS-over-HTTPS (DoH)

Для безопасного использования DNS (чтобы провайдер не мог перехватывать или подменять DNS-запросы) настроим шифрование.

Вам понадобится доменное имя (например, dns.example.com), направленное на IP вашего VPS.

Варианты доменов:

  • Собственный домен (рекомендуется): Зарегистрируйте домен у регистратора (~$1/год) и добавьте A-запись, указывающую на IP вашего VPS.

  • Динамический DNS (бесплатно): Существуют бесплатные сервисы динамического DNS (например, DuckDNS, FreeDNS и другие). Зарегистрируйтесь на любом из них, создайте поддомен и настройте его на IP вашего VPS.

Важно: У некоторых бесплатных DNS-сервисов бывают проблемы со стабильностью NS-серверов, что может приводить к временным ошибкам при получении сертификатов Let's Encrypt. Обычно помогает повторная попытка через несколько минут. Для production-использования рекомендуется собственный домен.

flowgate dns dns.example.com
# или для динамического DNS:
flowgate dns dns.your-subdomain.yourdyndns.org

Эта команда автоматически:

  • Настроит параметры http-блока Angie (resolver, variables_hash_bucket_size)

  • Получит SSL-сертификат через ACME

  • Настроит Angie на приём DoH/DoT запросов

Успешная настройка DNS домена
Успешная настройка DNS домена

Проверка выпуска сертификата:

Если в выводе команды вы видите ошибки ACME или сертификат не был выпущен, проверьте:

# Убедитесь, что домен резолвится на ваш сервер
dig +short dns.example.com

# Проверьте, что порты 80 и 443 открыты
ss -tlnp | grep -E ':80|:443'

# Посмотрите логи Angie для диагностики
tail -20 /var/log/angie/error.log

# Проверьте наличие сертификата
ls -la /var/lib/angie/acme/

Если сертификат выпущен успешно, вы увидите директорию вида acme_dns_example_com/ с файлами certificate.pem и private.key.

Частые причины ошибок:

  • Домен не указывает на IP вашего сервера

  • Порт 80 заблокирован firewall (нужен для ACME HTTP-01 challenge)

  • Превышен лимит запросов Let's Encrypt (5 сертификатов на домен в неделю)

  • Нестабильные NS-серверы у бесплатных DNS-сервисов

Теперь ваш DNS-сервер доступен по адресам:

  • DoH: https://dns.example.com/dns-query

  • DoT: dns.example.com (порт 853)

Проверка работы DoT:

apt install -y knot-dnsutils
kdig @dns.example.com -p 853 +tls chatgpt.com

Вы должны увидеть IP вашего VPS в ответе, что подтверждает работу Smart DNS через зашифрованное соединение.


Шаг 8: Настройка безопасности и клиентов

Теперь осталось защитить сервер и настроить ваши устройства для использования нового DNS-сервера. Подробные инструкции по настройке Firewall и для каждой платформы (Android, iOS, Windows, браузеры, роутеры) есть в первой части статьи.


Основные команды Flowgate

Управление осуществляется через консольную утилиту (я специально не рассматриваю веб-интерфейс, так как для большинства пользователей он излишен, а настраивается достаточно просто):

# Добавить домен в список проксируемых
flowgate add notion.so

# Удалить домен из списка
flowgate remove notion.so

# Настроить обратный прокси для локального сервиса
# (например, для веб-интерфейса Flowgate, если вы решите его использовать)
flowgate service flowgate.example.com 5000

# Показать статус служб и список доменов
flowgate status

Возможные проблемы

Ошибка "address already in use" при запуске Blocky
Обычно означает, что порт 53 занят другой службой. Вернитесь к Шагу 3 и убедитесь, что systemd-resolved отключен.

Ошибки конфигурации Angie
Используйте команду angie -t для диагностики. Flowgate автоматически добавляет необходимые параметры (resolver, variables_hash_bucket_size) при синхронизации.


Заключение

Мы развернули собственный шлюз, который позволяет пользоваться AI-сервисами без VPN-клиентов на устройствах. Решение работает прозрачно для приложений, использует шифрованный DNS и потребляет минимум ресурсов.

Буду признателен за ваши отзывы и предложения в комментариях! Конечная цель проекта - сделать из утилиты одну большую кнопку с надписью "сделать хорошо", так что работы предостаточно.

Комментарии (27)


  1. saipr
    12.01.2026 06:57

    Буду признателен за ваши отзывы и предложения в комментариях!

    На мой взгляд, это статья может служить (помимо своего целевого назначения) образцом для написания аналогичных статей по настройке того или иного функционала.


    1. crims0n_ru Автор
      12.01.2026 06:57

      Спасибо! Рад, что вам понравился формат статьи, но моей заслуги здесь минимум: я просто пошагово описал свои действия.


      1. saipr
        12.01.2026 06:57

        В этом и заслуга - доходчиво пошагово описать свои действия.


  1. chasy
    12.01.2026 06:57

    Огромное спасибо!
    На свежем debian всё шло идеально до момента:

    Посмотрите логи Angie для диагностики

    tail -20 /var/log/angie/error.log

    У меня вывод такой:

    root# tail -20 /var/log/angie/error.log
    2026/01/12 11:35:17 [error] 2586#2586: *143 open() "/usr/share/angie/html/server-status" failed (2: No such file or directory), client: client_ip, server: localhost, request: "GET /server-status HTTP/1.1", host: "dns.myamazingsubdomain.myamazingdomain.com"
    2026/01/12 11:35:18 [error] 2585#2585: *146 connect() failed (111: Connection refused) while connecting to upstream, client: 127.0.0.1, server: dns.myamazingsubdomain.myamazingdomain.com, request: "GET /login.action HTTP/1.1", upstream: "https://127.0.0.1:8443/login.action", host: "dns.myamazingsubdomain.myamazingdomain.com"
    2026/01/12 11:35:18 [error] 2586#2586: *148 open() "/usr/share/angie/html/login.action" failed (2: No such file or directory), client: client_ip, server: localhost, request: "GET /login.action HTTP/1.1", host: "dns.myamazingsubdomain.myamazingdomain.com"
    2026/01/12 11:35:19 [error] 2585#2585: *151 connect() failed (111: Connection refused) while connecting to upstream, client: 127.0.0.1, server: dns.myamazingsubdomain.myamazingdomain.com, request: "GET /_all_dbs HTTP/1.1", upstream: "https://127.0.0.1:8443/_all_dbs", host: "dns.myamazingsubdomain.myamazingdomain.com"
    2026/01/12 11:35:19 [error] 2586#2586: *153 open() "/usr/share/angie/html/_all_dbs" failed (2: No such file or directory), client: client_ip, server: localhost, request: "GET /_all_dbs HTTP/1.1", host: "dns.myamazingsubdomain.myamazingdomain.com"
    2026/01/12 11:35:20 [error] 2585#2585: *156 connect() failed (111: Connection refused) while connecting to upstream, client: 127.0.0.1, server: dns.myamazingsubdomain.myamazingdomain.com, request: "GET /.env HTTP/1.1", upstream: "https://127.0.0.1:8443/.env", host: "dns.myamazingsubdomain.myamazingdomain.com"
    2026/01/12 11:35:20 [error] 2586#2586: *158 open() "/usr/share/angie/html/.env" failed (2: No such file or directory), client: client_ip, server: localhost, request: "GET /.env HTTP/1.1", host: "dns.myamazingsubdomain.myamazingdomain.com"
    2026/01/12 11:35:22 [error] 2585#2585: *161 connect() failed (111: Connection refused) while connecting to upstream, client: 127.0.0.1, server: dns.myamazingsubdomain.myamazingdomain.com, request: "GET /s/234323e29333e27383e2439313/_/;/META-INF/maven/com.atlassian.jira/jira-webapp-dist/pom.properties HTTP/1.1", upstream: "https://127.0.0.1:8443/s/234323e29333e27383e2439313/_/;/META-INF/maven/com.atlassian.jira/jira-webapp-dist/pom.properties", host: "dns.myamazingsubdomain.myamazingdomain.com"
    2026/01/12 11:35:22 [error] 2586#2586: *163 open() "/usr/share/angie/html/s/234323e29333e27383e2439313/_/;/META-INF/maven/com.atlassian.jira/jira-webapp-dist/pom.properties" failed (2: No such file or directory), client: client_ip, server: localhost, request: "GET /s/234323e29333e27383e2439313/_/;/META-INF/maven/com.atlassian.jira/jira-webapp-dist/pom.properties HTTP/1.1", host: "dns.myamazingsubdomain.myamazingdomain.com"
    2026/01/12 11:35:23 [error] 2585#2585: *166 connect() failed (111: Connection refused) while connecting to upstream, client: 127.0.0.1, server: dns.myamazingsubdomain.myamazingdomain.com, request: "GET /config.json HTTP/1.1", upstream: "https://127.0.0.1:8443/config.json", host: "dns.myamazingsubdomain.myamazingdomain.com"
    2026/01/12 11:35:23 [error] 2586#2586: *168 open() "/usr/share/angie/html/config.json" failed (2: No such file or directory), client: client_ip, server: localhost, request: "GET /config.json HTTP/1.1", host: "dns.myamazingsubdomain.myamazingdomain.com"
    2026/01/12 11:35:24 [error] 2585#2585: *171 connect() failed (111: Connection refused) while connecting to upstream, client: 127.0.0.1, server: dns.myamazingsubdomain.myamazingdomain.com, request: "GET /telescope/requests HTTP/1.1", upstream: "https://127.0.0.1:8443/telescope/requests", host: "dns.myamazingsubdomain.myamazingdomain.com"
    2026/01/12 11:35:24 [error] 2586#2586: *173 open() "/usr/share/angie/html/telescope/requests" failed (2: No such file or directory), client: client_ip, server: localhost, request: "GET /telescope/requests HTTP/1.1", host: "dns.myamazingsubdomain.myamazingdomain.com"
    2026/01/12 11:35:25 [error] 2585#2585: *176 connect() failed (111: Connection refused) while connecting to upstream, client: 127.0.0.1, server: dns.myamazingsubdomain.myamazingdomain.com, request: "GET /info.php HTTP/1.1", upstream: "https://127.0.0.1:8443/info.php", host: "dns.myamazingsubdomain.myamazingdomain.com"
    2026/01/12 11:35:25 [error] 2585#2585: *178 open() "/usr/share/angie/html/info.php" failed (2: No such file or directory), client: client_ip, server: localhost, request: "GET /info.php HTTP/1.1", host: "dns.myamazingsubdomain.myamazingdomain.com"
    2026/01/12 11:35:26 [error] 2586#2586: *181 connect() failed (111: Connection refused) while connecting to upstream, client: 127.0.0.1, server: dns.myamazingsubdomain.myamazingdomain.com, request: "GET /?rest_route=/wp/v2/users/ HTTP/1.1", upstream: "https://127.0.0.1:8443/?rest_route=/wp/v2/users/", host: "dns.myamazingsubdomain.myamazingdomain.com"
    2026/01/12 11:36:36 [error] 2585#2585: *187 connect() failed (111: Connection refused) while connecting to upstream, client: 127.0.0.1, server: dns.myamazingsubdomain.myamazingdomain.com, request: "GET / HTTP/1.1", upstream: "https://127.0.0.1:8443/", host: "dns.myamazingsubdomain.myamazingdomain.com"
    2026/01/12 11:36:36 [error] 2585#2585: *187 connect() failed (111: Connection refused) while connecting to upstream, client: 127.0.0.1, server: dns.myamazingsubdomain.myamazingdomain.com, request: "GET /favicon.ico HTTP/1.1", upstream: "https://127.0.0.1:8443/favicon.ico", host: "dns.myamazingsubdomain.myamazingdomain.com", referrer: "https://dns.myamazingsubdomain.myamazingdomain.com/"
    2026/01/12 11:36:52 [error] 2586#2586: *193 connect() failed (111: Connection refused) while connecting to upstream, client: 127.0.0.1, server: dns.myamazingsubdomain.myamazingdomain.com, request: "GET / HTTP/1.1", upstream: "https://127.0.0.1:8443/", host: "dns.myamazingsubdomain.myamazingdomain.com"
    2026/01/12 11:36:52 [error] 2586#2586: *193 connect() failed (111: Connection refused) while connecting to upstream, client: 127.0.0.1, server: dns.myamazingsubdomain.myamazingdomain.com, request: "GET /favicon.ico HTTP/1.1", upstream: "https://127.0.0.1:8443/favicon.ico", host: "dns.myamazingsubdomain.myamazingdomain.com", referrer: "https://dns.myamazingsubdomain.myamazingdomain.com/"
    

    Порты открыты. Далее при попытке проверить dns неудача:

    root# kdig @dns.myamazingsubdomain.myamazingdomain.com  -p 853 +tls chatgpt.com
    ;; WARNING: can't connect to server_ip@853(TCP)
    ;; ERROR: failed to query server dns.myamazingsubdomain.myamazingdomain.com@853(TCP)
    

    Единственное, что сделано не по вашей инструкции — заранее настроен файерволл вот так:

    table inet filter {
            chain input {
                    type filter hook input priority filter; policy drop;
                    ct state established,related accept
                    iif "lo" accept
                    ip protocol icmp accept
                    ip6 nexthdr ipv6-icmp accept
                    tcp dport { 80, 443, 572, 853 } accept
            }
    
            chain forward {
                    type filter hook forward priority filter; policy drop;
            }
    
            chain output {
                    type filter hook output priority filter; policy accept;
            }
    }```


    1. crims0n_ru Автор
      12.01.2026 06:57

      Что пишет
      ss -tlnp | grep 8443


      1. chasy
        12.01.2026 06:57

        Я Джиру точно не ставил и готов снести, буду выяснять как :)
        P.S. Вообще, непохоже, что там есть Джира, поскольку проверка порта ss -tuln | grep 8443 ничего не выводит.


        1. crims0n_ru Автор
          12.01.2026 06:57

          да, это я неправильно лог прочитал) если команда ничего не выводит, то, похоже, blocky не запущен. Должно быть так:
          root@vm3805765:/tmp# ss -tulpn | grep 8443
          tcp LISTEN 0 4096 *:8443
          : users:(("blocky",pid=7464,fd=6))

          Тогда пробуем запустить blocky: systemctl start blocky

          Смотрим статус, запустился ли: systemctl status blocky

          Рабочий вид сервиса
          Рабочий вид сервиса

          Если там написано, что сервис неактивен, то смотрим логи: journalctl -u blocky

          Так должно выглядеть, если нет проблем
          Так должно выглядеть, если нет проблем


          1. chasy
            12.01.2026 06:57

            Запуск привёл к тому, что blocky запустился, статус был acitve, но kdig так и не начал отрабатывать. Более того, если раньше dig @127.0.0.1 chatgpt.com +short выдавал ожидаемый в вашей статье результат, то теперь и стал выдавать ошибку.
            Решил перезагрузиться, но blocky теперь не запускается даже вручную:

            root# systemctl status blocky
            × blocky.service - Blocky DNS Proxy
                 Loaded: loaded (/lib/systemd/system/blocky.service; enabled; preset: enabled)
                 Active: failed (Result: exit-code) since Mon 2026-01-12 12:31:41 UTC; 4s ago
               Duration: 42ms
                   Docs: https://0xerr0r.github.io/blocky/
                Process: 600 ExecStart=/usr/bin/blocky --config /etc/blocky/config.yml (code=exited, status=1/FAILURE)
               Main PID: 600 (code=exited, status=1/FAILURE)
                    CPU: 43ms
            
            Jan 12 12:31:41 root systemd[1]: Started blocky.service - Blocky DNS Proxy.
            Jan 12 12:31:41 root blocky[600]: [2026-01-12 12:31:41]  INFO _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
            Jan 12 12:31:41 root blocky[600]: [2026-01-12 12:31:41]  INFO _/                                                              _/
            Jan 12 12:31:41 root blocky[600]: [2026-01-12 12:31:41]  INFO _/                                                              _/
            Jan 12 12:31:41 root blocky[600]: [2026-01-12 12:31:41]  INFO _/       _/        _/                      _/                   _/
            Jan 12 12:31:41 root blocky[600]: [2026-01-12 12:31:41]  INFO _/      _/_/_/    _/    _/_/      _/_/_/  _/  _/    _/    _/    _/
            Jan 12 12:31:41 root blocky[600]: [2026-01-12 12:31:41]  INFO _/     _/    _/  _/  _/    _/  _/        _/_/      _/    _/     _/
            Jan 12 12:31:41 root blocky[600]: [2026-01-12 12:31:41]  INFO _/    _/    _/  _/  _/    _/  _/        _/  _/    _/    _/      _/
            Jan 12 12:31:41 root blocky[600]: [2026-01-12 12:31:41]  INFO _/   _/_/_/    _/    _/_/      _/_/_/  _/    _/    _/_/_/       _/
            Jan 12 12:31:41 root blocky[600]: [2026-01-12 12:31:41]  INFO _/                                                    _/        _/
            Jan 12 12:31:41 root blocky[600]: [2026-01-12 12:31:41]  INFO _/                                               _/_/           _/
            Jan 12 12:31:41 root blocky[600]: [2026-01-12 12:31:41]  INFO _/                                                              _/
            Jan 12 12:31:41 root blocky[600]: [2026-01-12 12:31:41]  INFO _/                                                              _/
            Jan 12 12:31:41 root blocky[600]: [2026-01-12 12:31:41]  INFO _/  Version: v0.28.2            Build time: 20260110-1935       _/
            Jan 12 12:31:41 root blocky[600]: [2026-01-12 12:31:41]  INFO _/                                                              _/
            Jan 12 12:31:41 root blocky[600]: [2026-01-12 12:31:41]  INFO _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
            Jan 12 12:31:41 root blocky[600]: Error: can't start server: failed to create TLS configuration: can't retrieve cert: can't load certificate files: open /var/lib/angie/acme/acm>
            Jan 12 12:31:41 root systemd[1]: blocky.service: Main process exited, code=exited, status=1/FAILURE
            Jan 12 12:31:41 root systemd[1]: blocky.service: Failed with result 'exit-code'.
            Jan 12 12:31:41 root systemd[1]: blocky.service: Scheduled restart job, restart counter is at 5.
            Jan 12 12:31:41 root systemd[1]: Stopped blocky.service - Blocky DNS Proxy.
            Jan 12 12:31:41 root systemd[1]: blocky.service: Start request repeated too quickly.
            Jan 12 12:31:41 root systemd[1]: blocky.service: Failed with result 'exit-code'.
            Jan 12 12:31:41 root systemd[1]: Failed to start blocky.service - Blocky DNS Proxy.
            

            dig неуспешен:

            root# dig @127.0.0.1 chatgpt.com +short
            ;; communications error to 127.0.0.1#53: connection refused
            ;; communications error to 127.0.0.1#53: connection refused
            ;; communications error to 127.0.0.1#53: connection refused
            
            ; <<>> DiG 9.18.41-1~deb12u1-Debian <<>> @127.0.0.1 chatgpt.com +short
            ; (1 server found)
            ;; global options: +cmd
            ;; no servers could be reached
            

            При этом папка с сертификатом acme есть, внутри неё три файла, выглядят в порядке


            1. crims0n_ru Автор
              12.01.2026 06:57

              flowgate свежий? Ошибка указывает на то, что у blocky нет доступа к сертификатам, сгенерированным angie, из-за чего он падает. В последнем flowgate я добавил назначение прав при синхронизации файлов конфигурации.