Я вижу, как это можно сделать ..
Итак, у вас есть 3 компьютера. А, В, С
А, Б позади НАТ. Допустим, B является посредником
Способ 1
2 туннеля
Таким образом, вы можете установить SSH соединение от A до B (Туннель 1). И от C до B (Туннель 2). И вперед туннель 1, туннель 2.
Компьютер A соединяется с SSH -L
Компьютер C соединяется с SSH -R
Параметр -L или -R определяет, какая сторона туннеля слушает, а какая сторона туннеля пересылает.
Так что, если я не ошибся, вы могли бы сделать что-то вроде
A$ ssh -L 1234:127.0.0.1:2345 user@compB
C$ ssh -R 2345:127.0.0.1:3456 user@compB
Но я не уверен, что вы можете сделать два подключения к одному SSH-серверу, так что попробуйте это .. Создание двух разных sshd-серверов.
Отредактируйте sshd_config в CompB, и вы увидите, что в поле «Порт 22» добавлена строка под ним «Порт 222». Затем CompB запустит сервер ssh на двух портах.
Затем вы можете подключиться к ssh-серверам через два разных порта 22 и 222.
A$ ssh -L 1234:127.0.0.1:2345 user@compB -p22
C$ ssh -R 2345:127.0.0.1:3456 user@compB -p222
Порт 1234 - это порт компьютера А, к которому вы подключаете свою клиентскую программу. Это вход в туннель 1
Порт 2345 является портом на компьютере B и входом в туннель 2
Порт 3456 - это порт, на котором вы запускаете серверную программу на CompC
Таким образом, CompA может подключиться к серверу на CompC через CompB
Способ 2
один туннель
Один из вариантов - использовать только один туннель, но тогда вы получаете шифрование только на половине маршрута. 5.6.7.8 является IP-адресом CompC, а порт 3456 является сервером CompC, а порт 1234 является портом прослушивания для туннеля.
A$ ssh -L 1234:5.6.7.8:3456 user@compB
Затем на CompA подключите клиентскую программу к порту 1234 на CompA, и все это перейдет на CompC.