Replies: 2 comments 6 replies
-
|
Слушай, отличный разбор, спасибо - прямо готовый рецепт для раздельного выхода RU и забугора. Буду кидать ссылку, когда спрашивают про каскад. В сам установщик это тащить не буду: каскад из нескольких серверов другой масштаб, чем одна коробка, в скрипте такое не удержать. А вот собрать из твоей схемы отдельную страницу-референс, с твоим авторством - с радостью, заодно поправим пару мест. Если ты за, я займусь. Сначала про твою боль с ребутом - лечится. Маршруты рвутся из-за гонки: awg-quick@awg0 и таблицы встают раньше скрипта. Заверни его в один oneshot-юнит после обоих туннелей: enable - и awg0/awg1 поднимутся сами, а ipset с правилами применятся уже после них, без ручного вмешательства после ребута. network-online.target я добавил из-за curl за ru.zone, но он гарантирует только поднятый интерфейс, не доступность до хоста, так что скрипту не помешает переживать неудачную загрузку - оставлять прошлый ru.zone, а не обнулять сет. И если потом руками рестартишь туннель - дёрни и сам routing-юнит, он не перезапустится следом. Пара мест в скрипте, если кто-то будет копировать один в один:
И два момента про сам RU-узел. Схема рабочая и аккуратная. Скажи, если по гайду за - возьму твою основу, доведём вместе. |
Beta Was this translation helpful? Give feedback.
-
|
Интересная ветка, хотелось бы её продвижения. |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
Опишу как работает схема у меня. Может кому будет интересно. Или автор пакета, решит попробовать эти "письмена" автоматизировать.
Исходные данные.
2 сервера (у меня debian13 со всеми обновлениями в качестве ОС). На других ОС не тестил.
российский хостинг: имя AWG0, сетевая enp3s0. Подсеть AWG0 сервера для клиентов 172.16.17.1/24
забугорье хостинг: имя AWG1, сетевая ens3. Подсеть AWG1 сервера для клиентов 172.16.61.1/24
Архитектура (как смог нарисовал)
Подготовка к старту
Для начала нужно понимать, что на оба сервера ставим пакет @bivlked.
Я ставлю без ipv6, и в режиме пресета для мобильных клиентов, поэтому в конфигах как клиента, так и сервера его нет.
После установки, у нас появляется системный юнит /etc/amnezia/amneziawg/awg0.conf , управляемый через
systemctl start awg-quick@awg0.service
запускаем его на AWG1 сервере и добавляем его в автозагрузку - и далее мы с ним ничего не делаем
systemctl enable awg-quick@awg0.service
Предварительно сгенерируем на AWG1 сервере клиента, на пример с именем "ru_host".
По умолчанию, его конфиг лежит в /root/awg/ru_host.conf - уносим его на AWG0 сервер.
на AWG0 сервере - стопаем, и выключаем автозагрузку сервиса
systemctl stop --disable now awg-quick@awg0.service
вся соль, и остальная работа - на AWG0 сервере, который напомню, раположен в РУ сегменте.
Нужно понимать, что на нём уже лежит /etc/amnezia/amneziawg/awg0.conf
Следующим шагом, рядом с ним, положить клиентский конфиг, с AWG1 сервера, с правильным названием, и выдать ему такие же права (600), путем обычного копирования
cp ru_host.conf /etc/amnezia/amneziawg/awg1.conf
права выставляем
chmod 600 /etc/amnezia/amneziawg/awg1.conf
редактируем его, путём добавления 1 строки, после секции (я не стал параметры обфускации тут указывать, сохраняйте свои, которые были сгенерированы сервером AWG1)
Jc =
Jmin
Jmax
S1 =
S2 =
S3 =
S4 =
H1 =
H2 =
H3 =
H4 =
I1 =
Table = off < -- сюда эту строку
сохраняем.
не мешает, для теста запустить соединие,
systemctl start awg-quick@awg1.service
оно должно подняться, но без маршрутизации, трафик в него заворачиваться не будет. Хотя пинг шлюза AWG1, а это 172.16.61.1/24 - должен работать. ну и статус
awg show на обоих серверах, должно показывать активность.
посмотрели, и выключаем
systemctl stop awg-quick@awg1.service
далее, проверяем, ставим пакеты, если не стоит, у меня сейчас такое:
iproute2/stable,now 6.15.0-1 amd64 [installed]
ipset/stable,now 7.22-1+b1 amd64 [installed]
iptables/stable,now 1.8.11-2 amd64 [installed,automatic]
через
apt install resolvconf ipset iproute2 iptables
выключаем, если активен файрволл поднятый пакетом @bivlked
ufs disable
теперь надо настроить роутинг на AWG0.
правим конфиг /etc/amnezia/amneziawg/awg0.conf
приводим строки
к виду (в одну строку, каждый из 2 параметров), где меняем подсеть на свою (смотри архитектуру выше).
сохраняем.
далее команды на AWG0
далее создаем баш скрипт
запуск
нужно понимать, что автозапуск сервисов на AWG0, не стоит делать.. будет зависание, нужна строгая последовательность.
systemctl start awg-quick@awg1.service
проверяем
awg show
systemctl start awg-quick@awg0.service
проверяем.
awg show
затем стартуем баш скрипт, которому дали права на запуск, я его положил в /root/awg, где и ipset ru зоны.
после загрузки и отработки скрипта, трафик уже должен заворачиваться правильно.
это можно проверить
проверяем связность, к примеру так
ip route get 8.8.8.8 mark 1
8.8.8.8 dev awg1 table awg1 src 172.16.61.12 mark 1 uid 0
ip route get 77.88.44.242 (любой русский IP)
77.88.44.242 via [IP шлюза AWG0 сервера] dev enp3s0 src [внешний IP сервера AWG0] uid 0
диагностика
коннектимся любым AmneziaWG/VPN клиентом -> AWG0 серверу.
трафик должен разделятся.
дополнительные проверки.
iptables -t mangle -L PREROUTING -n -v
видим, что счетчики растут
или ещё
iptables -t nat -L -n -v --line-numbers
тоже видим что счетчики растут
ip rule show
итоговая правильная таблица маршрутизации
ip r
default via [IP шлюза AWG0 сервера] dev enp3s0
[IP подсеть AWG0] dev enp3s0 proto kernel scope link src [внешний IP сервера AWG0]
172.16.17.0/24 dev awg0 proto kernel scope link src 172.16.17.1
[внешний IP сервера AWG1] via [IP шлюза AWG0 сервера] dev enp3s0
Эпилог
Схема отработана, у меня на 2 инсталляциях - завелась сразу. Если соблюдать описанную последовательность в блоке "запуск", то все должно у вас получится. Как я уже выше сказал, автозапуск служб на AWG0 сервере - ломает маршруты, так как есть созависимость у сервисов и таблиц маршрутизации.
в случае ребута, нужно зайти, и ручками аккуратно все поднять.
Может быть, когда-то, я автоматизирую это, но.. как и любому админу, лень.
update: поправил пару путей, где раъехалось
Beta Was this translation helpful? Give feedback.
All reactions