9

Какая разница в функциональности между ними? Я немного смущен этим.

Локальная переадресация делает удаленный порт локально доступным.

Удаленная пересылка делает локальный порт удаленно доступным.

Но эта «доступность» будет работать в обоих направлениях ... или нет?

Например, следующее (выдается от хозяина 'home')

ssh -R 1234:localhost:2345 user@work

Это создаст безопасный туннель между работой ::1234 и домом ::2345, верно?

Если я вставлю что-нибудь на одном конце, оно выйдет на другом конце.

Но тогда я могу добиться того же, используя следующий вызов хоста «работа»:

ssh -L 1234:localhost:2345 user@home

Итак, единственная разница в том, откуда я это называю, правильно?

5 ответов5

10

Да, если я правильно понимаю, переадресация локального порта с a на b должна быть идентична переадресации удаленного порта с b на a (и наоборот). Исходящий туннель от a до b (если смотреть от a) должен быть равен входящему туннелю от a до b (если смотреть от b).

Локальная переадресация портов создает исходящий туннель, который может использоваться для подключения общедоступного интернет-компьютера к локальной машине. Локальный пользователь может получить доступ к комбинации удаленный хост: порт на локальном хосте, поскольку данный порт на локальном (клиентском) хосте перенаправляется на данный хост и порт на удаленной стороне:

ssh -L local_port:remote_host:remote_port user@hostname

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

ssh -R local_port:remote_host:remote_port user@hostname
3

При переадресации локального порта вы (клиент) открываете сокет прослушивания на своем компьютере и подключаете к нему сокет клиента протокола уровня приложения. Теперь соединение пересылается через SSH на сервер. Сервер подключается к удаленному хосту и туннелирует данные от клиента протокола до конечного пункта назначения.

При удаленной переадресации портов сервер открывает сокет прослушивания на хосте сервера. Некоторое удаленное приложение подключается к этому хосту и отправляет информацию, которая передается на ваш клиентский компьютер. Здесь устанавливается соединение с конечным пунктом назначения (некоторый сервер протокола уровня приложения, работающий на вашем компьютере или в вашей сети), и данные передаются из удаленного приложения в конечный пункт назначения.

2

Основное практическое отличие состоит в том, что при подключении 2 компьютеров A и B и B находится за брандмауэром или маршрутизатором NAT, который вы не контролируете, и он блокирует входящие .. Вы сидите в A. Вы не можете заставить A соединиться с B. Но B не будет блокировать исходящие .. Таким образом, вы получаете B, чтобы подключиться к A.

- добавлено уточнение--

Вышесказанное, понятное спрашивающему, означает основное практическое различие между локальной и удаленной пересылкой. ssh -L и ssh -R, когда вы используете каждый. Я не комментировал конкретные примеры команд, которые он давал, где он переключает -L и -R, и к какому sshd-серверу он подключается. Но сейчас я попытаюсь прокомментировать это .. С командами ssh, которые он дал, с точки зрения обычного клиента и обычного сервера, по-видимому, нет никакой разницы, поскольку в нем не говорится «ах, это клиент ssh, а это сервер ssh ...» Я не знаю ssh, и который является клиент-серверным аспектом ssh, не имеет значения и неизвестен как обычному клиенту, так и обычному серверу. Они просто заботятся о том, кто слушает, и с их точки зрения это выглядит одинаково. Рабочий компьютер слушает и на 1234. Они не замечают, что в одном случае это ssh-сервер sshd.exe, а в другом - клиент ssh.exe, ssh. Кстати, где находится ssh-клиент, считается локальным.

1

Это лучше всего понять на небольших примерах. В этих примерах соединения структурированы так:

Локальный сервер -(LAN)- Терминал -----(SSH, обычно через Интернет)----- Конечная точка туннеля -(LAN)- Удаленный компьютер

Вы используете переадресацию локального порта, если хотите туннелировать на определенную удаленную машину / порт, доступный через конечную точку туннеля, к которой у вас есть доступ по ssh. Therby, порт этой удаленной машины также доступен локально на вашем собственном терминале, то есть http:// localhost:terminal_port /.

Это делается с использованием следующего синтаксиса:

ssh -L terminal_port:remote_machine_ip:remote_service_port -p tunnel_endpoint_ssh_port ssh-login@tunnel_endpoint_ip

Вы можете использовать удаленную переадресацию портов, если хотите включить ЛЮБОГО (!) удаленный, который может получить доступ к порту прослушивания конечной точки туннеля, чтобы иметь возможность удаленного доступа к ip/ порту в локальной сети. К вашему локальному серверу похоже, что соединение с удаленного компьютера инициируется терминалом.

Синтаксис:

ssh -R tunnel_endpoint_listen_port:local_server_ip:local_server_port -p tunnel_endpoint_ssh_port ssh-login@tunnel_endpoint_ip
0

Справочная страница для socat проясняет это очень хорошо. Да, я знаю, что ssh и socat - это две совершенно разные вещи, но документация socat просто очень хорошая.

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