我已采取以下步骤:
- 创建 VPC(具有单个公共子网)
- 向 VPC 添加了 EC2 实例
- 分配弹性 IP
- 将弹性IP与实例关联
- 创建安全组并将其分配给实例
- 修改了安全规则,允许端口 22 上的入站 ICMP 回显和 TCP
我已完成所有操作,但仍然无法 ping 或 ssh 进入实例。如果我按照相同的步骤(不包括 VPC 位),我可以毫无问题地进行设置。我遗漏了什么步骤?
答案1
为了与 VPC 外部进行通信,每个非默认子网都需要一个路由表和一个与之关联的互联网网关(默认子网默认获得一个外部网关和一个路由表)。
根据您在 VPC 中创建公共子网的方式,您可能需要另外明确添加它们。您的 VPC 设置听起来像符合方案 1 -具有单个公共子网的私有云 (VPC) 以及用于实现 Internet 通信的 Internet 网关来自 AWS VPC 文档。
你会需要向您的 VPC 添加互联网网关以及公共子网的路由表分配0.0.0.0/0
(默认路由)前往指定的互联网网关。文档中有一张精确网络拓扑的精美图示。
此外,如需更多信息,您可以查看VPC 互联网网关AWS 文档。遗憾的是,它有点混乱,而且陷阱不明显。
有关连接问题的更多详细信息,另请参阅:排除实例连接故障。
答案2
不确定是否正是这种情况,但我刚刚创建了一个具有公共子网和私有子网的 VPC,并注意到有一个默认安全组,其源地址与安全组名称相同。实际上它无权访问。必须将此源更改为任何地方,它才开始工作。
答案3
我注意到(我认为)您需要小心您的实例是在哪个可用区域中创建的。子网、网络接口和实例需要位于同一个可用区域中,否则就无法连接到该实例的公共 IP。
我可能是错的 - 但我不这么认为,这花了我 12 个小时才弄清楚。
希望这对其他人有帮助。
答案4
由于 SSH 是有状态协议,您需要确保网络 ACL 中具有以下 OUTBOUND 规则:
Rule # Type Protocol Port Range Destination Allow / Deny
100 Custom TCP Rule TCP (6) 49152-65535 0.0.0.0/0 ALLOW