如何从亚马逊vpc连接外部世界?

时间:2012-04-20 09:47:23

标签: amazon-ec2 amazon-web-services connectivity vpc amazon-vpc

我将amazon VPC通过向导设置为“仅公共网络”,因此我的所有实例都在公共子网中。

VPC中分配了弹性IP的实例可以毫无困难地连接到互联网。

但没有弹性IP的实例无法连接到任何地方。

存在互联网网关。 aws控制台中的路由表类似于

Destination Target 
10.0.0.0/16 local
0.0.0.0/0   igw-nnnnn

和实例内部的路线显示

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.0.0.0        *               255.255.255.0   U     0      0        0 eth0
default         10.0.0.1        0.0.0.0         UG    100    0        0 eth0

我尝试将所有入站和出站流量打开到实例所属的安全组中的0.0.0.0/0。仍然没有成功。

~$ ping google.com
PING google.com (74.125.224.36) 56(84) bytes of data.
^C
--- google.com ping statistics ---
6 packets transmitted, 0 received, 100% packet loss, time 5017ms

我还能做什么?

11 个答案:

答案 0 :(得分:54)

似乎从没有弹性IP的实例进入外部的唯一方法是:

  • 添加NAT(从ami-vpc-nat-beta启动额外的m1.small实例)并为其分配EIP
  • 创建一个额外的子网,它将是“私有”
  • 将非EIP实例移至该私有子网
  • 修改路由表:私有子网的0.0.0.0/0应该转到NAT

所以,仅添加NAT是不够的。应停止实例并将其移动到另一个子网中的另一个IP。

答案 1 :(得分:11)

文档告诉您应该添加NAT Instance

答案 2 :(得分:9)

  

问。没有EIP的实例如何访问互联网?

     

没有EIP的实例可以通过两种方式之一访问Internet   没有EIP的实例可以通过NAT实例路由其流量   访问互联网。这些实例使用NAT的EIP   实例来遍历互联网。 NAT实例允许出站   通信,但不启用Internet上的计算机启动   使用NAT连接到私人寻址的计算机,

http://aws.amazon.com/vpc/faqs/

您可以在此处找到有关如何设置nat实例的详细说明:http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_NAT_Instance.html enter image description here

答案 3 :(得分:4)

或者在公共VPC中创建NAT实例,并向该NAT实例添加静态路由

route add -net 0.0.0.0 netmask 0.0.0.0 gw 1​​0.0.0.5 eth0

其中10.0.0.5是您的nat实例,只需确保包含NAT实例的安全组可以接受您需要访问Internet的框中的内部流量

答案 4 :(得分:2)

您可以在您的VPC中具有EIP的任何实例上执行此操作。我所描述的here指令很少能为您提供帮助。 BTW:不要忘记禁用source / dest。检查

答案 5 :(得分:1)

没有EIP的实例可以通过以下两种方式之一访问Internet:没有EIP的实例可以通过NAT实例路由其流量以访问Internet。这些实例使用NAT实例的EIP遍历Internet。 NAT实例允许进行出站通信,但不能使Internet上的计算机使用NAT发起到私有寻址计算机的连接。

https://docs.aws.amazon.com/vpc/latest/userguide/VPC_NAT_Instance.html

答案 6 :(得分:0)

您是否检查了子网上的网络ACL?

交叉检查安全组的规则。

路线表看起来很好。它应该工作。

答案 7 :(得分:0)

解决此问题需要做的就是为已配置为执行NAT的实例禁用“源/目标检查”。这可以在AWS控制台的“实例操作”下完成。

Reference

答案 8 :(得分:0)

这对我有用:

  • VPC子网172.20.0.0/16
  • EC2“nat”gateway 172.20.10.10 with EIP

待办事项:

  • 设置已禁用的源/目标。检查你的“nat gw”
  • 创建一个新的“nat-sub”子网ex:172.20.222.0/24
  • 修改路线0.0.0.0/0到172.20.10.10(我的nat gw)为“nat-sub”
  • 使用“nat-sub”创建EC2
  • 在您的nat网关上以root用户身份尝试:
  

root @ gw:〜#sysctl -q -w net.ipv4.ip_forward = 1   net.ipv4.conf.eth0.send_redirects = 0

     

root @ gw:〜#iptables -t nat -C POSTROUTING -o eth0 -s 172.20.222.0/24 -j   MASQUERADE 2> / dev / null || iptables -t nat -A POSTROUTING -o eth0 -s   172.20.222.0/24 -j MASQUERADE

如果有效,请在/etc/rc.local

中添加这两行

答案 9 :(得分:0)

安全组 - >外向

*   ALL Traffic ALL     ALL     0.0.0.0/0   Allow

如果您想连接到google.com等外部服务器,请允许外拨 甚至想要更新 - sudo apt-get update

您可以允许使用AWS前端转出安全组 - >外向

确保为AWS实例选择正确的组

答案 10 :(得分:0)

他们有一个名为NAT网关的相对较新的产品就是这样,在您的酒吧/私人子网的边缘创建一个托管的NAT实例。