AWS上的Ec2实例apt-get命令无法使用

29

我在AWS上有一个Amazon Ubuntu的Ec2实例。

当我尝试下载任何东西时,都无法成功。

例如:

~# apt-get update

0% [Connecting to ap-southeast-1.ec2.archive.ubuntu.com (103.246.148.161)] [Connecting to security.ubuntu.com (91.189.91.15)

另一个Ex将会是:

~# wget https://s3.amazonaws.com/aws-cli/awscli-bundle.zip

--2014-04-09 07:27:17--  https://s3.amazonaws.com/aws-cli/awscli-bundle.zip
Resolving s3.amazonaws.com... 207.171.189.80
Connecting to s3.amazonaws.com|207.171.189.80|:443...

这将永久保留。

在我创建了AWS控制台的组和用户之前,我可以下载文件。

请指出可能存在的问题。

6个回答

58
您的EC2实例的安全组未配置为允许其访问互联网。您需要添加一个针对0.0.0.0/0全部流量的出站规则。在经典EC2中,此规则已经存在,因此您无需担心。但是,在虚拟私有云(VPC)中,您需要添加此规则。
此外,请检查是否有任何iptables规则导致了任何问题。

2
还要确保您已将公共 IP 分配给实例,我浪费了一些时间,直到意识到问题所在。 - NikoNyrh
2
@NikoNyrh,你不需要公共IP来实现这个目的。如果这是你让它工作的方法,那么你做错了什么。 - slayedbylucifer
没有公共可访问的IP地址,我的EC2实例甚至无法ping通google.com或8.8.8.8,可能只有在公司VPC中才会发生这种情况。我可以通过VPN使用“内部”IP进行SSH连接,但无法连接到开放的互联网。 - NikoNyrh
如果您忘记了,可以进入现有子网并选择“自动分配公共 IP”。 - nettie

5

确保在使用wget下载任何内容时,若使用HTTPS链接,则需要为0.0.0.0/0添加出站规则以支持HTTPS(端口443)。


1

添加出站规则 HTTP TCP 80 0.0.0.0/0 对我有效。


1

我曾经遇到过同样的问题,因为我没有在VPC的私有子网中启用NAT网关。

如果您的计算机位于私有子网中,您需要在该子网的路由表中启用NAT网关。

启用后,它将如下所示:

enter image description here


0

我找到了如何使apt-get再次工作的方法。

编辑gai.conf:

sudo vim /etc/gai.conf

将第54行更改为取消注释以下内容:

precedence ::ffff:0:0/96 100

写入并退出:

:wq

注意

注意第50行,它看起来几乎相同:

precedence ::ffff:0:0/96 10

这是错误的行。向下移动约4行,您会发现正确的行以100而不是10结尾,应该取消注释。


0

如果问题不在您的安全组中,您可能忘记在VPC/Subnet网络ACL中添加短暂端口。

在您的路由表中,允许入站规则TCP流量从32768 - 655350.0.0.0/0

如果您只启用了80、443出站端口,则返回流量仍通过上述临时端口。仅启用80、443出站端口将无法让您的服务器完成curl google.com

上面提到的短暂端口列表适用于Ubuntu,您可以通过运行sysctl net.ipv4.ip_local_port_range来检查您的短暂端口列表。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接