Рейтинг:0

Многопроходный сервер Wireguard для некоторых пиров

флаг us

У меня есть несколько серверов Wireguard, размещенных на серверах Ubuntu VPS. На каждом VPN-сервере настроены пиры. У меня настроены серверы в «сетчатой» конфигурации, и все они могут напрямую пинговать друг друга. На серверах включена переадресация ipv4.Я могу подключиться к каждому серверу в качестве однорангового узла, и мое интернет-соединение будет маршрутизироваться через этот сервер.

Я хотел бы перенаправить некоторых одноранговых узлов через несколько серверов Wireguard (с несколькими переходами), а также оставить некоторым одноранговым узлам подключение к Интернету через первый переход Wireguard. В конце концов я намерен контролировать это динамически с помощью приложения узла, выполняющего соответствующие правила iptables по мере необходимости (или каким бы ни было решение)

Например:

Одноранговый узел 1 > Сервер 1 > Сервер 2 > Интернет

Узел 2 > Сервер 1 > Интернет

Узел 3 > Сервер 3 > Интернет

Узел 4 > Сервер 2 > Сервер 1 > Интернет

Возможно ли это с помощью правил iptables? Я провел пару дней, читая подобные посты и пробуя разные вещи. Самое близкое, что я подошёл, это установить на Server1 следующее:

iptables -t nat -A PREROUTING -s 10.42.1.4(Peer1) -j DNAT --to-destination 10.42.1.2(Server2)
iptables -t nat -D POSTROUTING -o wg0 -j MASQUERADE

С использованием tcpdump -n -v -i wg0 Я вижу, что пакеты передаются с сервера 1 на сервер 2, но похоже, что правило MAQUERADE изменяет IP-адрес назначения? я пытался добавить iptables -t nat -A POSTROUTING -d 10.42.1.2 -j SNAT --to-source 10.42.1.4 тоже.

Схема установки

флаг cn
Я нашел решение своей проблемы: [Объединение серверов WireGuard в цепочку: можно пинговать оба с клиента, но не могу получить доступ к Интернету. Проблема с IP-маршрутизацией?] (https://serverfault.com/questions/1080901/chaining-wireguard-servers-can-ping-both-from-client-but-cant-access-internet) — посмотрите, поможет ли это!
computerguy1 avatar
флаг us
Спасибо, это было большой помощью. Я ответил на ваш вопрос. Надеюсь, кто-то знает способ расширить вашу конфигурацию, чтобы включить маршрутизацию для каждого узла.
A.B avatar
флаг cl
A.B
Взгляните туда также, это в дополнение к маршрутизации и более ограничивающим (перекрытие не допускается): https://www.wireguard.com/#cryptokey-routing. Правило DNAT изменяет пункт назначения (всегда 10.42.1.2 от узла 1), почему вы ожидаете, что это будет по-другому?
A.B avatar
флаг cl
A.B
На самом деле я догадываюсь, почему: iptables часто ошибочно принимают за инструмент, выполняющий маршрутизацию, но это не так. Если по какой-то причине пакет не маршрутизируется на интерфейс WireGuard, изменение пункта назначения, вероятно, не является правильным способом маршрутизации пакета туда. Используйте соответствующий инструмент(ы): `ip route` (а иногда и `ip rule`).
A.B avatar
флаг cl
A.B
Я посмотрел на эту проблему. Для меня решение было бы: 1/ избегать бесполезного (и здесь вредного) использования iptables 2/ требовать политик маршрутизации 3/ требовать на некоторых системах несколько интерфейсов WireGuard для преодоления ограничений, присущих WireGuard: отсутствие перекрытия адресов для выбора одноранговых узлов (в отличие от маршрутов где можно заменить маршрут более узким маршрутом).
флаг cn
Учитывая мой опыт работы с WG и ограниченные технические ноу-хау, я бы создал разные интерфейсы WG (wg0, wg1 и т. д.) для разных цепочек. Хотя сам никогда не пробовал. Так проще.
флаг cn
Я добавил еще один ответ на свой вопрос, который *может* быть проще изменить для ваших нужд. Просто хедз-ап! . Посмотрите, поможет ли это.

Ответить или комментировать

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