Доступ к нескольким удаленным серверам за NAT [закрыто]

У меня есть ситуация, когда наши серверы Ubuntu были развернуты в нескольких удаленных местах. Эти серверы находились за NAT операторского уровня, а также за внутренним NAT. Теперь из центра я хочу получить к нему доступ в любое время, но я также нахожусь за NAT, похожим на эти серверы.

enter image description here

Когда эти серверы подключены к сети, я хочу получить к ним доступ (через SSH или туннель SSH). Я знаю, что не могу получить доступ, как к серверам с общедоступным IP-адресом, но, возможно, каким-то образом я смогу получить к нему доступ через принцип работы TeamViewer. Для этого метода, если мне нужен еще один общедоступный сервер, я могу управлять им в Google Compute Engine.

2
задан 12 February 2018 в 09:53

1 ответ

Если у нас есть доступ к серверу с общедоступным IP-адресом, мы можем использовать его в качестве Шлюза. Мы могли достигнуть этого через Обратные соединения Перенаправления портов SSH. Скажем, у нас есть три экземпляра:

  • Общедоступный Сервер: Здесь у нас есть операционный сервер SSH и общедоступный IP-адрес (и/или доменное имя). Мы можем соединиться с этим сервером с парой общедоступной с закрытым ключом, которая не является паролем, защищенным (ссылка).

  • Частный Сервер: Здесь у нас есть операционный сервер SSH. Это находится позади Брандмауэра (NAT, ISP, и т.д.) и не имеет общедоступного IP-адреса, но мы можем установить соединение SSH с него на Общедоступный Сервер, таким образом, здесь у нас есть также клиент SSH.

  • Клиентская Машина: Здесь у нас (нужно к) есть только клиент SSH. Мы можем установить соединение SSH к Общедоступному Серверу. Мы хотим установить соединение SSH с этого экземпляра на Частный Сервер.


Основной уровень

На основном уровне мы могли применить по крайней мере два сценария.

Сценарий 1. Где мы не хотим открывать дополнительные порты в Брандмауэре Общедоступного Сервера:

  1. Установите соединение SSH с Перенаправлением портов с Частного Сервера на Общедоступный Сервер.
  2. Установите соединение SSH с Перенаправлением портов с Клиентской Машины на Общедоступный Сервер.
  3. Соединитесь с Частным Сервером от Клиентской Машины до себя.

Сценарий 2. Где мы склонны открыть дополнительный порт в Брандмауэре Общедоступного Сервера:

  1. Установите соединение SSH с Перенаправлением портов с Частного Сервера на Общедоступный Сервер.
  2. Соединитесь с частным сервером с клиентской машины на общедоступный сервер.

Основное преимущество Сценария 1 состоит в том, что мы не должны думать, насколько безопасный наш Частный Сервер. Основное преимущество Сценария 2 состоит в том, что мы ommit один шаг, но в этом случае мы должны думать о безопасности Частного Сервера, потому что это становится достоянием общественности доступное через переданный порт. Кроме того, эти сценарии могли быть применены к другому порту и сервисам, не только SSH, например, к HTTP.


Как применить Сценарий 1 в рамках Ubuntu

Установите соединение SSH с Перенаправлением портов с Частного Сервера на Общедоступный Сервер

Мы могли сделать это командой:

ssh user-of-the-public-server@public-server -p 22 -R 2222:127.0.0.1:22 -i ~/.ssh/pass-less/id_rsa
  • -p 22 обеспечивает порт SSH Общедоступного Сервера (это не обязательно).

  • -i ~/.ssh/pass-less/id_rsa обеспечивает файл аутентификационного ключа.

  • -R 2222:127.0.0.1:22 средства тот порт 2222 на (удаленном) Общедоступном Сервере будет передан порту SSH (локального) Частного Сервера, который, в этом случае, является 22.

Мы можем отодвинуть это соединение на задний план путем добавления опций -fTN (Клиента OpenSSH – ссылка). Мы могли использовать также инструмент autossh чтобы быть уверенным, соединение будет поддержано в течение длительного периода времени (ссылка):

