Я хочу иметь возможность напрямую подключаться из любой точки мира к встроенному Linux (называемому C), у которого нет публичного IP-адреса.
C может установить соединение с сервером (с помощью SSH -R), и если я подключусь по SSH к серверу, то затем смогу подключиться по SSH к встроенному Linux.
Однако мне бы хотелось иметь возможность подключаться по SSH с клиента на C без необходимости предварительного подключения по SSH к серверу. (Я не могу настроить соединение с помощью SSH -R с C на клиент)
Возможно ли это, и если да, то как?
решение1
Вы можете сделать это довольно легко. Один из способов — использовать удаленную переадресацию портов SSH, с помощью которой C сообщает серверу, что нужно переадресовать порт обратно на него, что-то вроде:
ssh -R 2222:localhost:22 server
При запуске этой команды из C она сообщит серверу о необходимости перенаправлять все соединения с портом 2222 в C на порт 22.
Аналогичным образом вы можете настроить переадресацию портов на сервере с помощью правил брандмауэра.
решение2
Если вы хотите иметь возможность подключиться к перенаправленному порту, вам понадобятся четыре вещи:
- Укажите публичный IP-адрес/имя хоста сервера в качестве первого аргумента
-R
, в противном случае он будет прослушивать толькоlocalhost
, который, очевидно, недоступен извне сервера. - Настройте сервер с помощью
GatewayPorts
, что позволит сделать перенаправленные порты доступными извне. - Используйте
-g
переключатель, чтобы в принципе разрешить то же самое со стороны клиента. - Откройте порт
2222
в брандмауэре сервера.
Команда может выглядеть так:
ssh -g -R server:2222:localhost:22 server