无法在 aws vpc 子网之间 ping 或 ssh

无法在 aws vpc 子网之间 ping 或 ssh

我在 VPC 中有一个相当标准的多层子网布局。有一个数据库层/子网、一个 Web 服务器层/子网和一个堡垒主机层/子网。我的问题是我无法在子网之间 ping 或 ssh。

具体来说,我希望从堡垒层/子网 ping 和 ssh 到 Web 服务器层/子网。

172.31.32.0/20 堡垒层
172.31.0.0/20 网络服务器层

两个子网位于同一可用区,并且两个子网都连接到同一张路由表。路由表如下所示:

172.31.0.0/16 本地
0.0.0.0/0 igw-xxxxxxxx

目前,Web 服务器层的网络 ACL 允许所有流量、所有协议、所有端口范围(从 172.31.32.0/20 开始,这是堡垒层)。出站/出站规则允许所有流量。安全组同样开放。以下是 Web 服务器层的网络 ACL。

规则编号 类型 协议 端口范围 源 允许/拒绝
100 全部流量 全部 全部 172.31.32.0/20 允许
200 HTTP (80) TCP (6) 80 0.0.0.0/0 允许
202 HTTP* (8080) TCP (6) 8080 0.0.0.0/0 允许
210 HTTPS (443) TCP (6) 443 0.0.0.0/0 允许
* 所有流量 全部 全部 0.0.0.0/0 拒绝

我尝试过跨子网 ping 和 ssh,两个子网都连接到默认/主路由表,并且我尝试过将 Web 服务器子网连接到其自己的路由表。当我打开这些子网中的任何一个以从我的笔记本电脑的 IP 地址进行流量时,我能够通过实例的公共 IP 地址成功 ssh 登录。

我在网上看到过一些信息,暗示 AWS VPC 中存在奇怪/错误的行为。例如,通过 VPC 控制台创建弹性 IP,但通过 EC2 控制台分配它们,然后流量消失得像进入黑洞一样。解决方案似乎是删除有缺陷的 EIP,然后完全通过 VPC 或 EC2 控制台重新创建并分配一个新 EIP。然而,这充其量只是对可能/一般 AWS 错误的间接看法,因为在我的例子中没有涉及 EIP。

我的下一个故障排除措施是重新开始使用新的 VPC,创建两个子网,在每个子网中启动一个服务器实例,然后在它们之间测试 ping 和 ssh。单一路由表,以及广泛开放的网络 acl 和安全组 - 再简单不过了。

在我看来,这似乎是一个基本设置,所以我怀疑我遗漏了一个基本解决方案。有什么想法吗?请提出来,谢谢!

答案1

您需要一个路由,并打开从 Web 服务器层子网到堡垒层子网的网络 ACL,否则您的响应数据包将永远不会返回到服务器。启用从 Web 服务器子网到堡垒的 ICMP(并确保您的 ping 客户端仅使用 ICMP——有些默认使用 UDP 数据包),并打开适当的临时 TCP 端口(范围通常取决于操作系统;请参阅http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_ACLs.html#VPC_ACLs_Ephemeral_Ports)从 Web 服务器层迁移到堡垒层。

如果您同时在 Web 服务器实例和堡垒实例上运行 tcpdump,您可能会看到 Web 服务器正在获取堡垒数据包并发送响应,但堡垒实例永远不会收到响应。

答案2

检查两个子网中实例的入口安全组规则。您需要允许特定子网的 CIDR,否则将默认安全组附加到它们。

“允许来自分配到同一安全组的实例的入站流量”

http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_SecurityGroups.html#DefaultSecurityGroup

相关内容