Amazon VPC 中的公有子网和私有子网有什么区别?

Dev*_*opr 40 networking amazon-web-services amazon-vpc

当我启动带有允许所有流量进入我的私有子网的安全组的服务器时,它会显示一条警告,表明它可能对全世界开放。

如果是私有子网,那怎么可能呢?

Jas*_*oyd 41

主要区别在于关联路由表中 0.0.0.0/0 的路由。

私有子网将该路由设置为 NAT 实例。私有子网实例只需要一个私有 ip,互联网流量通过公有子网中的 NAT 路由。您也可以没有到 0.0.0.0/0 的路由,以使其成为真正的私有子网,无法访问互联网。

公共子网通过 Internet 网关 (igw) 路由 0.0.0.0/0。公共子网中的实例需要公共 IP 才能与 Internet 通信。

即使对于私有子网也会出现警告,但该实例只能在您的 vpc 内访问。

  • @commitedandroider - 外部流量只能到达实例,如果:它分配了公共 IP,它位于子网上,默认路由 0.0.0.0/0 指向互联网网关(也称为“公共子网”),分配的安全性如果网络 ACL 允许 ip/端口,则组允许指定端口上来自 0.0.0.0/0 的传入流量。如果其中任何一个设置不正确,公共流量将无法到达该实例。 (5认同)
  • 是什么使得该实例只能在您的 vpc 内部访问?如果我将一个实例放入私有子网中,是什么阻止了来自 vpc 外部的流量到达它。我看到默认情况下 vpc 网络 acl 允许所有流量 (2认同)

小智 8

AWS VPC 中“公有”子网和“私有”子网之间的区别仅取决于子网是否附加有 Internet 网关 (IGW)。来自AWS文档

如果子网与具有到 Internet 网关的路由的路由表关联,则该子网称为公有子网。如果子网与没有到 Internet 网关的路由的路由表关联,则称为私有子网。

IGW 允许来自 Internet 的网络流量到达子网内的端点。

回答你的第二个问题:

当我启动带有允许所有流量进入我的私有子网的安全组的服务器时,它会显示一条警告,表明它可能对全世界开放。如果是私有子网,那怎么可能呢?

在显示该警告时,AWS 似乎不会检查您选择的子网是否具有带有 IGW 的路由表。这是当您使用将所有入站流量列入白名单的安全组设置实例时,它们始终会显示的一揽子警告。他们在那里使用“可能是”(而不是“将是”)来掩盖他们的屁股,但只有当您位于公共子网上时,警告才相关。


小智 6

如此处所述

公共子网如果子网的流量路由到 Internet 网关,则该子网称为公共子网。 私有子网如果子网没有到 Internet 网关的路由,则该子网称为私有子网。


小智 5

这个问题的主题与上面描述的实际问题不同。这个话题在互联网上也很重要,搜索量也很高,正因为如此,其他网站对同一话题的看法要高得多,因为这里没有很好地定义,如果公共和私有子网都可以上互联网下载更新和包那么它们之间有什么区别呢?两者都应该是公开的,但让我澄清这一点,并从 AWS 的角度以及概念和实践的角度添加我的答案。

题目答案:

公共和私有子网是概念的名称,实际上并不是一个单独的实体。

被问到的实际问题的答案

警告在技术上是正确的,我假设您谈论的是入站流量,而不是出站流量,因为如果您想下载软件、软件包、更新,那么您必须在出站中添加每个 IP,这实际上既不好又耗时。 ,所以,警告是关于其他网络和私有类

例如:如果您在私有子网安全组中添加一个规则,例如入站 0.0.0.0/0,那么这并不意味着它可用于公共并且有人可以向该实例/服务/机器发送请求,实际上它是什么意味着其他私有子网或私有网络可以与您的实例或服务通信,例如 192.168.xx、172.16.xx、10.0.0.0 私有类,这只有在您的路由允许这样做时才有可能。除此之外,您可以忽略该警告而不必担心。在这里,您必须了解From the InternetTo the Internet之间的区别,因此根据安全组规则和帮助信息,它会向您显示任何人都可能误解的警告。

