В чем разница между локальной и удаленной переадресацией IP?

10

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

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

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

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

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

ssh -R 1234:localhost:2345 user@work

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

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

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

ssh -L 1234:localhost:2345 user@home

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

nandaloo
источник
В вашем примере нет разницы в функциональности. Вы как бы сами компенсируете использование противоположного аргумента, меняя целевые хосты. Если бы вы этого не сделали и использовали оба из одного хоста - это уже вызвало бы совершенно противоположное поведение.
XXL

Ответы:

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-клиент, считается локальным.

barlop
источник
ок, спасибо, что точно ответил на мой вопрос! :-)
nandaloo
@nandaloo Я думаю, что это называется обратный туннель SSH. Если мы используем выдуманные термины инициатор и слушатель (потому что эти термины менее неоднозначны, чем клиент и сервер). Идея в том, что у вас есть постоянный инициатор и слушатель, а также ваш ssh-инициатор и слушатель. Вы не можете выбрать, где находятся ваш обычный инициатор и слушатель. Например, HTTP-сервер (обычный слушатель) находится на B. B находится за брандмауэром. У него есть HTTP-клиент (обычный инициатор). Вы помещаете свой инициатор SSH в B. Посмотрите обратным туннелем, что инициатор и слушатель SSH находятся на компьютерах, противоположных обычному инициатору и слушателю.
Бароп
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
0x4a6f4672
источник
1
Я предполагаю, что другим отличием, помимо синтаксиса, будет процесс, который прослушивает подключение пользователя. ssh.exe -L говорит ssh.exe прослушивать (кроме уже установленного исходящего соединения). ssh.exe -R говорит sshd.exe прослушивать (кроме прослушивания, которое он уже выполняет).
Барлоп
@ 0x4a6f4672, что 0x4a6f4672значит?
Пейсер
@Pacerier только мои инициалы «JoFr» в шестнадцатеричной записи :-)
0x4a6f4672
3

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

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

Евгений Маевский "Обратный звонок"
источник
спасибо, это прояснило, как работает переадресация портов. И спасибо за перенос вопроса - я просто не знал об этом сайте суперпользователя :-)
nandaloo
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
NStoeckm
источник
0

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

user400344
источник