Как работает переадресация SSH-порта?

У меня есть следующие настройки: одна машина с sshd работает (локально) за маршрутизатором (маршрутизатор), а второй хост (удаленный) пытается получить доступ к локальной через Интернет и маршрутизатор через ssh.

Для этого: Маршрутизатор переадресации портов:22 -> локальный:22 (и маршрутизатор в качестве шлюза для локального) . Работает отлично.

Если я пытаюсь создать туннель SSH от удаленного к локальному следующим образом:

ssh -L 1234:R:12345 user@R 

это будет работать только в том случае, если я также перенаправлю маршрутизатор:1234 -> локальный:1234.

Насколько я понимаю, ssh будет туннелировать весь трафик через свое соединение через порт 22. Но, похоже, это не так. Я делаю что-то неправильно? Есть ли возможность туннелировать весь трафик через одно соединение?

3 ответа

Ваш вопрос был немного неясен для меня, поэтому я собираюсь уточнить, что я предположил, а затем постараюсь помочь вам с вашей проблемой. Вы находитесь на "удаленном" компьютере, который подключен по SSH к "локальному", и эта часть работает нормально. Если это так, нам больше не нужно беспокоиться о маршрутизаторе.

Продолжая мои предположения, у "local" есть служба, работающая на порте 12345, к которой вы хотели бы получить доступ с "remote", не открывая дополнительные порты на вашем маршрутизаторе. То, что вы хотели бы сделать, это использовать следующую команду из 'remote':

ssh -L 1234:localhost:12345 user@router's_ip

Чтобы подключиться к услуге, вы должны получить к ней доступ через localhost:1234.

Синтаксис переадресации портов работает следующим образом: {local_port}: {proxy_dest}: {proxy_port}

local_port - это порт, который открывается на клиентском компьютере, с которого вы подключаетесь, для доступа к нему вы должны использовать localhost:local_port

proxy_dest - это хост, к которому вы хотите подключиться с точки зрения сервера, на котором вы используете SSH

proxy_port - это порт удаленной системы, к которому вы хотите подключиться.

Ответ на вторую часть вашего вопроса. Вы можете использовать функцию динамического прокси более поздних версий SSH для пересылки всего трафика с помощью нескольких предостережений.

Приложения, которые вы используете на своем клиенте, должны поддерживать прокси SOCKS.

OpenSSH поддерживает только прокси в стиле SOCKS4.

Используемый синтаксис:

ssh -D user @ remotehost

Я думаю, что вы хотите:

  • В сш из remote в local
  • и форвард порт 1234 на удаленный порт 12345 на local

Вы, кажется, указываете, что local сидит за NAT происходит на router - поэтому вам нужно настроить portforward так, чтобы router:22 направляет внутри страны local:22

Если я правильно понял, командная строка, которую вы хотите использовать на удаленном компьютере, на самом деле:

ssh -L 1234:local:12345 user@router

Ключевым моментом здесь является то, что хотя это local portforward (-L == local) разрешение имени хоста (т.е. local в этом случае - второй параметр в 1234:local:12345 список) происходит на машине назначения - которая в данном случае local,

В вашем примере вы имели 1234:router:12345 - Это означает, что трафик идет вниз по туннелю SSH из remote в local; затем направляется из local в router - и как вы сказали, это требует еще одного portforward для возврата трафика на local,


Альтернативой будет ssh из local в remote, с помощью ssh -R 1234:local:12345, Это не будет нуждаться в перенаправлении на router, но у вас все еще есть 1234 на remote вперед к 12345 на local, Очевидным недостатком этого является то, что вы не можете инициировать это соединение с remote, поскольку у вас нет возможности достичь local,

Другие вопросы по тегам