Как я могу настроить так, чтобы я всегда мог подключиться к моей системе через Интернет по динамическому IP?

11

По сути, я хочу иметь возможность делать что-то вроде teamviewer, где независимо от конфигурации сети, при условии, что и мой ssh-сервер (машина A), и ssh-клиент (машина B) имеют доступ в Интернет (и какой-то третий сервер, машина C). ), Я могу получить доступ - причина этого в том, что я хочу иметь возможность перемещать машину A, подключать ее к источнику питания, автоматически подключать ее к одной из нескольких предварительно настроенных сетей Wi-Fi (каждая уникальная / другая) без настройки переадресации портов или аналогичных параметров в сетях и возможности входа в нее через Интернет с компьютера B

Как я могу сделать это? Я не возражаю против установки чего-либо на сервере со статическим IP-адресом для помощи при рукопожатии, но я также не против стороннего сервера, если что-то уже существует (как это делает, скажем, teamviewer)

отредактируйте для ясности: у меня есть 3 машины, AB и C

A - это безголовый Raspberry Pi, который будет включаться / выключаться в случайных местах, подключаться к предварительно настроенной сети Wi-Fi

B - это машина с соответствующим монитором, клавиатурой и т. Д., К которой я хочу подключиться

C - это арендованный сервер AWS, который у меня есть со статическим IP-адресом, может надежно подключаться по SSH от B и может устанавливать все необходимое, чтобы помочь B подключиться к A

user2813274
источник
Можете ли вы ssh к 3-й машине?
Anthon
@Anthon Я так думаю, я переименовал их в AB и C и добавил описания для них, надеюсь, это прояснит
ситуацию
кашель no-ip.com кашель
Джошуа
1
no-ip.com не поможет, если брандмауэр по периметру в вашем регионе не разрешает обратный трафик!
Бобстро
Я использовал sshтуннели, очень кратко. Я никогда не мог заставить их не спать, хотя, даже с autossh; если восходящая линия связи по какой-либо причине прервалась, их всегда нужно будет перезапускать вручную. В конце концов я установил для себя небольшой VPN с OpenVPN, и он отлично справился со своей задачей.
Blacklight Shining

Ответы:

11

Поскольку у вас есть компьютер C в Интернете, создайте там специальную учетную запись sesame, и на A вы создадите учетную запись с открытым / закрытым ключом, с которого вы скопировали открытый ключ в sesameучетную запись на C.

Теперь вы можете войти в систему от А до С, но вместо этого вы делаете:

ssh -N -R 19930:localhost:22 sesame@yourserverC

(возможно, вы захотите объединить это с оператором сна или, например, с 10 секундами и обернуть это в бесконечный цикл, чтобы восстановить соединение, если WiFi отключился из-за его разрыва)

С компьютера B обычно входите в систему под любой учетной записью, которая у вас есть на C (может быть, но не обязательно sesame, что я использую другие учетные записи). И как только вы попали на C, войдите в A, используя:

ssh localhost -p 19930

Конечно, вы можете использовать номер, отличный от 19930.

Можно запустить ssh -N -R ...из, /etc/rc.localесли ваш закрытый ключ на A не защищен паролем. В этом случае убедитесь, что вы создали sesameотдельную учетную запись с ограниченными функциональными возможностями, поэтому, когда ваша машина A будет взломана / украдена, риск для вашего сервера C будет ограничен. Именно поэтому я рекомендую использовать отдельную учетную запись, чтобы перейти от B к C.

Вы можете фактически установить оболочку входа в систему для sesameв /etc/passwdк /bin/false, так что вы можете больше не использовать учетную запись для входа в систему .

Энтон
источник
Это решение отличается от использования TeamViewer, в котором сервер используется для открытия портов, которые затем перенаправляются для прямой связи. Точно так же, как программы, такие как BitTorrent, обмениваются данными напрямую после поиска машин для загрузки (без необходимости заранее открывать порты).
Anthon
Таким образом, основное отличие состоит в том, что таким образом ВСЕ трафик проходит через сервер C, а C используется только для установления соединения, а затем не используется для остальной части соединения - я согласен с этим. Что касается безопасности, у вас есть хорошая точка зрения. Должен ли я что-то сделать, в частности, чтобы sesame не смог ничего сделать на C, кроме минимума входа в систему? (Система RHEL)
user2813274
1
@ user2813274 Действительно, весь трафик проходит через C в этом сценарии (что исключило бы полезность BitTorrent). Я не уверен, насколько далеко вы можете ограничить sesameучетную запись на C, возможно, вы можете заставить ее работать /bin/falseкак оболочку входа (так как ssh никогда не входит в систему), или иначе ограничить ее, добавив command=параметр в~/.ssh/authorized_keys
Anthon
@ user2813274 Если вы сами не пробовали: если у вас есть специальная учетная запись для настройки обратного прокси-сервера, вы можете отключить вход в эту учетную запись, изменив оболочку входа на /bin/false.
Антон
1
@ user2813274 Да, я попробовал это, и это позволило бы мне настроить обратный туннель (вам нужна другая учетная запись, чтобы добраться до сервера C, чтобы сделать это, ssh localhost -p portnumконечно)
Anthon
7

