Есть ли способ создать одноранговую виртуальную частную сеть между небольшим количеством узлов (4), где каждый пакет идет непосредственно к месту назначения?
Каждый узел будет иметь общедоступный адрес и будет размещать несколько виртуальных машин с адресами в частной сети. Каждый узел сможет напрямую подключаться к другим узлам через свой публичный адрес.
Потребность будет:
Я могу придумать некоторые решения, но они не проверяют эти три пункта:
Первым решением (S1 на изображении) будет создание мостовой VPN на узле и подключение к нему других узлов. Эти два пункта не соблюдаются. Действительно, существует единственная точка отказа (VPN-сервер), и пакет, который переходит от VPN-клиента к другому, должен будет пройти через VPN-сервер (точка 2).
Другое решение (S2 на изображении) - создать мост между каждым узлом (с VPN-клиентом и сервером) и включить связующее дерево для очистки петель. Здесь мы соблюдаем первое правило, так как STP изменит форму сети в случае отказа узла, но мы по-прежнему не соблюдаем пункт 2, поскольку протокол связующего дерева отключит некоторые ссылки.
Для третьего (S3 на изображении) решения можно было бы создать 3 разных частных сети (например, 10.1.0.0/16 для узла 1, 10.2.0.0/16 для узла 2 ... и маршрутизировать пакет между серверы, использующие связь между узлами. Это решение удовлетворит потребности 1 и 2, но, конечно, не 3.
Фактически, я хотел бы, чтобы весь узел работал как распределенный коммутатор, отправляя пакет только тому узлу, который содержит IP-адрес назначения.
Есть ли решение, которое соответствовало бы этим трем точкам?
IPsec в транспортном режиме сделает это, но на самом деле это невозможно масштабировать. Четыре узла - это максимум, о котором я бы даже подумал.
В настоящее время я использую strongSwan для IPsec в Linux, который достаточно легко настроить таким образом.
Поскольку вы отредактировали свой вопрос и немного изменили требования, я рекомендую вам вместо этого взглянуть на Open vSwitch.