为什么我的 Amazon EC2 实例无法使用互联网网关连接到互联网?
上次更新日期:2022 年 6 月 8 日
我在公有子网中的 Amazon Elastic Compute Cloud(Amazon EC2)实例具有公有 IP 地址或互联网网关,但无法访问互联网。
简短描述
要排查您的 Amazon EC2 无法访问互联网的原因,请执行以下操作:
- 验证 EC2 实例是否满足所有先决条件。
- 验证实例是否具有公有 IP 地址。
- 验证防火墙不会阻止访问。
解决方法
验证实例是否满足所有先决条件
实例必须满足以下条件:
- 与实例子网关联的路由表具有通往互联网网关的默认路由(0.0.0.0/0)。
- 与路由关联的互联网网关未被删除。
- 附加到实例弹性网络接口的安全组具有允许端口和协议的出站互联网流量(0.0.0.0/0)的规则。
- 与实例子网关联的网络访问控制列表(网络 ACL)包含允许出站和入站流量进入 Internet 的规则。
验证实例是否具有公有 IP 地址
如果公有子网中的实例没有公有 IP 地址,则该实例无法在其所在的虚拟私有云(VPC)之外访问。即使实例具有互联网网关,也是如此。
要允许实例连接到互联网,请分配一个弹性 IP 地址并将这个弹性 IP 地址关联到该实例。
验证防火墙不会阻止访问
如果实例满足上述条件并且互联网连接问题仍然存在,则操作系统中可能正在运行本地防火墙。最佳做法是使用安全组,而不是在操作系统中设置本地防火墙。请确保禁用本地防火墙不会影响您的工作负载。
# For Uncomplicated Firewall
sudo ufw disable
# For firewalld
sudo systemctl disable firewalld --now
如果您必须使用防火墙,那么互联网连接问题通常与 OUTPUT 链有关。您可以通过运行以下命令来允许传出流量:
sudo iptables -P OUTPUT ACCEPT
sudo iptables -I OUTPUT 1 -j ACCEPT
Windows Server:
对于 Windows Server 默认防火墙,请运行以下命令:
netsh advfirewall firewall show rule name=all
如果上述命令表示流量被阻止,请删除旧规则或添加新规则,以允许该特定端口的流量。有关详细信息,请参阅理解 Windows 防火墙与高级安全规则结合使用的 Microsoft 文档。