我在 aws 中创建了一个 VPC,其中包含一个公共子网和一个私有子网。私有子网无法直接访问外部网络。因此,公共子网中有一个 NAT 服务器,它将所有出站流量从私有子网转发到外部网络。
目前,我可以从公共子网通过 SSH 连接到私有子网,也可以从 NAT 通过 SSH 连接到私有子网。但是,我想要的是从任何机器(家用笔记本电脑、办公机器和移动设备)通过 SSH 连接到私有子网中的实例。
我做了一些研究,我可以设置 NAT 盒以将 SSH 转发到私有子网中的实例。但我运气不佳。
有人能列出我需要设置什么才能实现这一点吗?
命名如下:
笔记本电脑(VPC 之外的任何设备)
nat(公有子网中的 NAT 服务器)
目标(我想要连接的私有子网中的服务器)
不确定以下是否存在限制:
“目标”没有公网 IP,只有子网 IP,例如 10.0.0.1 “目标”无法通过 nat 的公网连接到“nat”。有多个“目标”服务器,我需要为每个服务器设置一个吗?
谢谢
答案1
您可以设置堡垒主机来连接到您的 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 的出站规则。