SSH к домашним компьютерам

21

У меня дома есть несколько машин, к которым я хотел бы получить доступ из школы, используя SSH и VNC. Для этого я дал им статические IP-адреса:

  • 192.168.1.50: Windows
  • 192.168.1.51: Ubuntu
  • 192.168.1.52: Raspberry Pi / Raspbian

Я знаю, что SSH использует порт 22, поэтому я могу переадресовать этот порт на 192.168.1.51:22 на моем маршрутизаторе, но таким образом я не смогу подключиться к SSH к Raspberry Pi. Есть ли способ, которым я мог бы настроить это, чтобы иметь доступ к обеим машинам?

acourchesne
источник
10
Вы можете использовать разные порты SSH. Я не знаю, насколько это сложно в Windows, но в Linux очень легко изменить его на нестандартный порт . Таким образом, вы можете перенаправить порт 22 на машину-победитель (без изменений), а другой порт (нестандартный) на RaspberryPi.
Бистоко
2
@Melebius, он старый, но все еще хорошо читается, ключевая часть для меня - «Основной аргумент, который я пытался выдвинуть: не делайте безопасность сквозь мрак», речь идет о необходимости и ее решении легко , Тем не менее, возможно, ему не нужно менять порты Ubuntu или Pi, просто перенаправьте разные порты маршрутизатора на каждый 22 машинный порт.
Бистоко
1
@bistoco Согласен. Тем не менее, OP собирается открыть доступ SSH к внешнему миру, и в таком случае всегда следует учитывать безопасность. Кроме того, установка разных портов на компьютерах не решает проблему OP, так как ему (ей) нужно включить разные порты (= переадресация портов) на своем маршрутизаторе.
Мелебиус
6
@Melebius Не по теме, но я никогда не использую 22, просто потому, что автоматизированные боты не будут стучать на мой сервер 24/7. Это не защитит настоящего злоумышленника (или хорошо написанный сценарий), но уменьшит количество записей в моем журнале.
Каз Вулф
4
Вы можете просто подключиться к одному из них (общедоступному), а затем подключиться к нему, используя локальный адрес, к другим.
tkausl

Ответы:

32

Если у вас есть IPv6, вам даже не нужна переадресация портов! Просто получите свой постоянный IPv6-адрес (на основе вашего MAC-адреса, так что он гарантированно останется прежним, если ваш провайдер не знает, как работает IPv6) и используйте его для туннелирования. Так как ваш IPv6-адрес является общедоступным и позволяет миру чтобы получить доступ к вам без необходимости проходить через локальный NAT, вам не нужно беспокоиться о включении переадресации портов в любом месте. Это будет "просто работать".

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

Тем не менее, если вы похожи на большинство людей и у вас есть только IPv4, есть еще способ! Некоторые маршрутизаторы позволяют перенаправлять определенные исходные порты на определенные порты назначения, например, так:

введите описание изображения здесь

В этом примере порт 22передаются непосредственно к моей машине sheepdog, в то время как порт 292перенаправляются на порт 22на coyote.

Наконец, если ваш маршрутизатор не имеет этой функции, вы можете просто изменить порт, так как SSH не ограничивается только работой на порту 22. Вы можете установить его на что угодно (это не используется).

В /etc/ssh/sshd_config(вам нужен root для редактирования, поэтому sudo nano /etc/ssh/sshd_config) есть строка в верхней части файла:

# What ports, IPs and protocols we listen for
Port 22

Измените это на то, что вы хотите:

# What ports, IPs and protocols we listen for
Port 2992

Перезапустите сервер SSH sudo service ssh restartи перенаправьте порт на маршрутизаторе.


Тем не менее, для этого случая использования я бы подумал, правильно ли делать SSH-туннели. Возможно, вам следует настроить выделенный VPN-сервер в вашей домашней сети? Это позволит вам получить доступ ко всей домашней сети из любого места, при условии, что у вас есть надлежащие учетные данные безопасности, необходимые для VPN. Кроме того, с VPN-трафиком немного меньше накладных расходов; обычно вам нужно только перенаправить один порт на одну машину.

