我通过向导将amazon VPC设置为“仅公共网络”,因此我的所有实例都在公共子网中 .
VPC中分配了弹性IP的实例可以毫无困难地连接到Internet .
但没有弹性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
我还可以做些什么?
10 回答
要解决此问题,需要做的就是禁用已配置为执行NAT的实例的“源/目标检查” . 这可以在AWS控制台的“实例操作”下完成 .
Reference
看来从没有弹性IP的实例进入外部的唯一方法是:
添加NAT(从ami-vpc-nat-beta启动额外的m1.small实例)并为其分配EIP
创建一个额外的子网"private"
将非EIP实例移至该私有子网
修改路由表:私有子网的0.0.0.0/0应该转到NAT
所以,仅添加NAT是不够的 . 应停止实例并将其移动到另一个子网中的另一个IP .
文档告诉你应该添加NAT Instance
http://aws.amazon.com/vpc/faqs/
您可以在此处找到有关如何设置nat实例的详细说明:http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_NAT_Instance.html
或者在公共VPC中创建NAT实例,并为该NAT实例添加静态路由
route add -net 0.0.0.0 netmask 0.0.0.0 gw 10.0.0.5 eth0
其中10.0.0.5是您的nat实例,只需确保包含NAT实例的安全组可以接受来自您需要访问Internet的框的内部流量
您可以在具有EIP的VPC中的任何实例上执行此操作 . 我描述的几条指令here应该可以帮到你 . BTW:不要忘记禁用source / dest . 校验
您是否检查了子网上的网络ACL?
交叉检查安全组的规则 .
路线表看起来很好 . 它应该工作 .
这对我有用:
VPC子网172.20.0.0/16
EC2 "nat"网关172.20.10.10与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
以root身份登录nat网关
,尝试:
如果有效,请在/etc/rc.local中添加这2行
Security Groups -> Outbound
如果您想连接到google.com等外部服务器,甚至想要更新sudo apt-get update,请允许Outbound
您可以使用AWS前端goto安全组 - >出站允许出站
确保为AWS实例选择正确的组
他们有一个名为NAT网关的相对较新的产品就是这样,在您的发布/私有子网边缘创建一个托管NAT实例 .