Как работает переадресация 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
,