Каз Вулф
источник
2
Вы можете использовать туннельный брокер IPv6 для получения адресов IPv6, если ваш провайдер не поддерживает IPv6.
Андре Бори
1
Под этой функцией вы подразумеваете переадресацию порта на другой порт?
Лю Сиюань,
@LiuSiyuan Да. Я знаю, что это странно, но я видел некоторые маршрутизаторы, которые не могут справиться с этим. Мой старый маршрутизатор, предоставленный провайдером, даже не смог попробовать.
Каз Вулф
Я не совсем понял ту часть IPv6. Должны ли мы предполагать, что все интернет-провайдеры, предоставляющие IPv6-адреса, дают (непротиворечиво) разные для каждого устройства в сети?
jjmontes
1
@jjmontes Если ваш провайдер компетентен, вы получите полный / 64 (или, возможно, меньше, но все же достаточно, чтобы назначить по одному на каждую машину)
Kaz Wolfe
19

Простой способ решить эту проблему - сопоставить разные порты от вашего маршрутизатора до порта 22 вашей машины. Например, вы можете иметь следующие настройки на вашем маршрутизаторе (при условии, что ваш маршрутизатор имеет IP 1.2.3.4)

1. 1.2.3.4:22   --> ubuntu:22
2. 1.2.3.4:8888 --> raspberrypi:22
3. 1.2.3.4:9999 --> windows:22 (or some other port)

Затем, когда вы используете ssh, укажите порт, который вы хотите использовать, набрав

$ ssh <username>@<router ip> -p <your port>

Теперь вы сможете подключиться ко всем своим машинам.

Лю Сиюань
источник
11

Если вы знаете, что один из ваших компьютеров всегда включен, у вас также есть возможность использовать его в качестве ssh-прокси.

скажем, у вас есть настройка доменного имени для вашего внешнего IP-адреса (например, myhome.dyndns.com или что-то еще), что вы будете делать, это подключиться к одному компьютеру (скажем, raspberry всегда включен, и вы перенаправите порт с вашего маршрутизатора на это), ваши соединения ssh будут:

школа -> (роутер, здесь прозрачный) -> малина -> убунту или windows

теперь, в вашем ~ / .ssh / config в школе, добавьте строки:

Host ubuntu 192.168.1.51
    Hostname ubuntu (change to match your setup)
    User myraspberryuser  (change it ;-) )
    IdentityFile ~/.ssh/id_rsa   (The path to your private key, on the school computer, better on an usb key if public computer)
    ForwardAgent yes
    RequestTTY yes
    ProxyCommand ssh -W %h:%p %r@myhome.dyndns.com

Для подключения затем:

ssh-add ~/.ssh/id_rsa # to do only once per session
ssh myuser@ubuntu (login without password)

Теперь, если вы введете ssh ubuntu, компьютер сначала подключится к raspberry, а затем начнет сеанс ssh с компьютером ubuntu.

Я рекомендую вам, независимо от порта, который вы хотите перенаправить, отключить пароль в /etc/sshd.conf, чтобы разрешить вход только через ключ ssh. Таким образом, если вы настроите ключ на Rasberry и Ubuntu с параметром «ForwardAgent», вам нужно будет только разблокировать ключ, а затем пароль для подключения не требуется. Таким образом, даже если боты пытаются войти на ваш ssh, они никогда не смогут войти, так как вы запрещаете вход с паролем.

Бонус, это работает также с scp, scp foo ubuntu: / tmp / foo будет использовать ту же настройку без дополнительных параметров. Бонус 2, эта настройка не требует каких-либо изменений дома, если завтра вы и другой компьютер, просто скопируйте / вставьте код в вашу конфигурацию ssh, измените хост и ip, вот и все, не нужно открывать новый порт на маршрутизаторе