混乱

当您在 AWS VPC 中创建子网时,有一个选项Auto-assign Public IPv4这是主要问题,如果将其设置为 Yes,就会使人们感到困惑,那么您的子网就是公共的,无论名称或键值是什么您标记到子网,这意味着,在创建子网时,如果您使用像 Private Subnet-A 这样的名称,那么它并不意味着它的私有子网,这取决于您的用例和配置(自动分配公共 IP选项)。

公有子网和私有子网的区别:

可以从 Internet 访问公共子网中的实例,这意味着来自 Internet 的流量可以访问公共子网中的机器/实例/服务。您通常会在公共子网中保留负载均衡器、Web 服务器等内容。因此,当您创建它们时,您在它们前面添加名称 Public 以将它们与其他名称分开,并且启用Auto-assign Public IPv4并不重要,但是每次您选择标记为 Public 的 Public Subnet 时,您都有在启动 EC2 或 RDS/Service 实例时检查或启用自动分配公共 IPv4选项。但最好启用自动分配公共 IPv4在子网级别使其正确公开,因为这就是您有所作为并使用公私概念的原因,因此每当您在公共子网中启动任何服务/实例/机器时,它都可以从 Internet 访问到Internet,意味着,您可以通过 Internet 访问服务/实例,也可以在服务/实例中下载更新和包。您可以通过简单地输入命令curl wgetIP.com来检查谁将访问 Internet ,您将在结果中看到您的实例/机器公共 IP。

“因为,当您在启用了此属性的子网中启动实例时,公共 IP 地址会分配给为该实例创建的主网络接口 (eth0)。公共 IP 地址通过以下方式映射到主私有 IP 地址网络地址转换 (NAT)。” .....说,AWS .

无法从 Internet 访问私有子网中的实例。例如,您可以将数据库服务器、Redis 服务器或此类其他服务放在私有子网中,并且没有人可以从 Internet 访问它。它只能通过公共子网(Web 服务器、ELB 等)中的实例/机器/服务访问。因为它没有启用公共 IP 的选项,而且我们将其标记为私有以用于特定用途,如解释、安全性和不需要的 Internet 访问。这有利于架构级别的安全性以避免漏洞。要访问此私有子网服务/实例,您必须在安全组中添加允许规则并在路由表中添加适当的路由。

现在的问题是,

私有子网可以上网吗?

因此,默认情况下答案是no
如果您想通过私有子网或没有公共 IP 的子网或禁用了自动分配公共 IPv4的子网访问 Internet ,则需要创建 NAT 实例或 NAT 网关,并且该 NAT 网关必须具有公共 IP,因此您的具有私有 IP 的服务/实例将访问 Internet 并可以下载更新、软件和软件包。私有 IP 将流量路由到 NAT 网关,NAT 网关将路由到 Internet 网关。然后您可以开始从私有子网到 Internet 的通信,您只需运行命令curl wgetIP.com即可检查您的 IP,它将为您提供 NAT 网关公共 IP,因为 NAT 网关将为您进入 Internet,而 Internet 网关是外部与世界通信的路径,也是网络中的一个术语,用于将流量从入站传输到出站. 您可以简单地了解其出口的建筑物正门。

结论 公有子网中的实例可以直接将出站流量发送到 Internet,而私有子网中的实例则不能。相反,私有子网中的实例可以使用位于公共子网中的网络地址转换 (NAT) 网关访问 Internet。数据库服务器可以使用 NAT 网关连接到 Internet 进行软件更新,但 Internet 无法与数据库服务器建立连接。” .....说,AWS

链接:

互联网访问: https : //docs.aws.amazon.com/vpc/latest/userguide/VPC_Internet_Gateway.html

VPC 和子网基础知识: https : //docs.aws.amazon.com/vpc/latest/userguide/VPC_Subnets.html

具有公共和私有子网 (NAT) 的 VPC: https : //docs.aws.amazon.com/vpc/latest/userguide/VPC_Scenario2.html