Обратное туннелирование порта

Я должен показать кому-то веб-сайт, работающий на моей локальной машине завтра. Обычно я выполнил бы это перенаправлением портов на моем локальном маршрутизаторе, но благодаря сбою аппаратных средств и его замены, являющейся ужасным, мой текущий маршрутизатор не позволяет мне сделать перенаправление портов.

Так застрявший в этой задержке и не желании продвинуть все это на надлежащий сервер, у меня была сумасшедшая идея: я могу просто передать свой порт внешнему серверу по SSH?

Я сделал порт, туннелирующий прежде, но я обычно делаю это правильный путь вокруг:

  • Я соединяюсь с удаленным полем и прошу, чтобы порт 12345 обнаружился на моей локальной машине в порте 12345.
  • Я запускаю что-то на P12345 на удаленной машине
  • Я могу получить доступ к нему через localhost:12345

Что я хочу сделать:

  • Соединитесь с удаленным ПК и попросите, чтобы тот его локальный P12345 выбрал вещи от моего локального P12345 (по туннелю)
  • Я запускаю что-то на своем локальном компьютере на P12345
  • Другие люди могут получить доступ к remote:12345 и видеть мой localhost:12345
59
задан 19 April 2018 в 00:51

2 ответа

Команда для порта пересылки 80 от Вашей локальной машины (localhost) к удаленному хосту на порте 8000:

ssh -R 8000:localhost:80 oli@remote-machine

Это требует дополнительной тонкой настройки на сервере SSH, добавьте строки к /etc/ssh/sshd_config:

Match User oli
   GatewayPorts yes

Затем, перезагрузите конфигурацию выполнением сервера sudo reload ssh.

Установка GatewayPorts yes SSH причин для привязки порта 8000 на подстановочном адресе, таким образом, это становится адресом доступным общественности remote-machine (remote-machine:8000).

Если у Вас должна быть опция для того, чтобы не связывать все на подстановочном адресе, изменении GatewayPorts yes кому: GatewayPorts clientspecified. Поскольку ssh связывает с петлевым адресом по умолчанию, необходимо указать пустое bind_address для привязки подстановочного адреса:

ssh -R :8000:localhost:80 oli@remote-machine

: прежде 8000 обязательно если GatewayPorts установлен на clientspecified и Вы хотите предоставить открытый доступ к remote-machine:8000.

Выборки соответствующего руководства:

ssh (1)

- R [bind_address:] port:host:hostport
Указывает, что данный порт на удаленном (сервер) хост должен быть передан данному хосту и порту на локальной стороне. Это работает путем выделения сокета для слушания порта на удаленной стороне, и каждый раз, когда связь установлена с этим портом, соединение передается по безопасному каналу, и связь установлена с серверным портом hostport от локальной машины. По умолчанию сокет слушания на сервере будет связан с петлевым интерфейсом только. Это может быть переопределено путем определения bind_address. Пустой bind_address или адрес '*', указывает, что удаленный сокет должен послушать во всех интерфейсах. Определение удаленного bind_address только успешно выполнится, если опция GatewayPorts сервера будет включена (см. sshd_config (5)).

sshd_config (5)

GatewayPorts
Указывает, позволяют ли удаленным хостам соединиться с портами, переданными для клиента. GatewayPorts может использоваться, чтобы указать, что sshd должен позволить передачам удаленного порта связывать с непетлевыми адресами, таким образом позволив другим хостам соединиться. Аргументом может быть 'нет', чтобы вынудить передачи удаленного порта быть доступными локальному хосту только, 'да', чтобы вынудить передачи удаленного порта обязать с подстановочным адресом или 'clientspecified' позволять клиенту выбирать адрес, с которым связывается передача. Значение по умолчанию является 'нет'.

См. также:

97
ответ дан 22 November 2019 в 23:39

Если сервер имеет GatewayPorts no, можно достигнуть того же результата путем выполнения ssh -g -L 8001:localhost:8000 oli@remote-machine на сервере, после того как Вы выполнились ssh -R команда на клиенте. Это сделает закольцованный порт 8000 на сервере доступным во всех интерфейсах на порте 8001.

14
ответ дан 22 November 2019 в 23:39

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

Похожие вопросы: