Каскад VPN Amnezia: как собрать двухсерверную цепочку для раздельного выхода трафика

Разбираем, как устроен каскадный VPN на AmneziaWG: схема из двух серверов, пошаговая настройка, типичные ошибки и ответы на частые вопросы.

Что такое каскадный VPN и зачем он нужен

Каскадный VPN, или multi-hop, — это цепочка из двух и более VPN-серверов, через которую последовательно проходит трафик клиента. В классической схеме устройство подключается к первому серверу (вход), а тот перенаправляет весь трафик через второй (выход). Такой подход позволяет скрыть реальный IP и усложнить отслеживание, но у него есть и прикладные сценарии, не связанные с анонимностью.

В контексте AmneziaWG каскад часто используют для решения проблемы, когда один сервер не может одновременно обеспечить быстрый доступ к российским ресурсам и зарубежным сайтам. Обычный VPN с зарубежным сервером заставляет российские банки, Госуслуги и маркетплейсы видеть иностранный IP, из-за чего они могут блокировать доступ или требовать дополнительную верификацию. Каскад из двух серверов — российского и зарубежного — позволяет разделить трафик: российские сайты открываются напрямую с российского IP, а всё остальное уходит через зарубежный выход.

Важно понимать, что каскад не является аналогом Tor: здесь всего один дополнительный узел, и цель — не анонимность, а смена выходного IP и оптимизация маршрутов. Схема не скрывает факт использования VPN от провайдера, хотя обфускация AmneziaWG делает трафик трудноотличимым от случайного шума.

Как работает каскад на AmneziaWG: схема и принципы

В каскаде на AmneziaWG участвуют два сервера: сервер-вход и сервер-выход. Клиент подключается только к серверу-входу, который принимает весь трафик и решает, куда его направить. Решение принимается на основе IP-адреса назначения: если адрес входит в список российских сетей, пакет уходит в интернет напрямую с сервера-входа; в противном случае он помечается и пересылается через туннель на сервер-выход, который уже отправляет его в интернет.

Такая схема реализует серверный сплит-туннелинг: клиенту не нужно настраивать списки маршрутов или правила для приложений — вся логика живёт на сервере. Это удобно, когда к VPN подключается несколько устройств или пользователей, и вы хотите, чтобы все они получали одинаковое поведение без индивидуальной настройки.

Список российских сетей загружается из открытых источников, например из зоны ipdeny, и помещается в ipset. Для маршрутизации используется отдельная таблица и правило fwmark: помеченный трафик направляется в туннель к серверу-выходу. Важно, чтобы маршрут к самому серверу-выходу не попадал в туннель, иначе возникнет петля.

Требования к серверам и подготовка

Для каскада понадобятся два VPS-сервера с чистой ОС (Debian 12/13 или Ubuntu 24.04/25.10) и root-доступом. Оба сервера должны иметь реальный публичный IP-адрес, не находящийся за CGNAT. Проверить это можно, сравнив адрес, который возвращает curl -s ifconfig.me, с адресом на сетевом интерфейсе (ip -4 addr). Если на интерфейсе приватный адрес (например, 10.x или 100.64.x), такой сервер не подойдёт для роли входа, так как к нему не смогут подключиться клиенты извне.

Сервер-вход желательно размещать в России или рядом, чтобы российские сайты открывались с близкого адреса и быстро. Сервер-выход — обычный зарубежный VPS, который будет показывать иностранный IP. Важно, чтобы у серверов были разные внутренние подсети (например, 172.16.17.1/24 и 172.16.61.1/24), чтобы избежать конфликтов маршрутизации.

Также необходимо отключить IPv6, так как каскад работает только по IPv4. Если IPv6 включён, трафик по этому протоколу пойдёт в обход маркировки и разделение не будет работать. Установщик amneziawg-installer по умолчанию отключает IPv6, но при ручной настройке это нужно проверить.

Пошаговая настройка каскада: от установки до автозапуска

