Каскад из двух серверов: российский трафик напрямую, остальное за границу

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

Как это работает

Одно подключение клиента, два сервера, трафик делится по месту назначения.

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

Сервер-вход (в России)

Сюда подключаются клиенты. Этот сервер решает, куда направить каждый поток, и держит всю логику каскада. Российские сайты идут напрямую с его IP, поэтому открываются быстро и принимают подключение.

Сервер-выход (за границей)

Обычный сервер AmneziaWG за границей. Сервер-вход подключается к нему как клиент и пересылает всё, что не относится к российским сетям, - зарубежные сайты видят чистый зарубежный IP.

Деление по назначению

Список российских сетей загружается в ipset. Трафик к этим адресам идёт напрямую, остальной помечается и уходит через выход. Без правил под каждое приложение и без списков на клиенте.

Когда это полезно

Обычный VPN гонит весь трафик через один выход. Каскад даёт сразу два.

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

На проверенной основе

Инструкция не набросок - маршрутизацию проверили вживую.

Каскад работает поверх двух обычных установок amneziawg-installer. В инструкции - идемпотентный скрипт маршрутизации и systemd-юнит, чтобы деление само поднималось после перезагрузки. Всё проверено на живом стенде из двух серверов: и сам сплит, и повторные запуски, и восстановление после ребута. Схему предложил в обсуждении сообщества @glfenix, полностью задокументирована в репозитории.

Частые вопросы

Что такое каскад из двух серверов?
Это два сервера, соединённые в цепочку (иногда называют двойным VPN). Клиент подключается к серверу-входу, а тот пересылает часть трафика через второй сервер-выход. Здесь деление идёт по месту назначения: российские сети уходят напрямую с сервера-входа, остальное - через зарубежный выход.
Зачем отделять российский трафик от остального?
Чтобы российские сайты открывались с российского IP без крюка через заграницу и без отказа иностранным адресам, а зарубежные сайты шли через чистый зарубежный выход. И то и другое - с одного подключения на клиенте.
Нужна ли особая настройка на клиенте?
Нет. Деление целиком на сервере-входе. Клиенты добавляются как обычно и не требуют особой настройки - они просто подключаются к серверу-входу.
Каскад входит в установщик?
Нет. Каскад из нескольких серверов - это отдельная ручная настройка поверх двух обычных установок amneziawg-installer. Есть пошаговая инструкция с проверенным скриптом маршрутизации и systemd-юнитом для автозапуска после перезагрузки.
Откуда берётся список российских сетей?
Из агрегированной зоны российских IP (ipdeny), загружается в ipset. Трафик к этим сетям идёт напрямую, остальное помечается и уходит через зарубежный выход. Список периодически обновляется.