EC2 实例在 VPC 中的公共子网中运行 Amazon Linux。
以下是其安全组的出站规则:
ALLOW TCP on port 80 to 0.0.0.0/0
ALLOW TCP on port 443 to 0.0.0.0/0
ALLOW ICMP to 0.0.0.0/0
首先我通过 SSH 进入实例。然后,我尝试向外部互联网发出一个简单的请求:
[ec2-user@nat1 ~]$ curl -v wikipedia.org/
* Trying 208.80.154.224...
* Trying 2620:0:861:ed1a::1...
* Immediate connect fail for 2620:0:861:ed1a::1: Network is unreachable
请注意,DNS 由 VPC 内我自己的 AWS Route 53 DNS 服务器解析,因此这并不能证明外部连接。
我看不到Trying 208.80.154.224...
有关失败的详细信息——有什么方法可以获取更多信息吗?
下一步看起来像是尝试将该地址转换为 IPv6,但格式不正确。这是线索吗?还是 IPv4 失败时的自动补救措施?
最终的错误“网络无法访问”似乎可能是指 IPv6 网络的整体故障 - 这对于我现在的目的来说没问题。因此,我仍然需要寻找有关第一次尝试正确的 IPv4 地址失败的更多详细信息。
现在,这是此 EC2 实例的网络接口的子网流日志中的条目,仅过滤了 IP 地址208.80.154.224
。我看到的所有行都以ACCEPT OK
这样的结尾:
Event Data
2 027141088039 eni-66c1933c 10.0.17.220 208.80.154.224 60761 80 6 2 120 1436199193 1436199253 ACCEPT OK
答案1
有问题的 EC2 实例没有公共 IPv4 地址因此无法参与互联网。
只需为实例分配一个公共 IP 地址,然后:
[ec2-user@nat1 ~]$ curl -v wikipedia.org/
* Trying 208.80.154.224...
* Connected to wikipedia.org (208.80.154.224) port 80 (#0)