Процесс настройки каскада состоит из нескольких этапов. Сначала на обоих серверах устанавливается amneziawg-installer — скрипт, который разворачивает AmneziaWG 2.0 с обфускацией и настраивает файрвол. Установка выполняется неинтерактивно с указанием подсети, например:

# на сервере-выходе
bash install_amneziawg.sh --yes --disallow-ipv6 --route-all --subnet=172.16.61.1/24

# на сервере-входе
bash install_amneziawg.sh --yes --disallow-ipv6 --route-all --subnet=172.16.17.1/24

После установки на сервере-входе нужно доустановить пакеты curl и ipset, если их нет.

Далее на сервере-выходе создаётся клиент для сервера-входа: bash /root/awg/manage_amneziawg.sh add ru_host. Полученный конфигурационный файл ru_host.conf копируется на сервер-вход и сохраняется как /etc/amnezia/amneziawg/awg1.conf. В этом файле нужно добавить Table = off в секцию [Interface], чтобы awg-quick не прописывал маршруты самостоятельно, и удалить строку DNS = ..., так как на сервере DNS не нужен.

Затем туннель поднимается командой systemctl start awg-quick@awg1. Проверить связь можно через awg show awg1 — должна появиться строка latest handshake.

Следующий шаг — создание скрипта маршрутизации /root/awg/awg-routing.sh. Этот скрипт загружает список российских сетей в ipset, создаёт отдельную таблицу маршрутизации и правило fwmark. Он идемпотентен, то есть его можно запускать повторно, и при каждом запуске обновляет список сетей. В скрипте нужно указать клиентскую подсеть и внешний IP сервера-выхода.

Наконец, для автозапуска после перезагрузки создаётся systemd-юнит awg-routing.service, который запускается после обоих туннелей. Это гарантирует, что маршрутизация поднимется автоматически, без ручного вмешательства.

Скрипт маршрутизации: ключевые элементы

Скрипт маршрутизации — сердце каскада. Он выполняет несколько задач: загружает список российских сетей, создаёт ipset-набор, настраивает правила iptables и маршруты. Рассмотрим ключевые элементы.

Список российских сетей загружается из ipdeny и помещается в ipset. Чтобы избежать ситуации, когда набор временно пуст, используется атомарная подмена: сети заливаются во временный набор, а затем ipset swap заменяет основной набор. Если список не скачался, скрипт должен останавливаться с ошибкой, а не продолжать работу с пустым набором — иначе весь трафик уйдёт за границу, что сломает разделение.

Для маршрутизации создаётся отдельная таблица (например, table 100) с маршрутом по умолчанию через туннель awg1. Правило ip rule add fwmark 0x1 table 100 направляет помеченные пакеты в эту таблицу.

Маркировка трафика выполняется в цепочке PREROUTING таблицы mangle. Сначала правило RETURN для пакетов, адреса которых есть в ipset-наборе ru — они идут напрямую. Затем правило MARK для остальных пакетов, устанавливающее метку 0x1. Порядок правил критичен: RETURN должен стоять раньше MARK.

Также в скрипте должен быть маршрут к серверу-выходу вне туннеля, иначе пакеты к нему закольцуются. Для хостеров с /32-адресом и шлюзом вне подсети (например, Hetzner) требуется флаг onlink при добавлении маршрута. Современные версии скрипта автоматически повторяют добавление маршрута с этим флагом при ошибке.

Проверка работоспособности и диагностика

