Каскадный VPN на AmneziaWG: как собрать два сервера для раздельного выхода в интернет

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

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

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

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

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

Как работает каскад из двух серверов

Схема каскада включает два сервера: сервер-вход и сервер-выход. Сервер-вход расположен в России или рядом с ней, к нему подключаются клиенты. Сервер-выход — обычный зарубежный VPS.

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

Список российских сетей загружается из открытой зоны ipdeny и помещается в ipset. Это позволяет быстро проверять принадлежность IP-адреса к российскому сегменту. Деление происходит на уровне пакетов, поэтому не требуется настройка правил для отдельных приложений или списков на клиенте.

Важно понимать, что каскад не скрывает российский IP, а наоборот, показывает его российским сайтам. Это «VPN наоборот»: вместо маскировки российского адреса он предоставляет его там, где это необходимо.

Когда каскад оправдан, а когда нет

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

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

Также стоит учитывать, что каскад не решает проблему с сайтами, которые определяют тип хостинга. Российский VPS почти всегда помечен как дата-центр в геобазах, поэтому сервисы, проверяющие не страну, а тип IP, могут по-прежнему требовать подтверждения. По данным одного из источников, 77 из 78 проверенных диапазонов российских VPS были помечены хотя бы одной геобазой.

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

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

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

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

Отдельный случай — серверы Hetzner с приватным шлюзом. У них публичный IP выдан как /32, а шлюз по умолчанию лежит вне подсети сервера. В этом случае ядро может отвергать маршруты, но свежая версия скрипта маршрутизации автоматически добавляет флаг onlink, решая проблему.

Пошаговая сборка каскада

Сборка каскада включает несколько этапов. Сначала на обоих серверах устанавливается 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

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

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

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

Настройка маршрутизации и списка российских сетей

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

Маршрутизация строится на основе меток fwmark. Трафик от клиентов, идущий к российским адресам, помечается правилом RETURN (пропустить), а остальной — меткой 0x1. Для помеченного трафика создаётся отдельная таблица маршрутизации, которая направляет его через туннель awg1 на сервер-выход.

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

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

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

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

Если весь трафик идёт через заграницу, нужно проверить список российских сетей: ipset list ru | grep "Number of entries". Там должно быть несколько тысяч записей (около 8600). Если ноль — список не скачался.

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

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

Типичные проблемы и их решение

Одна из частых проблем — низкая скорость отдачи при нормальном приёме. Это указывает на узкое место в плече между серверами. Для диагностики нужно запустить iperf3 на сервере-выходе и проверить скорость отдачи и приёма со стороны входа. Низкая отдача при нормальном приёме говорит о проблемах с исходящим шейпингом у хостера входа, кривом пиринге или входном лимите на выходе.

Ошибка Nexthop has invalid gateway возникает на серверах Hetzner из-за особенностей сетевой конфигурации. Решение — использовать флаг onlink при добавлении маршрута. Свежая версия скрипта делает это автоматически.

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

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

Сравнение с альтернативами и ограничения

Каскад на AmneziaWG — не единственный способ решить проблему раздельного выхода. Можно использовать один сервер с Cloudflare WARP для российского сегмента, но это не даст российского IP — сайт увидит адрес Cloudflare. Каскад же предоставляет настоящий российский IP.

По сравнению с обычным VPN на одном сервере, каскад требует два VPS и более сложную настройку. Однако он обеспечивает лучшее качество доступа к российским ресурсам и сохраняет зарубежный выход.

Ограничения каскада: признак дата-центра у российского VPS остаётся, что может вызывать проблемы с некоторыми сервисами. Также схема работает только по IPv4, а протокол AmneziaWG использует UDP, поэтому при полной блокировке UDP каскад не будет работать.

Каскад не входит в стандартный установщик и требует ручной настройки. Это осознанное решение разработчиков: несколько серверов — другой масштаб, который не умещается в один скрипт.

Итоги и рекомендации

Каскадный VPN на AmneziaWG — мощное решение для тех, кому нужен одновременный доступ к российским и зарубежным ресурсам с одного устройства. Схема собирается за вечер при наличии двух VPS и базовых навыков работы с Linux.

Главное преимущество — серверное деление трафика, не требующее настройки клиентов. Это удобно для семейного или небольшого корпоративного использования.

Перед сборкой стоит убедиться, что каскад действительно необходим. Если раздельный выход нужен только вам, проще настроить AllowedIPs на клиенте. Если же требуется централизованное решение, каскад — отличный выбор.

Не забывайте о регулярном обновлении списка российских сетей и мониторинге работы. При возникновении проблем используйте описанные методы диагностики, чтобы быстро найти узкое место.

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

Чем каскадный VPN отличается от обычного двойного VPN?

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

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

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

Почему Google и YouTube могут тормозить при использовании каскада?

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

Какие требования к серверам для каскада?

Нужны два VPS-сервера с реальными публичными IP-адресами, не находящимися за NAT. Сервер-вход должен быть в России или рядом, сервер-выход — за границей. Оба сервера должны работать на Debian 12/13 или Ubuntu 24.04/25.10, иметь root-доступ и отключённый IPv6. Также важно, чтобы подсети серверов не пересекались.

Что делать, если весь трафик идёт через заграницу?

Сначала проверьте список российских сетей: ipset list ru | grep "Number of entries". Если там ноль, список не скачался. Убедитесь, что скрипт маршрутизации не остановился с ошибкой. Также проверьте, что адреса российских сайтов действительно входят в список ipdeny. Если сайт размещён на зарубежном хостинге, его адрес не будет в списке, и это ожидаемо.

Можно ли использовать каскад с одним сервером и Cloudflare WARP?

Да, существует альтернативная схема, где вместо второго сервера используется Cloudflare WARP для российского сегмента. Однако в этом случае российские сайты увидят IP-адрес Cloudflare, а не российский. Каскад с двумя серверами предоставляет настоящий российский IP, что важно для банков и госуслуг.

Насколько сложно собрать каскад самостоятельно?

При наличии базовых навыков работы с Linux и двух VPS сборка занимает около вечера. Основные шаги: установка amneziawg-installer на оба сервера, создание клиента на выходе, настройка туннеля и скрипта маршрутизации на входе, добавление systemd-юнита для автозапуска. Подробная инструкция доступна в репозитории проекта.