autossh user-of-the-public-server@public-server -p 22 -fTN -R 2222:127.0.0.1:22 -i ~/.ssh/pass-less/id_rsa

Мы можем упростить вышеупомянутую команду реализацией следующих строк в нашем ~/.ssh/config файл:

Host public-server-reverse
    HostName 100.100.100.100  # this is the IP address or the domain name of the Public Server
    IdentityFile ~/.ssh/pass-less/id_rsa
    User user-of-the-public-server
    Port 22
    RemoteForward 2222 localhost:22

В этом случае вышеупомянутая команда станет:

autossh public-server-reverse -fTN

Мы можем легко автоматизировать эту задачу на системной перезагрузке следующим заданием Крона (или мы могли создать обслуживание, которое должно быть лучшим подходом):

@reboot sleep 45 && autossh public-server-reverse -fTN

После того как это соединение устанавливается, мы можем соединиться с Частным Сервером с Общедоступного Сервера, через обратный туннель, командой:

ssh user-of-the-private-server@localhost -p 2222    # provide an additional authentication data (for the Private Server) if it is needed…


Установите соединение SSH с Перенаправлением портов с Клиентской Машины на Общедоступный Сервер

Мы могли сделать это командой:

ssh user-of-the-public-server@public-server -p 22 -fTN -L 1111:127.0.0.1:2222 -i ~/.ssh/pass-less/id_rsa
  • -L 1111:127.0.0.1:2222 средства тот порт 1111 на (локальном) Клиенте Машина будет передана порту (удаленного) Общедоступного Сервера 2222 (который передается порту SSH Частного Сервера). Обратите внимание, что мы могли использовать -L 2222:127.0.0.1:2222.

  • -fTN эти опции отодвинут соединение на задний план, как оно описано выше.

  • Мы можем реализовать также autossh и ~/.ssh/config файл, с директивой RemoteForward или LocalForward.


Соединитесь с Частным Сервером от Клиентской Машины до себя

После того как вышеупомянутые два шага реализованы, мы можем соединиться с Клиентской Машины на Общедоступный Сервер командой:

ssh user-of-the-private-server@localhost -p 1111    # provide an additional authentication data (for the Private Server) if it is needed…

Как применить Сценарий 2 в рамках Ubuntu

Установите соединение SSH с Перенаправлением портов с Частного Сервера на Общедоступный Сервер

Этот шаг идентичен как первый из Сценария 1, но немного дополнительных вещей должны быть сделаны.

Откройте переданный порт 2222 на Брандмауэре Общедоступного Сервера - это вне объема этого ответа.

Изменить /etc/ssh/sshd_config из Общедоступного Сервера и добавляют следующую директиву, которая позволит открываться, наш туннель SSH общественности (не забывайте перезапускать сервер: sudo systemctl restart sshd.service):

GatewayPorts yes

Заставьте наш SSH туннелировать открытый для общественности. Этот шаг хорошо описан в вопросе: (Как заставить ssh туннелировать открытый для общественности?). Согласно ответам там мы могли добавить -g опция к командам, которые устанавливают связь между Частным и Общедоступными серверами:

autossh public-server-reverse -gfTN
@reboot sleep 45 && autossh public-server-reverse -gfTN

Или, альтернативно, вместо этого что мы могли изменить ~/.ssh/config файл таким образом:

Host public-server-reverse
    HostName 100.100.100.100  # this is the IP address or the domain name of the Public Server
    IdentityFile ~/.ssh/pass-less/id_rsa
    User user-of-the-public-server
    Port 22
    RemoteForward \*:2222 localhost:22

Наконец мы должны killall autossh и установите соединение снова.


Соединитесь с частным сервером с клиентской машины на общедоступный сервер

После того как вышеупомянутый шаг выполняется, мы можем достигнуть нашей цели командой:

ssh user-of-the-private-server@public-server -p 2222    # provide an additional authentication data (for the Private Server) if it is needed… forward some ports, etc.
1
ответ дан 2 December 2019 в 04:45

Другие вопросы по тегам:

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