ec2 实例无法在没有弹性 IP 地址的情况下访问公共子网中的互联网?
Posted
技术标签:
【中文标题】ec2 实例无法在没有弹性 IP 地址的情况下访问公共子网中的互联网?【英文标题】:The ec2 instance can't access internet in a public subnet without a elastic ip address? 【发布时间】:2016-04-17 21:41:55 【问题描述】:我在 aws 上工作。我创建了一个公共子网,它的网络 ACL 允许所有网络流量,并与路由表中的互联网网关相关联。
然后我创建一个没有弹性ip的ec2实例和一个有弹性ip的ec2实例,安全组也允许所有流量。
我 ssh 到具有弹性 ip 的实例。当我运行 yum update 和 curl www.baidu.com 等时效果很好。但是当我 ssh 到没有弹性 ip 的 ec2 实例时,我无法访问互联网。有谁知道这是为什么?
【问题讨论】:
弹性 IP 在这种情况下无关紧要。检查适用于公共子网的安全组设置和 VPC ACL。 如果网络ACL或安全组不正确,无论我是否关联弹性IP,实例都无法访问互联网。对吗? 对于出站互联网访问,这些事情很重要:互联网网关、NAT 实例(仅在私有子网的情况下)、安全组、网络 ACL 和实例上的本地操作系统防火墙。弹性 IP 不参与此组合。弹性 IP 仅在您想从 Internet 访问您的实例(入站访问)时才有用 实例有公网ip吗? 不,没有公网IP。当我们想在公共子网中的实例中访问互联网时是否有必要。 【参考方案1】:要使用 Internet 网关从公有子网中的 EC2 实例访问 Internet,该实例需要具有公有 IP 地址。任何一个都可以将实例配置为具有公共 IP 地址或附加 EIP。
参考:http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Internet_Gateway.html
如果您不想为具有 Internet 访问权限的实例附加公共 IP 地址(考虑私有子网),NAT 实例和 NAT 网关可以提供帮助。
参考:http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/vpc-nat.html
【讨论】:
这是一个完美的答案,它帮助我诊断出让我发疯的问题!我的 ASG 有 2 个子网,其中一个使用 NAT,而另一个使用 Internet 网关。每当使用 Internet 网关时,实例将无法连接到 Internet!将我的实例转移为仅使用通过 NAT 连接的子网解决了它!【参考方案2】:除了位于具有到 Internet 网关的路由的子网中之外,实例还必须具有公共 IP 地址才能与外部世界通信(这与弹性 IP 不同)。
您可以在启动实例时指定此设置,如果没有,则有一个控制此设置的每个子网设置。除了默认 VPC 中的默认子网之外,每个子网设置默认为 false。在 aws 文档中还有更多 details。
【讨论】:
【参考方案3】:问题在于连接到您正在使用的子网的网关。检查您正在使用的网关:
转到您正在使用的子网 点击Route table
在Routes
-> Destination
下查找0.0.0.0/0
并检查Target
下的网关
网关的行为如下:
互联网网关 (IGW) 允许具有公共 IP 的实例访问互联网。 NAT 网关 (NGW) 允许没有公共 IP 的实例访问互联网。这是一篇很好的文章,可以帮助您理解和解决您的问题: https://medium.com/awesome-cloud/aws-vpc-difference-between-internet-gateway-and-nat-gateway-c9177e710af6
【讨论】:
以上是关于ec2 实例无法在没有弹性 IP 地址的情况下访问公共子网中的互联网?的主要内容,如果未能解决你的问题,请参考以下文章