需要帮助找出 EC2 实例无法启动任何传出网络活动的原因

需要帮助找出 EC2 实例无法启动任何传出网络活动的原因

我的AWS开发具有以下架构。

1 个 VPC 具有 2 个私有子网:1 个用于 RDS(10.0.11.0/24),1 个用于 EC2(10.0.1.0/24)1 个公共子网:

1 个连接到我的 VPC 的互联网网关

3 路由表:

a) 主路由表(0.0.0.0/0 目标互联网网关)

b) EC2 路由表(与 EC2 私有子网关联)加上指向 NAT 实例的网络 ID 接口的附加路由 0.0.0.0/0

c) RDS 路由表(与 RDS 私有子网关联)

3 个安全组:

a) EC2(选定传入并允许所有传出)

b) RDS(选定传入和允许所有传出)

c) NAT(选定传入并允许所有传出)

已在 NAT 实例中添加 iptable 预路由规则,以将数据重定向到 EC2 实例端口。根据规则,传入数据没有问题。SSH 和其他打开的端口正在运行。

问题是我的 EC2 实例发出的所有网络调用都被阻止了。我甚至无法执行“apt-get update”或从 github 克隆 repo 等命令。它们超时了。此外,我的服务器代码无法访问 AWS S3 资源。与 RDS 的连接工作正常。

过去几个月它一直运行良好。昨天,我在安装 nginx 并使用 ufw 时注意到了这个问题,我以为我搞乱了 iptables,因此清除了 ufw 包并刷新了 iptable 规则,然后重新启动。但仍然没有帮助。

我启动了另一个具有相同子网和其他规则的 EC2 实例,只是想看看问题是否出在之前的 EC2 实例上。即使是新实例也无法访问外部网站。不知道如何进一步调查。

更新:为了完整性,我发布了我的 EC2 的 iptable

ubuntu@ip-10-0-1-126:~$ sudo iptables -S

-P 输入接受

-P 转发接受

-P 输出接受

答案1

您将公共 IP 附加到您的 EC2 了吗?

公有子网中的 EC2 需要公有 IP 才能连接到互联网。如果您在具有 NAT 网关的私有子网中创建 EC2,则不需要公有 IP。

答案2

NAT PREROUTING iptable 规则对于传入流量没问题。对于传出流量。我需要添加 POSTROUTING 规则。令人惊讶的是,我在任何教程中都没有找到提到它,更令人惊讶的是,到目前为止,我的实例对于传出流量运行良好。

欲了解更多详情,我建议你访问此帖子 https://medium.com/@rakeshkanagaraj1990/aws-nat-i​​nstance-bb0911ba19d5

相关内容