我在公有子网中的 Amazon Elastic Compute Cloud (Amazon EC2) 实例具有公共 IP 地址或互联网网关,但无法访问互联网。
解决方法
先决条件:
- 将具有指向互联网网关 (0.0.0.0/0) 默认路由的路由表与您实例的子网相关联。
- 检查您是否未删除与该路由关联的互联网网关。
- 使用允许您的端口和协议的出站互联网流量 (0.0.0.0/0) 的规则配置连接到实例弹性网络接口的安全组。
- 确认与您的实例子网关联的网络访问控制列表 (ACL) 具有允许互联网出站和入站流量的规则。
如果公有子网中的实例没有公共 IP 地址,则无法在其所在的虚拟私有云 (VPC) 外部访问实例。即使实例具有互联网网关,也是如此。
要允许实例连接到互联网,请分配弹性 IP 地址,然后与实例关联弹性 IP 地址。
对于具有公共 IP 地址的实例,请检查是否存在阻止互联网访问的防火墙规则,然后删除该规则。或者,停用防火墙。
删除阻止访问的防火墙规则
在操作系统 (OS) 中运行的本地防火墙可能会阻止对特定端口或 IP 地址的出站访问。要解决此问题,请列出您的防火墙规则,然后删除阻止访问的规则。
**注意:**在删除任何规则之前,请将规则备份到文件中。
Linux 分配
要列出防火墙规则,请根据您在实例上配置的防火墙运行以下命令之一:
简单防火墙
sudo ufw status numbered
firewalld
sudo firewall-cmd --list-all-zones
iptables
sudo iptables -L --line-numbers
要删除防火墙规则,请根据您在实例上配置的防火墙运行以下命令之一。
简单防火墙
sudo ufw delete rule_number
**注意:**将 rule_number 替换为要删除的防火墙规则。
firewalld
sudo firewall-cmd --zone=zone --remove-rich-rule=rule --permanent
sudo firewall-cmd --reload
**注意:**删除 --permanent 规则后,必须重新加载防火墙才能使更改立即在运行时配置中生效。
iptables
sudo iptables-save > iptables_backup.txt
sudo iptables -D chain rule_number
Windows Server
要列出 Windows Server 默认防火墙的防火墙规则,请运行以下命令:
netsh advfirewall firewall show rule name=all
如果前面命令输出中的任何规则显示被阻止的流量,请运行以下命令移除该防火墙规则:
netsh advfirewall firewall delete rule name=rule_name
**注意:**将 rule_name 替换为阻止流量的防火墙规则的名称。
有关详细信息,请参阅 Microsoft Learn 网站上的 Windows 防火墙工具。
停用防火墙
Linux 分配
您也可以停用本地防火墙,改为使用安全组。
**注意:**停用防火墙可能会影响您的工作负载。
要停用防火墙,请运行以下命令之一:
简单防火墙
sudo ufw disable
firewalld
sudo systemctl disable firewalld --now
iptables
sudo systemctl disable iptables
如果您必须使用防火墙,请运行以下命令之一以允许传出流量:
简单防火墙
sudo ufw default allow outgoing
iptables
sudo iptables P OUTPUT ACCEPT
sudo iptables I OUTPUT j ACCEPT
**注意:**默认情况下,firewalld 允许系统在任何区域中发出所有出站流量,除非没有富规则。
Windows Server
要停用适用于 Windows Server 的 Windows 防火墙默认防火墙,请运行以下命令:
netsh advfirewall set allprofiles state off
有关详细信息,请参阅 Microsoft Learn 网站上的 Windows 防火墙工具。
相关信息
使用互联网网关为 VPC 启用互联网访问
为什么我无法使用 NAT 将私有子网中的 EC2 实例连接到互联网?