如何从亚马逊 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 1​​0.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 吗?

如何将 datastax 开发中心连接到亚马逊 EC2 实例中的远程集群?

为啥我无法从外部连接到 Kafka?

从 R 连接到亚马逊红移时出错 - Windows 10

putty 链接亚马逊服务器

我应该使用亚马逊的 AWS 虚拟私有云 (VPC) [关闭]