potens
источник
Есть ли недостаток в использовании машины в качестве промежуточного звена для SSH? Допустим, я использую свой Raspberry Pi для подключения к другим компьютерам в сети, повлияет ли его производительность на задачу?
Acourchesne
1
Да, малина может ограничить пропускную способность, поскольку она должна служить сервером и клиентом. Если вы достаточно уверены в себе, вы можете достичь того же результата с помощью ssh-туннелей. Таким образом, малина действует только как сервер, но ваш школьный компьютер должен работать с двумя клиентами.
Потенс
4

Я делаю это - я оставляю rpi включенным и все время подключаюсь непосредственно к маршрутизатору (поскольку он самый дешевый в работе) и просто подключаюсь к нему по ssh, а затем отскакиваю от него к остальным - он никогда не требует особого внимания.

Также возможно использовать VNC / RDP с графическим интерфейсом через канал ssh, что-то интересное или переадресовать порт, который позволяет вам переходить на сервер на настольном компьютере, сохраняя его конфиденциальность.

Причина, по которой я добавил этот ответ, состоит в том, чтобы дать вам несколько предложений.

1) Используйте порт, отличный от 22. Вы можете оставить его на ПИ 22, но измените входящий порт на маршрутизаторе на более чем 10000 ... В противном случае вы будете получать от десятков до сотен атак в день - и как только вы Известно, что вы работаете с SSH-хостом, как только вы обнаружите эксплойт.

2) Используйте сертификаты вместо имени пользователя / пароля - полностью отключите логин / пароль.

3) Если ваш ip-адрес может измениться, используйте службу типа dyndns, чтобы получить DNS-хост (я использую noip, он бесплатный, и они поддерживают клиент Linux для обновления вашего ip-адреса - я думаю, вы можете просто apt-get on пи сейчас). Есть еще несколько компаний, которые предлагают это бесплатно.

4) Держите ваш пи (или что бы вы ни делали ssh) в актуальном состоянии (sudo apt-get update). Я полагаю, что ssh довольно хорошо проверен, но я также верил, что из https ...

Билл К
источник
3

Сомневался, подойдет ли это лучше как комментарий, а не как ответ, но я все равно опубликую его здесь.

Некоторые вещи, о которых вы должны подумать, прежде чем делать это:

  1. Вы откроете свои системы для Интернета, так что вам лучше убедиться, что они исправлены, а ваша конфигурация безопасности усилена (например, не разрешайте вход в систему root и используйте публичные ключи вместо паролей).
  2. Ваш публичный IP-адрес (см. Whatismyip.com) может меняться, в зависимости от вашего интернет-провайдера, он может меняться ежедневно или почти никогда. Это означает, что вам нужно найти способ выяснить ваш публичный IP. Вы можете ежедневно посещать whatismyip.com из домашней сети, создавать какое-либо приложение или использовать динамический DNS (DynDNS), чтобы сопоставить изменяющийся публичный IP-адрес со статическим доменным именем.
  3. Если вы хотите использовать IPv6 для обхода всех проблем, связанных с IPv4 и NAT, вам понадобятся ваши устройства, маршрутизатор, ISP, ... для общения по IPv6. Существуют некоторые службы, которые могут помочь вам, когда ваш провайдер не поддерживает IPv6, но ваши устройства и маршрутизатор все равно должны будут об этом говорить.
  4. Чем больше портов и устройств вы открываете в Интернете, тем больше становится ваша зона атаки. Я бы посоветовал использовать в вашей сети панель переключения и разрешить SSH доступ к этому устройству только через Интернет. Прыгун-бокс в основном представляет собой одну очень защищенную систему, которую вы перенаправляете через маршрутизатор в Интернет. Подключившись к этому устройству, вы сможете подключиться через SSH к своей внутренней сети. Прыжок с парашютом мог быть в основном другим Raspberry Pi. Я бы предложил использовать выделенное устройство, чтобы максимально усилить его защиту (среди прочего, запустив как можно меньше служб).
  5. (4a) Вместо того, чтобы использовать переходник для SSH, вы также можете настроить VPN-сервер, который позволит вам просматривать домашнюю сеть со своего устройства в школе (если разрешены исходящие VPN-подключения).
BlueCacti
источник