【问题标题】:AWS VPC - Private subnet added to the public route table attached to internet gatewayAWS VPC - 添加到附加到 Internet 网关的公共路由表的私有子网
【发布时间】:2019-12-25 01:19:50
【问题描述】:

希望你们一切都好。

AWS 允许我们附加一个私有子网(在客户 VPC 中创建)和一个路由表,该路由表具有通过互联网网关到互联网的路由。它对私有子网中启动的实例有什么影响吗?或者它与私有子网没有链接到具有到 Internet 的路由的路由表一样好

问候 阿杰

【问题讨论】:

  • 您能描述一下您真正想要实现的目标吗?还是您只是出于兴趣而询问?

标签: amazon-web-services amazon-vpc


【解决方案1】:

如果子网有进出互联网的路由,则子网不是私有的。在私有子网中启动的实例无法访问 Internet,也无法从 Internet 访问。

例如,如果您有一个数据库实例,并且您不希望除实例之外的任何人访问该实例,您可以在私有子网中启动该实例。

另外,如果您希望私有子网中的实例访问互联网,您需要设置一个 Nat 网关(或一个 Nat 实例)

希望对你有帮助

【讨论】:

  • 谢谢。这个用例怎么样。创建 VPC -> 向其添加私有子网 -> 创建 Internet 网关并将其附加到 VPC -> 创建可访问 Internet 的路由表 -> 将私有子网附加到路由表。问题是,为什么 AWS 允许我们将私有子网附加到带有互联网路由的路由表?我理解我们需要一个 NAT 网关(从私有子网内访问互联网)的概念。
  • @Hadooplearner “为什么 AWS 允许我们将私有子网附加到具有 Internet 路由的路由表?” 因为“私有”不是 a 的实际属性VPC 服务知道的子网,它只是对由子网附加路由表中的条目定义的条件的概念描述。更改关联的路由表或更改表的路由是您将子网设为私有或公有的方式。
  • @Michael-sqlbot。谢谢。不过,我最近的观察略有不同。我已经检查过,如果子网是私有的(我指的是“自动分配公共地址”设置为 no(未选中)),那么在子网内启动的所有 EC2 实例都永远无法访问互联网,因为它们从未被分配公共.无论私有子网与公共路由表的关联状态如何,都会发生这种情况,即私有子网如果必须访问 Internet,则只有一种方式(NAT)。因此,我仍然怀疑为什么 AWS 允许我们将私有子网附加到公共路由表。
  • @Hadooplearner 禁用“自动分配公共地址”是在私有子网上完成的,但该设置不会使子网成为私有子网,它只会导致 VPC 不会将公共 IP 分配给在该子网中启动的实例,这是不是一回事。您还可以在您专门使用弹性 IP 地址并且不希望实例拥有您自己未附加的公共地址的公共子网上禁用该选项。 VPC 对子网是公有还是私有的了解为零,因此它允许您使用包含您需要的任何内容的路由表。
  • 谢谢。现在对我来说很有意义。肯定学到了新东西。再次感谢您的帮助
【解决方案2】:

首先,我们需要了解公有子网和私有子网之间的区别。


公共子网表示此子网附加了一个Internet Gateway。 私有子网表示此子网附加了一个NAT Gateway

并且 Internet 网关可以同时具有入站和出站,但 NAT 只能出站到 Internet。



一个 NAT 将在公共子网中构建,但附加到私有子网。


您可以同时拥有多个公有/私有子网并为其附加 NAT 或 IGW,但 IGW 在每个 VPC 中只能有一个。

在某些用例中,我们不会为子网附加任何类型的 NAT 和 IGW。那是因为它可能是一个数据库子网,并且不希望它与 Internet 通信。 通常,我们将为我们的应用程序(例如 EC2 或 ECS、内部负载均衡器)使用附加了 NAT 的子网。 另一方面,我们将使用连接了 IGW 的子网用于面向 Internet 的负载均衡器、Nginx、Apache。

AWS VPC 设计: https://aws.amazon.com/tw/answers/networking/aws-single-vpc-design/

【讨论】:

  • 谢谢大卫。我理解回应。我创建了一个新的 VPC 并向其中添加了一个私有子网。然后,我添加了一个可以访问互联网的路由表,并将私有子网附加到路由表。它对私有子网中启动的实例有什么影响,因为它们无法通过互联网访问。为什么 AWS 允许我们将私有子网附加到提供 Internet 访问权限的路由表。
  • 另外,如果安全组配置正确,我已经检查了在公共子网中启动的每个实例都可以自动从 Internet 访问。当公共子网中的实例即使没有路由表也可以访问互联网时,我不明白创建路由表和互联网网关的作用。
  • @Hadooplearner 如果这就是你所看到的,那么你在某处犯了一个观察错误。如果实例位于其关联路由表没有通往 Internet 的静态路由(通常是默认路由,用于目标 0.0.0.0/0)的任何子网上,则该实例无法访问 Internet。唯一的例外是在这种情况下实例仍然可以进行 DNS 查找,因为 VPC 有一些内置的魔法来处理 DNS 查找流量。
  • @Michael-sqlbot。谢谢。是的,那是我的错误。在再次尝试一些事情时,我确实意识到了我的错误,并准确地观察到了你刚刚在上面解释的内容。再次感谢。
【解决方案3】:

我认为这里隐藏的魔力在于私有子网中的实例需要一个公共 IP 才能与外部通信,我们从不认为这是我们生活中的问题。当我们的电脑连接到路由器时,它可以毫无问题地访问互联网,为什么它工作得如此顺利?这一切都是因为路由器为我们处理了一切,包括为我们分配私有 IP,为我们进行递归 DNS 查询,最重要的是,使用路由器的公共 IP 转换私有 IP,以便我们的计算机可以与外部进行双向通信。

让我们回到这个 AWS VPC 场景,您将带有默认路由的路由表附加到您的私有子网的 Internet 网关,这使它看起来像一个公共子网。但是,这些实例仍然没有公共 IP,而且与我们的路由器不同,AWS VPC 的 Internet 网关不做 NAT 工作!那么没有公网 IP 也没有 NAT 的实例如何访问互联网呢?这是不可能的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-25
    • 1970-01-01
    • 2020-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-02
    • 1970-01-01
    相关资源
    最近更新 更多