如何从亚马逊 vpc 连接到外部世界?
Posted
技术标签:
【中文标题】如何从亚马逊 vpc 连接到外部世界?【英文标题】:How to connect to outside world from amazon vpc? 【发布时间】:2012-05-01 21:32:36 【问题描述】:我通过向导将亚马逊 VPC 设置为“仅限公共网络”,因此我的所有实例都在公共子网中。
VPC 中分配有弹性 IP 的实例可以毫无问题地连接到互联网。
但是没有弹性 IP 的实例无法连接到任何地方。
存在 Internet 网关。 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
我还能做什么?
【问题讨论】:
【参考方案1】:似乎从没有弹性 IP 的实例中退出的唯一方法是:
添加一个 NAT(从 ami-vpc-nat-beta 启动一个额外的 m1.small 实例)并为其分配 EIP 创建一个额外的“私有”子网 将非 EIP 实例移动到该私有子网 修改路由表:来自私有子网的 0.0.0.0/0 应该去 NAT因此,仅添加 NAT 是不够的。应停止实例并将其从另一个子网移至另一个 IP。
【讨论】:
文档说您还必须为 NAT 实例分配 EIP。 事实上,如果不将 EIP 分配给 NAT 实例,它将无法工作。刚刚测试。 当然你的NAT应该有EIP。暗示着。编辑了答案 不要忘记在 NAT 实例源/目标检查中禁用。 他们一定是最近才进行了“NAT 实例源/目标检查”,因为我以前从来不用在连接之前禁用它。相当愚蠢的默认设置不允许外部连接,而我想象中的大多数人都会使用它。【参考方案2】:文档告诉您应该添加 NAT Instance
【讨论】:
【参考方案3】:问。没有 EIP 的实例如何访问互联网?
没有 EIP 的实例可以通过以下两种方式之一访问 Internet 没有 EIP 的实例可以通过 NAT 实例路由其流量 访问互联网。这些实例使用 NAT 的 EIP 实例遍历 Internet。 NAT 实例允许出站 通信,但不能使 Internet 上的机器启动 使用 NAT 连接到私有地址的机器,以及
http://aws.amazon.com/vpc/faqs/
您可以在此处找到有关如何设置 nat 实例的详细说明:http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_NAT_Instance.html
【讨论】:
【参考方案4】:或者在公共 VPC 中创建一个 NAT 实例并添加一个静态路由到该 NAT 实例
route add -net 0.0.0.0 网络掩码 0.0.0.0 gw 10.0.0.5 eth0
其中 10.0.0.5 是您的 nat 实例,只需确保包含 NAT 实例的安全组可以接受来自您需要 Internet 访问权限的盒子的内部流量
【讨论】:
我做了同样的事情,但是它弄乱了添加静态路由的实例的元数据。元数据:docs.aws.amazon.com/AWSEC2/latest/UserGuide/… 公共子网 + EIP 和私有子网 + NAT 实例是要走的路。【参考方案5】:您可以在您的 VPC 中具有 EIP 的任何实例上执行此操作。我描述的here 很少有说明应该对您有所帮助。顺便说一句:不要忘记禁用源/目标。检查
【讨论】:
是的,实际上不需要专用的 NAT 实例。任何实例都可以扮演这个角色。【参考方案6】:没有 EIP 的实例可以通过以下两种方式之一访问 Internet 没有 EIP 的实例可以通过 NAT 实例路由其流量以访问 Internet。这些实例使用 NAT 实例的 EIP 来遍历 Internet。 NAT 实例允许出站通信,但不允许 Internet 上的机器使用 NAT 发起与私有地址机器的连接。
https://docs.aws.amazon.com/vpc/latest/userguide/VPC_NAT_Instance.html
【讨论】:
【参考方案7】:您是否检查了子网上的网络 ACL?
交叉检查安全组的规则。
路由表看起来不错。它应该可以工作。
【讨论】:
请注意,这些问题是 5 个月前回答的。请注意,“我尝试在实例所属的安全组中打开所有入站和出站流量到 0.0.0.0/0。仍然没有成功。”表示它没有与安全组连接。【参考方案8】:解决此问题所需要做的就是为您配置为执行 NAT 的实例禁用“源/目标检查”。这可以在 AWS 控制台的“Instance Actions”下完成。
Reference
【讨论】:
如果您已经创建了一个 NAT 实例,那就是。目前尚不清楚用户是否这样做了。【参考方案9】:这对我有用:
VPC 子网 172.20.0.0/16 EC2“nat”网关 172.20.10.10 与 EIP待办事项:
设置禁用的源/目标。检查你的“nat gw” 创建一个新的“nat-sub”子网,例如:172.20.222.0/24 将“nat-sub”的路由 0.0.0.0/0 修改为 172.20.10.10(我的 nat gw) 使用“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 伪装 2> /dev/null || iptables -t nat -A POSTROUTING -o eth0 -s 172.20.222.0/24 -j 伪装
如果可行,在 /etc/rc.local 中添加这两行
【讨论】:
【参考方案10】:安全组 -> 出站
* ALL Traffic ALL ALL 0.0.0.0/0 Allow
如果您想连接到 google.com 等外部服务器,请允许出站 甚至想更新-sudo apt-get update
您可以使用 AWS 前端 goto Security Groups -> Outbound 允许出站
确保为您的 AWS 实例选择正确的组
【讨论】:
不,问题是关于没有弹性 IP 的实例。【参考方案11】:他们有一个名为 NAT 网关的相对较新的产品,它可以做到这一点,在您的 pub/private 子网边缘创建一个托管 NAT 实例。
【讨论】:
以上是关于如何从亚马逊 vpc 连接到外部世界?的主要内容,如果未能解决你的问题,请参考以下文章
您可以连接到亚马逊以外的 Amazon ElastiСache Redis 吗?