ssh через роутер без переадресации портов


9

У меня есть сервер Linux, и я хочу разместить его в домашней сети за маршрутизатором. Мне нужно когда-нибудь подключиться к этому серверу по ssh, но я не хочу настраивать переадресацию портов, потому что у меня нет доступа к маршрутизатору, и я также не знаю ip маршрутизатора.

Что я могу сделать, так это поместить некоторую программу на сервер linux, поэтому, когда она подключена к Интернету, она будет постоянно отправлять данные на мой другой сервер онлайн, чтобы я знал ее IP-адрес. Но есть ли способ ssh к серверу за роутером извне? что-то вроде NAT или сокета, который поддерживает сетевое соединение?

большое спасибо

Ответы:


21

То, что вы хотели бы сделать, это ssh ОТ вашего "сервера linux" ДО чего-то внешнего, такого как "my_other_server" или что-то еще, к которому оба сервера могут добраться.

Вы бы использовали пересылку удаленного порта SSH.
[user@linux_server]$ ssh -R8022:localhost:22 my_other_server.com
Объяснение: Подключитесь к my_other_server и откройте там порт 8022, который переадресует мне обратно на порт 22.

С my_other_server.com вы сможете подключиться по ssh к localhost через порт 8022, и ваш трафик будет перенаправлен на linux_server с использованием туннеля linux_server -> my_other_server. [user@linux_server]$ ssh -p8022 localhost
Объяснение: Подключитесь к себе через порт 8022, который перенаправляется на linux_server.

Если у вас есть проблемы с выпадением исходного туннеля linux_server -> my_other_server, вы можете создать скрипт, чтобы он оставался открытым, настроить параметры keepalive или использовать autossh.


Спасибо, это прекрасно работает! Я хочу использовать скрипт, чтобы держать его открытым. Другой вопрос: что если у меня около 1000 таких «linux-серверов» и только один «my_other_server», могу ли я использовать ssh для любого из них таким образом? Я предполагаю, что им всем нужен другой порт, и есть ли лучший способ сделать это?
Цзечао Ли

Ну, это зависит. Теперь, когда вы работаете на linux_server, можете ли вы просто перейти от ssh к linux_server2 и linux_server3? Это было бы самым простым. Так что да, вы могли бы сделать это несколько раз, вместо того, чтобы использовать 8022, вы бы использовали 8023, 8024. Если вы идете по этому пути, создайте файл ~ / .ssh / config на «my_other_server», который содержит все номера портов, поэтому вы просто ssh [псевдоним] вместо ssh [порт] localhost. Это станет громоздким.
MattPark

Можно ли настроить это только с двумя машинами? Подключите B к A, A обратно к B через себя?
adamyonk

1
Я только что это сделал. Могу подтвердить, что это работает. \ o /
adamyonk

Да, чувак, очевидно, вы поняли это. Вы можете использовать что-то вроде, autosshчтобы держать это открытым.
MattPark

3

Вы можете использовать своего рода VPN, чтобы заставить это работать, но это потребовало бы, чтобы у вас был сервер, к которому недоступный сервер мог бы получить доступ. Затем вы можете настроить OpenVPN на сервере, ПК и сервере с брандмауэром, включить client-to-client, и все готово. http://openvpn.net/howto.html


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

Именно так. Вы настраиваете сервер как «сервер», а затем два клиента, которых вы хотите соединить вместе как «клиенты» в конфигурации. Обратный SSH, отмеченный выше, кажется вам более легким.
Натан С,

2

Этот ответ основан на принятом, но добавляет детали, которые позволили мне сделать это. Я прошу прощения за объяснение пешехода, так как это совсем не моя экспертиза.

Предположим, у вас есть два компьютера, Aи B. Вы хотите перейти sshот Aк B, и вы не можете выполнять переадресацию портов в подключенных к ним маршрутизаторах.

Как говорится в принятом ответе, для этого вам нужен сервер S: на компьютере Bвы будете разрешать sshисходящие соединения S; и с компьютера A, вы получите доступ к этому туннелю, Sчтобы достичь B.

Но как вы получаете этот сервер S? Я нашел serveo(ссылка: https://serveo.net/ ). Это очень простое использование. Вам не нужно ничего устанавливать или регистрироваться, и это бесплатно. Согласно веб-сайту, следующие шаги:

  1. Подумайте о псевдониме для компьютера B. Например, computer_B_alias.

  2. В компьютере Bвыполните ssh -R computer_B_alias:22:localhost:22 serveo.net.

  3. Теперь вы можете получить доступ к компьютеру Bс компьютера A, выполнив следующие действия на компьютере A:, ssh -J serveo.net user@computer_B_aliasгде вы должны заменить userимя пользователя на компьютере B.

PS: Конечно, вы делаете пункт 2 автоматической задачей при запуске компьютера B.

PSS: прежде чем попробовать это, убедитесь, что sshустановлено на обоих компьютерах. Для Ubuntu, sudo apt-get install sshсделал бы работу.


0

Долго отвечать. Надеюсь, это может помочь тому, кто ищет то же самое сейчас.

Если вы хотите получить доступ к серверу за NAT и не хотите писать код, вы, вероятно, можете воспользоваться инструментом ниже и использовать все, что вам подходит.

Оба вышеперечисленных инструмента предполагают, что у вас есть доступ к машине linux для установки их клиента. Некоторые из их преимуществ:

  • Оба дают вам доступ к терминалу с помощью веб-интерфейса
  • Вам не нужен собственный промежуточный обратный хост ssh.
  • Очень прост в установке
  • Оба с открытым исходным кодом

Лично я предпочитаю tmate больше, так как вы можете разместить сервер tmate на своем промежуточном сервере (для обратного ssh), в то время как телеконсоль может подключаться только к своим собственным серверам для обратного ssh.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.