Установите туннель IPv6 (например, Sixxs ) на Raspberry Pi. Теперь у вас будет постоянный статический IPv6-адрес, который будет подключаться к сети всякий раз, когда ваш Pi подключен к сети. Убедитесь, что вы обеспечили безопасность своего Pi, так как он сейчас подключен к миру.

Если ваш B подключен к сети IPv6, подключите его напрямую к Pi. Если B не подключен к сети IPv6, используйте C в качестве сервера перехода, где вы подключаетесь через IPv4 к C, а затем через ssh через IPv6 от C к вашему Pi.

garethTheRed
источник
Мне это нравится, поскольку он даже не требует C, если сети поддерживают IPV6, но мне придется попробовать его - какие-либо проблемы, связанные с брандмауэрами, блокирующими это по умолчанию?
user2813274
1
Sixxs предоставляют более одного протокола для туннелирования IPv6. Если вы используете Anything In Anything (AYIYA), вам потребуется TCP-порт 3874 и UDP-порт 5072, открытый от Pi до Интернета. В домашних сетях это должно быть хорошо; корпоративные или университетские сети могут отличаться.
garethTheRed
Установка туннеля казалась выполнимой, но, похоже, мне нужно было бы зарегистрироваться в службе Sixxs, подождать, пока они вернутся ко мне с IP-адресом и т. Д. - уже не так просто - все еще потенциально хорошее решение, но я не думай, что это путь, по которому я сейчас пойду.
user2813274
1

Также взгляните на это:

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

Однако он не обеспечивает автоматическое соединение от А до С, его необходимо инициировать вручную. Может быть, вы можете немного изменить решение, чтобы оно выполняло именно то, что вы хотите.

dashohoxha
источник
0

Возможно, вам нужно использовать не ssh или концепцию туннелирования. Я предлагаю использовать концепцию обмена сообщениями, например, WhatsApp или Telegram. Но я думаю, если вы хотите использовать что-то вроде vim, это не так хорошо, как ssh.

У Telegram есть клиент telegram-cli, который вы можете изменить, чтобы принять и выполнить определенную команду и реализовать ее в распа ..

Если вы используете Telegram, вы можете упростить свою сеть и, по крайней мере, уменьшить количество машин C, чтобы использовать Hub, поскольку сервер C заменен сервером сообщений Telegram. Telegram уже имеет клиент для iphone и android, поэтому я не думаю, что вам нужен ваш B Машина тоже, вы можете установить клиент Telegram для конкретной ОС, если вы хотите .. безопасность? телеграмма сообщение зашифровано .. Если кто-то хочет сделать ваш распи? сначала они будут делать сервер телеграмм ..

Таким образом, если ваш raspi может подключаться к серверу телеграмм (просто ваше raspi подключается к Интернету), даже если raspi находится за брандмауэром / прокси / частным IP / динамическим IP, вы всегда можете сделать это удаленно.

С помощью этой концепции вы можете сделать пульт в любом месте и в любое время ..

Викаксоно Трихатмая
источник
Wat. Это небезопасно, вы доверяете некоторому приложению случайных сообщений, вы говорите, что OP должен изменить это приложение случайных сообщений, чтобы оно заработало. Это даже не понимание того, что приложение случайных сообщений полностью порвется с чем-то вроде vim и будет иметь ужасную задержку.
Еще один пользователь
Ну, если вы используете это просто для отправки команды, я думаю, что это нормально .. если вы используете это для чего-то вроде vim, я не думаю, что это хорошо .. хороший совет .. я отредактирую свой ответ
Wicaksono Trihatmaja
Я не думаю, что это то, что я хочу, я хочу полный доступ к оболочке, на самом деле не что иное, как это - в отношении дозирования Pi. Я не очень обеспокоен, прежде всего, потому что я должен сделать специальную настройку для даже подключиться к нему сам, во-вторых, потому что его подключения будут прерывистыми и все равно будут случайным образом меняться
user2813274
0

Я думаю, что вы должны взглянуть на переадресацию порта SSH. Короче говоря, вы сначала запускаете ssh из A в C, используя приведенный ниже синтаксис, а затем используете этот порт для туннелирования обратно из C в A. При этом вы не попадете в домашний брандмауэр A, потому что R-Pi уже имеет туннель

ssh -R 2210: localhost: 22 myCoolAwsSite.com

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

Прыгающий кролик
источник
Э-э ... как это отличается от ответа Энтона?
user2813274