SSH-доступ к узлу office за маршрутизатором NAT

Я хотел бы получить доступ к порту ssh моего офиса Linux хоста из дома. К сожалению, хост находится за маршрутизатором NAT. Таким образом, IP-адрес не является общедоступным. Существует, однако, доступ к другому интернет-хосту (серверу), который, к сожалению, только некорневой доступ. Через некоторое время поиска я не нахожу подходящего решения.

следующий код:

  • офисный ПК (linux, root access) за NAT (IP не публичный), но полный Интернет доступ.
  • серверный ПК (linux, без корневого доступа) статический и публичный IP и полный доступ в интернет.
  • домашний ПК (linux, root access) за NAT (IP not public), но полный доступ в интернет.

возможности подключения:
Офисный ПК - > сервер <-- домашний ПК

не возможно:
Офисный ПК домашний ПК

ни домашний компьютер, ни сервер не могут инициировать доступ к офисному компьютеру.
Но и ПК офиса и домашний ПК могут начать подключения к серверу.

обратный туннель SSH невозможен:
Я попробовал метод под названием Обратный ssh-туннель. К сожалению, для этого требуется, чтобы GatewayPorts на сервере был установлен в " yes " в /etc/ssh/sshd_config, где у меня нет корневого доступа.

в принципе это должно быть возможно:

0) на сервере запускаю программу userspace которая слушает по 2 порта (1 входящий, 1 исходящий)

1) на моем офисном ПК я запускаю другую программу, которая держит TCP-соединение открытым к исходящему порту на сервере.

2) из дома я подключаюсь к входящему порту сервера.

должно быть стандартное решение для этого.

Что самое быстрое и самое чистое решение для того чтобы разрешить это?

Frank

27
задан ritter
24.12.2022 16:30 Количество просмотров материала 3447
Распечатать страницу

5 ответов

youatwork@officepc$ autossh -R 12345:localhost:22 notroot@serverpc

позже:

you@homepc$ autossh -L 23456:localhost:12345 notroot@serverpc

you@homepc$ ssh youatwork@localhost -p 23456

то, что вы могли бы сделать это: в шаге 1 вперед удаленный порт с офисного компьютера на сервер (12345 используется в качестве примера, любой порт >1024 должны сделать). Теперь при подключении к 12345 на сервере необходимо подключиться к порту 22 на officepc.

на Шаге 2 перенаправьте порт 23456 с домашней машины на сервер 12345 (откуда он будет перенаправлен в officepc:22, как указано в шаге 1)

на Шаге 3 Подключение к локальной порт 23456 С вашим офисным компьютером login. Это передается шагом 2 к порту 12345 на вашем сервере и шагом 1 к вашему офисному ПК.

обратите внимание, что я использую autossh для пересылки, так как это оболочка ssh, которая автоматически подключает туннель, если он отключен; однако нормальный ssh будет работать, пока соединение не упадет.

существует возможная уязвимость: любой, кто может подключиться к localhost: 12345 на serverpc теперь может подключитесь к officepc:22 и попробуйте взломать его. (Обратите внимание, что если вы используете SSH-сервер, вы должны в любом случае обеспечить его выше основных защит, которые включены по умолчанию; я рекомендую по крайней мере отключить корневой логин и отключить аутентификацию паролем - см., например,этой)

редактировать: я проверил это с той же конфигурацией, и это работает. GatewayPorts no влияет только на порты, открытые для всего мира, а не на локальные туннели. Это что перенаправленные порты:

homepc:
  outgoing ssh to serverpc:22
  listening localhost:23456 forwarded through ssh tunnel
serverpc:
  listening ssh at *:22
  incoming localhost ssh tunnel (from homepc) forwarded to localhost:12345
  listening localhost ssh tunnel (from officepc) forwarded from localhost:12345
officepc:
  outgoing ssh to serverpc:22
  incoming localhost through ssh tunnel (from serverpc) forwarded to localhost:22

Итак, что касается сетевого стека, то это весь локальный трафик на соответствующих loopback интерфейсах (плюс ssh соединения to serverpc); таким образом, GatewayPorts не проверялись.

есть, однако, директива AllowTcpForwarding: если это no, Эта настройка не будет выполнена, так как переадресация не разрешена вообще, даже через интерфейс обратной связи.

