Яка різниця між локальним та віддаленим переадресацією IP?


10

Яка різниця у функціональності між ними? Я трохи збентежений цим.

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

Віддалене переадресація робить віддалений доступ до локального порту.

Але ця "доступність" буде працювати в обох напрямках ... чи це?

Напр. Наступне (видається з "будинку" хоста)

ssh -R 1234:localhost:2345 user@work

Це встановить безпечний тунель між роботою :: 1234 та будинком :: 2345, правда?

Якщо я покладу що-небудь на один кінець, воно вийде з іншого.

Але потім я можу досягти того, щоб зателефонувати наступному дзвінку від хоста "робота":

ssh -L 1234:localhost:2345 user@home

Отже, єдиною різницею є те, звідки я його називаю, правда?


У вашому прикладі різниці у функціональності немає. Ви самостійно компенсуєте використання протилежного аргументу, обмінюючись цільовими хостами. Якби ти цього не робив і не використовував їх обох з одного хоста - це вже спричинило б абсолютно протилежну поведінку.
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-клієнт вважається місцевим.


ок, дякую, що точно відповів на моє запитання! :-)
nandaloo

@nandaloo Я думаю, що це називається зворотним тунелем ssh. Якщо ми використовуємо складені терміни ініціатор і слухач ('ці умови є менш неоднозначними, ніж клієнт і сервер). Ідея полягає в тому, що у вас є звичайний ініціатор і слухач, і ваш ініціатор і слухач ssh. Ви не можете вибрати, де ваш звичайний ініціатор і слухач. наприклад, сервер HTTP (звичайний слухач) знаходиться на B. B знаходиться позаду брандмауера. A має клієнт HTTP (звичайний ініціатор). Ви ставите свій ініціатор SSH на B. Дивіться за допомогою зворотного тунелю ініціатор і слухач SSH, перебуваєте на протилежних комп'ютерах, ніж звичайний ініціатор і слухач.
барлоп

10

Так, якщо я правильно це розумію, переадресація локального порту від a до b повинна бути ідентичною віддаленому переадресації порту від b до a (і навпаки). Тунель, що виходить, від a до b (дивиться з а), повинен дорівнювати тунелю, що надходить, від a до b (дивиться з b).

Локальне переадресація порту створює вихідний тунель, який можна використовувати для підключення загальнодоступного комп'ютера до Інтернету до локальної машини. Місцевий користувач може отримати доступ до віддаленої комбінації хост: порт на локальному хості, оскільки даний порт на локальному (клієнтському) хості пересилається на даний хост і порт на віддалену сторону:

ssh -L local_port:remote_host:remote_port user@hostname

Віддалене переадресація портів створює вхідний тунель, який можна використовувати для залучення локального комп'ютера до загальнодоступного Інтернету. Користувач Інтернету може отримати доступ до певної локальної комбінації хост: порт на віддаленому хості. Даний порт на віддаленому (серверному) хості передається даному хосту та порту на локальній стороні:

ssh -R local_port:remote_host:remote_port user@hostname

1
Я припускаю, що інша відмінність, крім синтаксису, буде процесом, який слухає, коли користувач підключається. ssh.exe -L каже ssh.exe слухати (окрім вихідного з'єднання, яке він вже робить). ssh.exe -R каже sshd.exe слухати (окрім того, що він вже робить).
барлоп

@ 0x4a6f4672, Що 0x4a6f4672означає?
Пейсьєр

@Pacerier - лише мої ініціали "JoFr" у шістнадцятковій нотації :-)
0x4a6f4672

3

За допомогою переадресації локального порту ви (клієнт) відкрийте розетку для прослуховування на своєму комп’ютері та підключіть клієнта протоколу на рівні програми до цього сокета. Тепер з'єднання передається через 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 - це просто дуже добре.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.