Мне нужно использовать SSH между двумя «клиентами», обоими за CGNAT, используя сторонний сервер в качестве перехода. Этот вариант использования уже рассматривался на этом сайте, но:
Как сделать так, чтобы трафик SSH не читался сервером Jump; и остается зашифрованным между двумя клиентами?
Рассматривался вариант использования VPN-сервера, но он был отклонен, поскольку сервер имел бы доступ для чтения к данным клиента.
Сразу же возникает вопрос дизайна: «Следует ли использовать сторонний сервер перехода, которому вы не доверяете?»
Я предполагаю следующее: у 2 клиентов есть сервер, подключенный к каждой из их сетей, подключенный через vpn, частную линию или иным образом.
Предполагая, что этому «небезопасному» серверу нельзя доверять, но вы все равно решите использовать его (не рекомендуется) для передачи или обработки трафика ssh между двумя клиентами, вы можете сделать следующее:
Создайте правило переадресации портов в iptables (при условии, что это Linux-сервер, такой как centos). Если вы не хотите, чтобы средний сервер принимал участие в согласовании SSH (например, SSH-туннелирование или просто ssh'ing к среднему серверу, а затем переход к цели), тогда вам необходимо, чтобы средний сервер пересылал ваши SSH-пакеты прямо на цель.
Похоже, что описанная цель этого сервера - обеспечить маршрутизацию между сетями. В таком случае вам нужно правило переадресации. В идеале вы могли бы, чтобы средний сервер пересылал пакеты на свой локальный шлюз (маршрутизатор или брандмауэр), и если у него есть путь к конечному серверу SSH, он должен пересылать пакет. Средний сервер ничего не делает, кроме пересылки пакетов, и не видит данных, проходящих через него.
Для этого необходимо знать исходную подсеть или отдельные IP-адреса, отправляющие запросы SSH, и целевые подсети. См. Следующую ссылку по реализации: https://askubuntu.com/questions/227369/how-can-i-set-my-linux-box-as-a-router-to-forward-ip-packets
Надеюсь это поможет,