AWS VPC-Internet网关与NAT [关闭]


209

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

阅读AWS VPC文档后,我收集了它们既将私有IP地址映射到用于传出请求的Internet可路由地址,又将传入响应从Internet路由到子网上的请求者。

那么它们之间有什么区别呢?我在什么情况下使用NAT实例代替Internet网关(或除了Internet网关)?它们实际上是运行某些网络应用程序的EC2实例,还是诸如路由器之类的特殊硬件?

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

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

Answers:


230

互联网网关

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

如果VPC 没有 Internet网关,则无法从Internet访问 VPC中的资源(除非流量通过公司网络和VPN / Direct Connect流动)。

如果子网具有将流量定向到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网关关联
  • 您需要在每个可用区中使用一个,因为它们只能在单个可用区中运行

4
您可以在笔记中再增加一点吗?如果您在公共子网中具有IGW,则NAT实例将起作用。它们还限制了从Internet到子网中您的实例的反向查找。
阿美亚

1
现在到2019年,NAT gw可以仅在VPC中使用,在“公共”子网或具有“ Internet网关”的子网以及内部子网中分配EIP,只需路由到NAT gw。
Felipe Buccioni

这个答案仍然准确吗?从AWS文档中,我看到了: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管理。如果我的理解不对,请纠正我。
Abhishek Divekar,

@AbhishekDivekar一切都没有改变。使用AWS时,请专注于您想要实现的目标,而不是考虑基础硬件。
约翰·罗滕斯坦

1
@Sandeep NAT实例和NAT网关存在于VPC中。因此,离开它并传输到Internet的所有流量仍将需要通过Internet网关。如果没有Internet网关,则将无法访问Internet。
John Rotenstein

127

至于NAT网关与NAT实例,两者都可以工作。NAT实例可能会便宜一些,但是NAT网关完全由AWS管理,因此它的优点是无需仅为NAT维护EC2实例。

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

互联网网关

Internet网关是您的VPC连接到Internet的方式。您将Internet网关与路由表配合使用,以告诉VPC Internet流量如何到达Internet。

Internet网关仅作为名称出现在VPC中。亚马逊管理网关,您实际上没有发言权(除了使用与否,请记住,您可能想要一个完全分段的子网,根本无法访问互联网)。

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

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


23
关于NAT与Internet网关的最佳答案。
塔加

好答案。只是一个后续问题:当公共子网上的EC2实例具有公共IP时,从逻辑上说,它的IP可路由且可访问就足以接收来自Internet的入站请求或向Internet发出出站请求。那么,Internet网关在这里还能做什么?
Sandeep,

@Sandeep EC2实例没有任何实际的公共IP,但在幕后将其映射到私有IP地址。Internet网关有两个目的:在VPC路由表中为可路由Internet的流量提供目标,并对已分配了公共IPv4地址的实例执行网络地址转换(NAT)
Omar Faroque Anik

11

Internet网关用于将vpc连接到Internet,而NAT网关用于将专用子网连接到Internet(这意味着流量将流向将转发到NAT网关的专用子网实例)。您需要将路由表中的流量转发到NAT

路由表0.0.0.0/0


感谢您的示例-帮助我摆脱困境!
克里斯,

此页面上有一个图:docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html阐明了NAT网关和IGW的用途。私有子网都需要两者都可以访问Internet
Maruthi
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.