【问题标题】:AWS VPC - Internet Gateway vs. NAT [closed]AWS VPC - Internet 网关与 NAT [关闭]
【发布时间】:2016-12-06 00:17:49
【问题描述】:

什么是互联网网关?什么是 NAT 实例?他们提供什么服务?

阅读 AWS VPC 文档,我了解到它们都将私有 IP 地址映射到用于传出请求的 Internet 可路由地址,并将来自 Internet 的传入响应路由到子网上的请求者。

那么它们之间有什么区别呢?我在哪些场景中使用 NAT 实例而不是(或除此之外)互联网网关? 它们本质上是运行某些网络应用程序的 EC2 实例,还是像路由器这样的特殊硬件?

除了简单地指向 AWS 文档链接之外,您能否通过添加一些关于什么是公共子网和私有子网的背景来解释这些内容,以便任何网络知识有限的初学者都可以轻松理解这些内容? 还有什么时候应该使用 NAT 网关而不是 NAT 实例?

附:我是 AWS VPC 的新手,所以我可能会在这里比较苹果和橘子。

【问题讨论】:

    标签: amazon-web-services amazon-vpc


    【解决方案1】:

    互联网网关

    互联网网关是Amazon VPC 和互联网之间的逻辑连接。它不是物理设备。每个 VPC 只能关联一个。它确实限制 Internet 连接的带宽。 (带宽的唯一限制是 Amazon EC2 实例的大小,它适用于所有流量——VPC 内部和 Internet 外的流量。)

    如果 VPC没有互联网网关,则 VPC 中的资源无法从互联网访问(除非流量通过公司网络和 VPN /直接连接)。

    如果子网具有将流量引导至 Internet 网关的路由表,则该子网被视为公共子网

    NAT 实例

    NAT 实例是配置为将流量转发到 Internet 的 Amazon EC2 实例。它可以从现有的 AMI 启动,也可以通过用户数据进行配置,如下所示:

    #!/bin/sh
    echo 1 > /proc/sys/net/ipv4/ip_forward
    echo 0 > /proc/sys/net/ipv4/conf/eth0/send_redirects
    /sbin/iptables -t nat -A POSTROUTING -o eth0 -s 0.0.0.0/0 -j MASQUERADE
    /sbin/iptables-save > /etc/sysconfig/iptables
    mkdir -p /etc/sysctl.d/
    cat <<EOF > /etc/sysctl.d/nat.conf
    net.ipv4.ip_forward = 1
    net.ipv4.conf.eth0.send_redirects = 0
    EOF
    

    私有子网中想要访问 Internet 的实例可以通过路由表配置将其 Internet 绑定流量转发到 NAT 实例。然后,NAT 实例将向 Internet 发出请求(因为它位于公共子网中),响应将被转发回私有实例。

    发送到 NAT 实例的流量通常会发送到与 NAT 实例本身不相关的 IP 地址(它的目的地是 Internet 上的服务器)。因此,关闭 NAT 实例上的 Source/Destination Check 选项很重要,否则流量将被阻止。

    NAT 网关

    AWS 引入了可以代替 NAT 实例的 NAT 网关服务。使用 NAT 网关服务的好处是:

    • 这是一项完全托管的服务 - 只需创建它,它就会自动运行,包括故障转移
    • 最高可突增至 10 Gbps(NAT 实例受限于与 EC2 实例类型相关的带宽)

    但是:

    • 安全组不能与 NAT 网关关联
    • 每个 AZ 都需要一个,因为它们只在一个 AZ 中运行

    【讨论】:

    • 你能在你的笔记中多加一点吗?如果您在公共子网上有 IGW,NAT 实例将起作用。它们还限制从 Internet 到子网中您的实例的反向查找。
    • 现在在 2019 年,NAT gw 可以仅在 VPC 中使用,在“公共”子网或具有“互联网网关”的子网中分配 EIP,在内部子网中,只需路由到 NAT gw .
    • 这个答案仍然准确吗?从AWS docs,我看到:An internet gateway is a horizontally scaled, redundant, and highly available VPC component that allows communication between instances in your VPC and the internet. It therefore imposes no availability risks or bandwidth constraints on your network traffic.。从描述中我得到的印象是它是一个实际的硬件设备,但由 AWS 管理。如果我的理解不正确,请纠正我。
    • @Sandeep NAT 实例和 NAT 网关存在于 VPC 中。因此,任何离开它并前往 Internet 的流量仍需要通过 Internet 网关。如果没有 Internet 网关,则无法访问 Internet。
    • 这个答案显然被复制到媒体几乎一字不差:stackoverflow.com/questions/38690012/…
    【解决方案2】:

    就 NAT 网关与 NAT 实例而言,两者都可以。一个 NAT 实例可能会便宜一些,但 NAT 网关完全由 AWS 管理,因此它的优点是不需要仅为 NAT 维护一个 EC2 实例。

    但是,对于需要可用于 Internet 的实例,NAT 网关/实例并不是您要寻找的。 NAT 将允许私有实例(没有公共 IP)访问 Internet,但反之则不行。因此,对于需要访问 Internet 的 EC2 实例,您需要分配一个公共 IP。如果您确实需要将 EC2 实例保持私有,则有一种解决方法 - 您可以使用弹性负载均衡器来代理请求。

    互联网网关

    互联网网关是您的 VPC 连接到互联网的方式。您使用带有路由表的互联网网关来告诉 VPC 互联网流量如何到达互联网。

    互联网网关仅作为名称出现在 VPC 中。 Amazon 负责管理网关,您实际上没有任何发言权(除了是否使用它;请记住,您可能需要一个完全分段的子网,根本无法访问互联网)。

    公有子网是指互联网流量通过 AWS 的互联网网关路由的子网。公共子网中的任何实例都可以分配一个公共 IP(例如,启用了“关联公共 IP 地址”的 EC2 实例)。

    私有子网意味着实例不能从 Internet 公开访问。他们没有公共 IP 地址。例如,您不能通过 SSH 直接访问它们。不过,私有子网上的实例仍然可以自己访问互联网(即通过使用 NAT 网关)。

    【讨论】:

    • 关于 NAT 与 Internet 网关的最佳答案。
    • 很好的答案。只是一个后续问题:当公共子网上的 EC2 实例具有公共 IP 时,从逻辑上讲,它可以自给自足地接收来自 Internet 的入站请求或向 Internet 发出出站请求,因为它的 IP 是可路由且可访问的。那么互联网网关在这里做了哪些额外的工作呢?
    • @Sandeep EC2 实例没有任何真正的公共 IP,但在幕后,它被映射到一个私有 IP 地址。 Internet 网关有两个用途:在您的 VPC 路由表中为 Internet 可路由流量提供目标,以及为已分配公共 IPv4 地址的实例执行网络地址转换 (NAT)
    • 这应该是公认的答案
    【解决方案3】:

    Internet 网关用于将 vpc 连接到 Internet,而 NAT 网关用于将私有子网连接到 Internet(这意味着任何流量都将进入私有子网实例,该实例将转发到 NAT 网关)。您需要将路由表中的流量转发到 NAT

    路由表 0.0.0.0/0

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-31
    • 1970-01-01
    • 2021-05-30
    • 2020-03-10
    • 2021-11-23
    • 1970-01-01
    • 2021-01-23
    相关资源
    最近更新 更多