Я запускаю устаревшие приложения, в которых у меня нет доступа к исходному коду. Эти компоненты общаются друг с другом, используя открытый текст на определенном порту. Я хотел бы иметь возможность защищать связь между двумя или более узлами, используя что-то вроде stunnel для облегчения одноранговой связи вместо использования более традиционного (и централизованного) пакета VPN, такого как OpenVPN и т. Д.
В идеале транспортный поток должен выглядеть так:
По сути, я пытаюсь настроить это туда, где любой исходящий трафик (сгенерированный на локальной машине) на порт N пересылает через stunnel на порт N + 1, а принимающая сторона получает на порт N + 1, расшифровывает и пересылает к локальному приложению в порту N.
Меня не особо беспокоит потеря исходного IP-адреса hostA / идентичности машины, когда stunnel @ hostB перенаправляет на app @ hostB, потому что полезная нагрузка связи содержит идентифицирующую информацию.
Другой трюк в том, что обычно с stunnel у вас есть архитектура клиент / сервер. Но это приложение гораздо больше P2P, потому что узлы могут приходить и уходить динамически, и жесткое кодирование какого-то типа «connection = hostN: port» в конфигурации stunnel не будет работать.
РЕДАКТИРОВАТЬ: Еще одна возможность может заключаться в настройке какого-либо маршрута по умолчанию, например, исходящий трафик на порт N пересылается через stunnel, настроенный как шлюз ...
Я думаю, что iptables здесь кажется излишним.
appA - это экземпляр приложения на hostA (внешний IP A.A.A.A) appB - это экземпляр app на hostB (внешний IP B.B.B.B)
stunnel на hostA настроен для пересылки зашифрованного соединения от A.A.A.A: 1234 на 127.0.0.1:1234
[appA]
accept = A.A.A.A: 1234
подключить = 127.0.0.1:1234
клиент = нет
stunnel на hostB настроен для создания зашифрованного туннеля и прямого соединения с 127.0.0.1:4321 на A.A.A.A: 1234
/ usr / bin / stunnel -d 127.0.0.1:4321 -r A.A.A.A: 1234
appB устанавливает соединение с 127.0.0.1:4321
и наоборот для hostB