我在AWS上工作。我创建了一个公共子网,它具有允许所有网络流量的网络 ACL,并与路由表中的互联网网关关联。
然后我创建一个没有弹性ip的ec2实例和一个有弹性ip的ec2实例,安全组也允许所有流量。
我通过 ssh 连接到具有弹性 IP 的实例。当我运行 yum update 和curl www.baidu.com 等时效果很好。但是当我 ssh 到没有弹性 IP 的 ec2 实例时,我无法访问互联网。有人知道这是为什么吗?
要使用 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
问题出在连接到您正在使用的子网的网关上。要检查您正在使用的网关:
Route table
Routes
-> Destination
下查找 0.0.0.0/0
并在 Target
网关的行为方式如下:
这是一篇很好的文章,可以帮助您理解并解决您的问题: https://medium.com/awesome-cloud/aws-vpc-difference- Between-internet-gateway-and-nat-gateway-c9177e710af6
除了位于具有到 Internet 网关的路由的子网中之外,实例还必须具有公共 IP 地址才能与外界通信(这与弹性 IP 不同)。
您可以在启动实例时指定它,如果没有,则有一个每个子网设置来控制它。除了默认 VPC 中的默认子网之外,每个子网设置默认为 false。 aws 文档中有更多详细信息。
我有类似的问题:
子网 10.0.1.0 上具有弹性 IP (Amazon Linux 2) 的服务器 A。 服务器 B 位于子网 10.0.2.0 上,具有弹性 IP,因此无法访问互联网。
AWS 的所有配置均正确,但无法从服务器 B 访问互联网。事实证明,这是由服务器 A 上运行的 iptables 引起的。
在 /etc/sysconfig/iptables 中,我需要设置如下所示的一行,然后重新启动:
-A 后路由 -s 10.0.2.0/24 -o eth0 -j 伪装
另一个潜在原因是您需要在服务器 A 上编辑网络接口。 选择“操作”,然后选择“更改源/目标。检查”并取消选中它以禁用。