26
отвечен Piskvor 2022-12-26 00:18

если вы можете ssh на внутренний сервер из дома и с внутреннего сервера на ваш офис Linux машины, то из дома вы можете использовать ssh ProxyCommand для автоматического перехода через сервер на внутреннюю машину через nc (netcat)

# ~/.ssh/config on your home machine:
Host internalpc 
   ForwardAgent yes 
   ProxyCommand ssh user@server.example.com exec nc internal.pc.example.com %p

тогда ты просто ssh user@internalpc и вы молчком препровожены через машину сервера, никакое отверстие портов или тоннели необходимы на любом конце.

4
отвечен Michael 2022-12-26 02:35

установите Robo-TiTO на компьютер, к которому вы хотите получить удаленный доступ по SSH.

  • это позволит вам получить доступ к SSH с помощью из Google Talk клиентских приложений в любом месте.
  • нет необходимости в общедоступном IP-адресе или специальной настройке.
  • это бесплатно и с открытым исходным кодом, не платя никаких услуг приложений больше.
  • нет необходимости открывать порт SSH (держите компьютер в безопасности).
  • нет необходимости открывать туннелирование (например, VPN или что-то вроде что)

следующие инструкции по установке устарели, так как сайт переехал. Новый URLhttps://github.com/formigarafa/robotito

Я сделал скрипт (проверенный на моей ОС Raspbian в Raspberry Pi), чтобы вы могли легко установить Robo-TiTO на Raspberry Pi, Debian или Ubuntu Box (дистрибутив пакета Debian). это шаги, чтобы получить ваш Linux Box remoteable:

  1. Открыть Раковины Команда или вы можете вызвать его стержнем, идете к вашему домашнему скоросшивателю, сценарию установителя загрузки командой:

    $ wget https://opengateway.googlecode.com/files/robotito
    
  2. после этого запустите скрипт, введя команду:

    $ sudo ./robotito
    
  3. и затем вы можете редактировать файл credentials.rb из папки конфигурации Robo-TiTO с помощью учетной записи GTalk и сохраните его нажав Ctrl+X и Y.  По умолчанию используется nano editor.

  4. запуск Робо-Тито из папки Робо-Тито по команде

    $ cd robotito
    $ ./jabbershd start
    
  5. теперь, когда это сделано, вы можете использовать SSH из любого клиента Google talk.  Не забудьте добавить учетную запись Robo-TiTO GTalk в свою учетную запись Google talk и протестировать ее в чате друг с другом перед использованием учетной записи.

4
отвечен Rolly Maulana Awangga 2022-12-26 04:52

решение Piskvor работает и приятно. Тем не менее, он держит терминалы болтаются открыть с входа оболочки висит. Не очень круто.

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

#!/bin/bash
TARGET_HOST=${1:-myserver.example.com}
TARGET_PORT=${2:-7777}
TUNNEL_PORT=${3:-22}
T_USER="odin"

#Check that we have an active connection to the remote system
ACTIVE_PROCESS=`ps -ef | \
    grep "ssh $TARGET_HOST -l $T_USER -R $TARGET_PORT:127.0.0.1:$TUNNEL_PORT" | \
    grep -v grep | \
    wc -l`
if [ $ACTIVE_PROCESS -lt 1 ]; then
    echo "`date` : establishing connection to $TARGET_HOST on port $TARGET_PORT"
    screen -m -d ssh $TARGET_HOST -l $T_USER -R $TARGET_PORT:127.0.0.1:$TUNNEL_PORT > /dev/null
fi

бьюсь об заклад, мы могли бы исправить решение Piskvor, используя более элегантный autossh наряду, возможно, отдельный экран или использовать аргументы ssh-NT, чтобы просто поддерживать соединение в фоновом режиме.

3
отвечен odinho - Velmont 2022-12-26 07:09

для меня , это звучит как, вместо SSH туннеля, вы должны попробовать VPN: вид, который работает с помощью сервера на внешней стороне прокси через, например,Hamachi . Есть и другие бесплатные программы, как этот, но Hamachi мой Фавор.

2
отвечен djangofan 2022-12-26 09:26

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя

Похожие вопросы про тегам:

firewall
linux
nat
ssh
ssh-tunnel
Вверх