Доступ SSH к офису размещает позади маршрутизатора NAT

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

Следующая установка:

  • Office ПК (Linux, корневой доступ) позади NAT (IP, не общедоступный), но полный доступ в Интернет.
  • Сервер ПК (Linux, никакой корневой доступ) статический и общедоступный IP и полный доступ в Интернет.
  • Домашний ПК (Linux, корневой доступ) позади NAT (IP, не общедоступный), но полный доступ в Интернет.

Возможные соединения: Office ПК-> Сервер <-Домашний ПК

Не возможный: Office ПК <-X-сервер-X-> Домашний ПК

Ни Домашний ПК, ни Сервер не могут инициировать доступ к Office ПК. Но и Office ПК и Домашний ПК могут инициировать соединения с Сервером.

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

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

0) На Сервере я запускаю программу пространства пользователя, которая слушает на 2 портах (1 поступление, 1 выход)

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

2) Из дома я соединяюсь с входящим портом Сервера.

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

Каково самое быстрое и самое чистое решение решить это?

Frank

33
задан 29.04.2011, 18:52

3 ответа

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 должен сделать). Теперь соединение с 12 345 на сервере должно соединить Вас для портирования 22 на officepc.

На шаге 2 передайте порт 23456 от Вашей домашней машины до 12 345 на сервере (откуда, это передается officepc:22, как настроено на шаге 1),

На шаге 3 Вы соединяетесь с локальным портом 23456 с Вашим офисом вход в систему ПК. Это передается шагом 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

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

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

Протесты:

  • при использовании autossh и недавний ssh, можно хотеть использовать ssh's ServerAliveInterval и ServerAliveCountMax для того, чтобы продолжить туннель. Autossh имеет встроенную проверку, но по-видимому он имеет некоторые проблемы о Fedora. -M0 отключает это, и -oServerAliveInterval=20 -oServerAliveCountMax=3 проверки, если соединение закончилось - пробуют каждые 20 секунд, если оно перестало работать 3x подряд, ssh остановок (и autossh делает новый):

    autossh -M0 -R 12345:localhost:22 -oServerAliveInterval=20 -oServerAliveCountMax=3 notroot@serverpc
    
    autossh -M0 -L 23456:localhost:12345 -oServerAliveInterval=20 -oServerAliveCountMax=3 notroot@serverpc
    
  • могло бы быть полезно перезапустить туннель ssh, если вперед перестал работать, с помощью -oExitOnForwardFailure=yes - если порт уже связывается, Вы могли бы получить рабочее соединение SSH, но никакой переданный туннель.

  • использование ~/.ssh/config для опций (и порты) желательно, еще командные строки становятся слишком подробными. Например:

    Host fwdserverpc
        Hostname serverpc
        User notroot
        ServerAliveInterval 20
        ServerAliveCountMax 3
        ExitOnForwardFailure yes
        LocalForward 23456 localhost:12345
    

Затем можно использовать просто псевдоним сервера:

    autossh -M0 fwdserverpc
31
ответ дан 07.12.2019, 09:08

Если Вы можете 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
ответ дан 07.12.2019, 09:08

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

2
ответ дан 07.12.2019, 09:08

Теги

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