У меня три машины:

  1. У меня есть физический доступ к localhost
  2. Я хочу, чтобы ssh в host1 . Тем не менее, он находится за NAT операторского уровня, поэтому я не могу ssh напрямую к нему от localhost
  3. relayhost настроен, чтобы помочь мне подключиться с localhost на host1

Я хочу ssh от каждого localhost и host1 до relayhost , а затем relayhost ретранслирует мое соединение ssh с localhost на host1 .

Этот ответ предполагает, что я могу создать туннель на relayhost используя ssh -L если я знаю URI или IP-адрес host1 . Однако я не знаю этого из-за NAT операторского класса. Итак, я могу представить процесс для его передачи следующим образом:

  1. На host1 ssh user@relayhost
  2. relayhost наблюдает за этим соединением и, когда видит, говорит:«Я собираюсь создать туннель от моего порта 9999 до этого соединения».
  3. На localhost хосте , ssh 9999:relayhost

Это правильный путь? Как мне сделать шаг 2?

1 ответ1

3

Вам не нужно никаких специальных триггеров на relayhost . Все, что вам нужно сделать, это использовать переадресацию удаленных портов с помощью ssh -R вместо переадресации локальных портов с помощью ssh -L .

Теперь, если я правильно понимаю - ваша проблема в том, что ни localhost ни host1 имеют общедоступных IP-адресов - оба находятся за NAT. В противном случае было бы проще создать туннель от host1 до localhost с помощью ssh -R а затем запустить второе SSH-соединение внутри этого туннеля.

Если нам нужно использовать реле, это можно сделать в следующих шагах. Для наглядности давайте переименовать localhost машину к myhost Теперь.

  1. Запустите это на host1:

    ssh -R 12345:localhost:22 user@relayhost
    

    Это откроет порт 12345 на relayhost и когда кто-либо подключится к нему, данные будут перенаправлены на SSH-порт 22 на host1 .

  2. Теперь вы можете подключиться к порту 12345 на relayhost от myhost .

    ssh user@relayhost -p 12345
    

    Если на relayhost установлен ограничительный межсетевой экран, который запрещает внешний доступ к порту 12345 , вы можете использовать локальную переадресацию портов, чтобы открыть порт локально на myhost:

    ssh -N -L 56789:localhost:12345 user@relayhost
    

    А затем подключитесь к host1 от myhost:

    ssh user@localhost -p 56789
    

Однако не рассчитывайте построить какое-либо постоянное сетевое решение для переадресации удаленных портов (см. Https://serverfault.com/q/595323 для будущих возможных проблем). Вам следует рассмотреть возможность использования VPN с сервером на relayhost для долгосрочной настройки.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .