如何从亚马逊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 10.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实例。