如何通过 NAT 服务器通过 SSH 连接到 VPC 私有子网中的 ec2 实例

如何通过 NAT 服务器通过 SSH 连接到 VPC 私有子网中的 ec2 实例

我在 aws 中创建了一个 VPC,其中包含一个公共子网和一个私有子网。私有子网无法直接访问外部网络。因此,公共子网中有一个 NAT 服务器,它将所有出站流量从私有子网转发到外部网络。

目前,我可以从公共子网通过 SSH 连接到私有子网,也可以从 NAT 通过 SSH 连接到私有子网。但是,我想要的是从任何机器(家用笔记本电脑、办公机器和移动设备)通过 SSH 连接到私有子网中的实例。

我做了一些研究,我可以设置 NAT 盒以将 SSH 转发到私有子网中的实例。但我运气不佳。

有人能列出我需要设置什么才能实现这一点吗?

命名如下:

笔记本电脑(VPC 之外的任何设备)

nat(公有子网中的 NAT 服务器)

目标(我想要连接的私有子网中的服务器)

不确定以下是否存在限制:

“目标”没有公网 IP,只有子网 IP,例如 10.0.0.1 “目标”无法通过 nat 的公网连接到“nat”。有多个“目标”服务器,我需要为每个服务器设置一个吗?

谢谢

答案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 访问。可以使用堡垒主机的安全组 ID (sg-#####) 来完成此操作。

5) 使用 SSH 代理转发 (ssh -A user@publicIPofBastion) 首先连接到堡垒,然后进入堡垒后,通过 SSH 进入任何内部实例 (ssh user@private-IP-of-Internal-Instance)。代理转发负责转发您的私钥,因此不必将其存储在堡垒实例上(永远不要在任何实例上存储私钥!

上述 AWS 博客文章应该能够提供有关该过程的一些详细信息。如果您需要有关堡垒主机的更多详细信息,我还提供了以下内容:

堡垒主机的概念: http://en.m.wikipedia.org/wiki/Bastion_host

如果您需要澄清,请随时发表评论。

答案2

这是我能让它发挥作用的唯一方法。

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 它应该可以工作

答案3

需要澄清的是:一旦您通过 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 的出站规则。

相关内容