После настройки каскада важно убедиться, что разделение трафика работает корректно. Самый простой способ — проверить счётчики iptables на сервере-входе. Обнулите счётчики в цепочке PREROUTING, затем с клиента выполните запрос к зарубежному сайту (например, curl https://ifconfig.me) и к российскому адресу (например, ping -c3 77.88.55.242). После этого посмотрите счётчики: правило RETURN должно показать рост для российских пакетов, а правило MARK — для остальных.

Также можно проверить, что curl ifconfig.me с клиента показывает IP сервера-выхода, а не входа. Если это так, каскад работает.

При диагностике проблем обращайте внимание на следующие моменты:

  • Если весь трафик идёт через заграницу, проверьте размер ipset-набора: ipset list ru | grep "Number of entries" — должно быть несколько тысяч записей. Ноль означает, что список не скачался.
  • Если конкретный российский сайт открывается через заграницу, проверьте его IP через getent hosts имя.ru и затем ipset test ru <адрес>. Если адрес зарубежный (например, сайт на Cloudflare), это ожидаемо — такие сайты не попадают в список российских сетей.
  • Если Google и YouTube тормозят, это связано с тем, что часть их кэшей размещена на российских IP и уходит напрямую. Решение — исключить сети Google из списка российских или пометить их до правила RETURN.

Типичные ошибки и способы их решения

При настройке каскада пользователи часто сталкиваются с несколькими типичными проблемами. Рассмотрим их и способы решения.

Весь трафик идёт через заграницу. Причина — пустой ipset-набор. Скрипт должен останавливаться с ошибкой, если список не скачался, но если это не так, проверьте доступность ipdeny и наличие curl. В некоторых случаях помогает использование снимка сетей из репозитория проекта.

Скрипт падает с ошибкой Nexthop has invalid gateway. Это характерно для хостеров, где публичный IP выдан как /32, а шлюз по умолчанию находится вне подсети сервера. Решение — добавить флаг onlink при добавлении маршрута. Современные версии скрипта делают это автоматически.

Отдача значительно ниже приёма. Если приём нормальный, а отдача почти нулевая, проблема не в MTU и не в процессоре. Узкое место — плечо между сервером-входом и сервером-выходом. Проверьте скорость этого участка с помощью iperf3: на выходе запустите iperf3 -s, со входа — iperf3 -c IP-выхода (отдача) и iperf3 -c IP-выхода -R (приём). Низкая отдача при нормальном приёме указывает на шейпинг исходящего трафика у хостера входа или проблемы с пирингом.

IPv6-трафик идёт мимо деления. Убедитесь, что IPv6 отключён на обоих серверах. Если он включён, трафик по IPv6 будет обходить маркировку и уходить напрямую, что нарушит разделение.

Каскад в панелях управления: пример BeAdmin

Для тех, кто предпочитает управлять серверами через панели, существуют готовые реализации каскада. Например, в панели BeAdmin от хостера Fornex каскад настраивается через графический интерфейс без ручного редактирования конфигов.

В BeAdmin каскад настраивается для каждого пользователя отдельно. На сервере-выходе создаётся пользователь с ролью «Узел выхода», после чего панель генерирует ссылку awgmh://…, которую нужно вставить в настройки узла входа на другом сервере. Узел входа создаётся аналогично, но с ролью «Узел входа» и вставленной ссылкой.

Особенность BeAdmin в том, что узел выхода не имеет собственной конфигурации и QR-кода — он только передаёт трафик дальше. Узел входа, наоборот, выдаёт обычные QR-коды и .conf-файлы для конечных устройств. Статус каскада отображается в панели: «Активен», «Проверка…», «Выход не привязан» или «Выход недоступен».

Панель позволяет перепривязывать узел входа к другому выходу, а также отвязывать его, возвращая пользователя к прямому выходу. Это удобно, если нужно быстро сменить страну выхода без переимпорта конфигураций на клиентах.

Сравнение с альтернативами: когда каскад не нужен

Каскад — не единственный способ организовать раздельный выход трафика. Прежде чем разворачивать два сервера, стоит рассмотреть альтернативы.

Если разделение нужно только одному устройству, проще настроить список AllowedIPs прямо на клиенте. Это позволит указать, какие подсети должны идти через VPN, а какие — напрямую. Такой подход не требует второго сервера и подходит для одиночного использования.

Другой вариант — использовать Cloudflare WARP в качестве второго выхода. В этом случае российский трафик уходит через WARP, а остальной — напрямую. Это дешевле, так как не нужен второй VPS, но у схемы есть недостаток: сайты увидят IP Cloudflare, а не российский адрес, что не подходит для сервисов, требующих российский IP.

Каскад оправдан, когда нужно централизованное деление на сервере, одинаковое для всех клиентов, и при этом требуется именно российский IP для российских ресурсов. Если таких требований нет, можно обойтись одним сервером или клиентским сплит-туннелингом.

Ограничения и важные замечания

Каскад на AmneziaWG имеет ряд ограничений, о которых стоит знать до начала настройки.

Во-первых, каскад не обеспечивает анонимность. Он меняет выходной IP, но не скрывает факт использования VPN и не защищает от анализа трафика. Если вам нужна анонимность, рассмотрите Tor или другие специализированные инструменты.

Во-вторых, деление трафика происходит по IP-адресам назначения. Это значит, что сайты, размещённые на зарубежных хостингах или за CDN (например, Cloudflare), не попадут в список российских сетей и будут уходить через зарубежный выход. Если такой сайт блокирует иностранные IP, он не откроется. Проверить конкретный сайт можно через ipset test ru <адрес>.

В-третьих, российский VPS почти всегда определяется как дата-центр. Даже если сайт видит российский IP, он может запросить дополнительную верификацию, если проверяет тип хостинга. Это особенно актуально для банков и государственных сервисов.

Наконец, каскад требует двух серверов и, соответственно, двойных расходов. Если вам не нужен зарубежный выход, второй сервер избыточен.

Вопросы и ответы

Что такое каскадный VPN на AmneziaWG?

Каскадный VPN — это цепочка из двух серверов, через которую проходит трафик клиента. Клиент подключается к серверу-входу, а тот перенаправляет часть трафика через сервер-выход. В контексте AmneziaWG каскад часто используют для разделения трафика: российские сайты идут напрямую с российского сервера, а зарубежные — через зарубежный выход.

Зачем нужен каскад, если есть обычный VPN?

Обычный VPN с одним зарубежным сервером заставляет российские сайты видеть иностранный IP, из-за чего они могут блокировать доступ. Каскад решает эту проблему, позволяя российским ресурсам видеть российский IP, а зарубежным — иностранный, при этом клиент использует одно подключение.

Нужна ли особая настройка на клиенте для каскада?

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

Почему Google и YouTube тормозят в каскаде?

Часть кэшей Google и YouTube размещена на российских IP и попадает в список российских сетей, поэтому трафик к ним уходит напрямую через сервер-вход, и Google видит российский адрес. Чтобы заставить Google и YouTube всегда идти через зарубежный выход, нужно исключить их сети из списка российских или пометить их до правила RETURN.

Что делать, если отдача намного ниже приёма?

Если приём нормальный, а отдача почти нулевая, проблема обычно в плече между сервером-входом и сервером-выходом. Проверьте скорость этого участка с помощью iperf3: на выходе запустите iperf3 -s, со входа — iperf3 -c IP-выхода (отдача) и iperf3 -c IP-выхода -R (приём). Низкая отдача при нормальном приёме указывает на шейпинг исходящего трафика у хостера входа или проблемы с пирингом.

Можно ли настроить каскад в панели управления, например BeAdmin?

Да, в BeAdmin каскад настраивается через графический интерфейс. Создаётся пользователь с ролью «Узел выхода» на одном сервере, генерируется ссылка awgmh://, которая вставляется в настройки узла входа на другом сервере. Панель автоматически управляет связью и отображает статус каскада.

Какие ограничения у каскада на AmneziaWG?

Каскад не обеспечивает анонимность, только смену выходного IP. Деление трафика идёт по IP-адресам, поэтому сайты на зарубежных хостингах или за CDN не попадают в список российских сетей. Также российский VPS часто определяется как дата-центр, что может вызывать дополнительные проверки на некоторых сайтах.