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

我有亚马逊VPC通过向导设置为“公共唯一networking”,所以我所有的实例都在公共子网。

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 

我试图打开一个实例所属的安全组中的所有入站和出站stream量到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 

我还可以做些什么?

看来,从没有弹性IP的实例出发的唯一方法是:

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

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

文档告诉你应该添加一个NAT实例

问:没有EIP的实例如何访问Internet?

没有EIP的实例可以通过以下两种方式之一访问Internet:没有EIP的实例可以通过NAT实例路由其stream量,以访问Internet。 这些实例使用NAT实例的EIP来遍历Internet。 NAT实例允许出站通信,但不能使Internet上的机器使用NAT启动与私人寻址机器的连接

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

您可以在这里find关于如何设置nat实例的详细说明: http : //docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_NAT_Instance.html 在这里输入图像说明

或者在公共VPC内创build一个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的内部stream量

您可以在VPC中的任何实例上执行该操作,该实例具有EIP。 我在这里描述的几条指令应该可以帮到你。 顺便说一句:不要忘记禁用源/ dest。 查

你是否检查子网上的networkingACL?

交叉检查安全组的规则。

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

要解决这个问题,需要完成的所有工作就是为您configuration了NAT的实例禁用“源/目标检查”。 这可以在AWS控制台的“实例操作”下完成。

参考

这适用于我:

  • VPC子网172.20.0.0/16
  • EC2“nat”网关172.20.10.10与EIP

去做 :

  • 设置禁用的源/目标。 检查你的“nat gw”
  • 创build一个新的“nat-sub”子网,例如172.20.222.0/24
  • 修改路由0.0.0.0/0到172.20.10.10(my nat gw)为“nat-sub”
  • 使用“nat-sub”创build一个EC2
  • 在您的NAT网关作为根,尝试:

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中添加这两行

安全组 – >出站

 * ALL Traffic ALL ALL 0.0.0.0/0 Allow 

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

您可以使用AWS前端启用“出站安全组” – >“出站”

确保为AWS实例select了正确的组

他们有一个称为NAT网关的相对较新的产品,就是这样做的,在你的pub / private子网的边缘创build一个托pipe的NAT实例。