Назад | Перейти на главную страницу

Как подключиться по SSH к экземпляру ec2 в частной подсети VPC через NAT-сервер

Я создал VPC в aws с публичной подсетью и частной подсетью. Частная подсеть не имеет прямого доступа к внешней сети. Итак, в публичной подсети есть NAT-сервер, который перенаправляет весь исходящий трафик из частной подсети во внешнюю сеть.

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

Я провел некоторое исследование, чтобы настроить блок NAT для пересылки SSH экземпляру в частной подсети. Но мне это не повезло.

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

Именование бывают:

ноутбук (любое устройство за пределами VPC)

nat (NAT-сервер в публичной подсети)

пункт назначения (сервер в частной подсети, к которому я хочу подключиться)

Не уверен, что следующие ограничения являются или нет:

«Пункт назначения» не имеет общедоступного IP-адреса, только IP-адрес подсети, например 10.0.0.1 «Пункт назначения» не может подключиться к «нат» через общедоступный адрес «нат». Есть несколько "целевых" серверов, нужно ли мне настраивать по одному для каждого?

Спасибо

Вы можете настроить хост-бастион для подключения к любому экземпляру в вашем VPC:

http://blogs.aws.amazon.com/security/post/Tx3N8GFK85UN1G6/Securely-connect-to-Linux-instances-running-in-a-private-Amazon-VPC

Вы можете запустить новый экземпляр, который будет функционировать как хост-бастион, или использовать существующий экземпляр NAT в качестве бастиона.

Если вы создадите новый экземпляр в качестве обзора, вы:

1) создайте группу безопасности для вашего хоста-бастиона, которая разрешит доступ по SSH с вашего ноутбука (обратите внимание на эту группу безопасности для шага 4)

2) запустить отдельный экземпляр (бастион) в публичной подсети в вашем VPC

3) дайте этому хосту-бастиону общедоступный IP-адрес либо при запуске, либо путем назначения эластичного IP-адреса.

4) обновите группы безопасности каждого из ваших экземпляров, у которых нет общедоступного IP-адреса, чтобы разрешить SSH-доступ с хоста-бастиона. Это можно сделать с помощью идентификатора группы безопасности хоста-бастиона (sg - #####).

5) используйте пересылку агента SSH (ssh -A user @ publicIPofBastion), чтобы подключиться сначала к бастиону, а затем, однажды в бастионе, SSH к любому внутреннему экземпляру (ssh user @ private-IP-of-Internal-Instance). Пересылка агента заботится о пересылке вашего закрытого ключа, поэтому его не нужно хранить в экземпляре бастиона (никогда не храните закрытые ключи ни на одном экземпляре !!)

Сообщение в блоге AWS, приведенное выше, должно содержать некоторые подробности этого процесса. Я также добавил следующее, если вам нужны дополнительные сведения о хозяевах бастиона:

Концепция бастионных войск: http://en.m.wikipedia.org/wiki/Bastion_host

Если вам нужны разъяснения, не стесняйтесь комментировать.

Единственный способ заставить его работать.

1) Убедитесь, что группа безопасности для этого частного экземпляра имеет во входящем правиле группу безопасности из общедоступной подсети.

Источник протокола портов
Все Все sg-0b6616e070b9ea2d (группа общественной безопасности)

2) Используя команды прокси, настройте файл конфигурации ssh, чтобы он имел что-то вроде этого

vim ~/.ssh/config

Host publichost
   HostName 24.123.34.45
   User ubuntu
   IdentityFile ~/mypem.pem
   ProxyCommand none
Host privatehost
   HostName 10.0.2.133
   User ubuntu
   IdentityFile ~/mypem.pem
   ProxyCommand ssh publichost -W %h:%p

Бегать ssh privatehost он должен работать

Просто чтобы уточнить: как только вы подключитесь к хосту-бастиону по ssh, вам нужно будет подключиться по ssh к хосту NAT как пользователь. ec2-user. Это меня немного обмануло, поскольку обычно пользователь ubuntu на AWS - это ubuntu. Так я и сделал:

laptop> ssh -A ubuntu@ssh_bastion
ssh_bastion> ssh ec2-user@nat_private_dns_or_private_ip

Также помните, что ваш ssh_bastion должен иметь исходящее правило, разрешающее трафик на другие хосты и SG.