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