VPC(virtual private cloud):虚拟网络,并且该网络是aws账号专有的,每个账号都有自己的虚拟网络;(我的理解他就是被分配的一个网段,eg:172.31.0.0/16)。简单来说,VPC就是一个AWS用来隔离你的网络与其他客户网络的虚拟网络服务。在一个VPC里面,用户的数据会逻辑上地与其他AWS租户分离,用以保障数据安全。可以简单地理解为一个VPC就是一个虚拟的数据中心,在这个虚拟数据中心内我们可以创建不同的子网(公有网络和私有网络),搭建我们的网页服务器,应用服务器,数据库服务器等等服务。
CIDR:是vpc的私有网络ip地址范围;
subnets(子网):vpc地址范围的子集;aws会给每个AV zone(数据中心)都分配子网;
route table(路由表):用来决定网络流量去向的一组规则,可以自己建立一些规则来决定网络流量去向
互联网网关:EC2使用它来和外界进行通信的一个组件,它是可水平扩展,冗余和高可用的
DHCP option sets:通过dhcp服务器分配给vpc里面的实例的配置集合
network ACL:子网级别的防火墙(和安全组不同的是,安全组是针对某一个实例的防火墙,而子网级别的防火墙是针对一个子网中的全部实例)
特点:
特点:在每一个区域(Region),AWS都有一个默认的VPC;在这个VPC里面所有子网都绑定了一个路由表,其中有默认路由(目的地址 0.0.0.0/0)到互联网;所有在默认VPC内启动的EC2实例都可以直接访问互联网;在默认VPC内启动的EC2实例都会被分配公网地址和私有地址
在aws管理界面services处的搜索框输入VPC并进入其界面,点击左侧导航栏处的 your VPCs,进入后我们可以看到默认使用的VPC,在actions中可以选择 edit CIDRs来修改地址的范围;
点击左侧导航栏处的subnet,就可以看到其分配的子网,选中其中一个,点击actions–>create flow log 可以对网络流量进行监控;
点击左侧导航栏处的 route tables ,在进入的页面中选择下面的 routes–>edit routes 就可以添加一些路由策略;
点击左侧导航栏处的 dhcp options sets ,可以看到其默认的设置,这里的options处的设置决定了创建好实例后,其详细信息处所显示的公有和私有域名解析是什么;
点击左侧导航栏处的 network ACLs(访问控制列表),会有默认的acl,分别对应三个子网,acls默认的执行顺序是自上而下(从序号的低到高)执行
进入vpc界面,点击create vpc,在进入的界面中输入自定义名称,定义ip地址的范围(例如输入10.0.0.0/16),其他默认,点击create即可
点击左侧导航栏的subnet,点击create subnet ,在进入的界面中自定义名称(例如name=public),ypc处将刚才自己创建的vpc选中,其他默认,在 ipv4 CIDR block中输入子网(例如:10.0.0.0/24),点击create;同理创建一个private子网(10.0.1.0/24)
此时就成功的创建了两个子网,可以选中其查看相关详细信息。注意需要将public选中,点击actions–>modify auto assign ip settings,在进入的页面中,将atuo-assgin ipv4 后面的enable选中,表示自动分配公有ip地址
进入EC2的管理界面,创建新的实例,注意在第三步的network处选择刚才自己创建,下面的subnet可以选择public的;到第六步时,选择创建一个新的安全组,在下面再添加一个开放80端口的策略,其他按步骤创建即可;同理再创建一台处于pravite网段的实例,注意安全组策略处,创建新的安全组,在ssh策略的source处custom,后面的框选择刚才创建的安全组的id。此时就创建好两台处于不同网段的实例
回到 route tables ,选中自己创建的vpc那条信息,点击下面的routes。点击edit routes,添加 0.0.0.0/0,后面这里选择 internet gateway,将其关联起来,保存。此时就有了去internet的路由
此时再去连接就可以成功连接,此时就可以使用该主机去连接private的主机了。首先需要将private主机的key复制到该主机,然后使用ssh去连接即可 。也就是说使用public作为中间主机去跳转到private主机上(这是因为私有的这台主机没有被分配公网地址,而只有私网地址,所以要访问时,需要一个中间主机)
注意:公有子网和私有子网的区分主要就是公有子网关联到了路由表,而路由表关联到了internet 网关,路由表会告诉公有子网该怎么走去外网;而私有子网并没有关联路由,不知道怎么走,也无法出去,所以就是私有子网了
NAT设备将私有网段实例的网络流量转发到互联网或者其他AWS服务,然后将响应的流量转发回给实例。AWS NAT 设备支持两种形式:
NAT实例:一台执行NAT地址转换的AMI Linux EC2实例;NAT实例的瓶颈在于实例的大小,如果遇到了网络吞吐瓶颈,你可以加大实例类型;可以自己创建弹性伸缩组(Auto Scaling Group),自定义脚本来达到NAT实例的高可用(比如部署在多个可用区)
NAT网关:AWS管理的一项NAT服务。一般使用该服务而不是NAT实例,因为NAT网关具有高可用,高宽带,而且不需要用户进行管理
NAT实例的创建:
搜索“amzn-ami-vpc-nat”的AMI,选择一个进行创建并放置在公共子网上。该实例必须要有公有ip以访问互联网
在NAT实例上禁用“SrcDestCheck”的功能(源到目的的检查)
在私有子网的路由表添加条目,配置该子网的实例通过NAT实例访问互联网
首先创建实例,在第一步选择左侧导航栏处的community AMIs ,在上面的搜索栏输入 vpc-nat ,选择出现的第一个镜像即可;在第三步network选择自己创建的, subnet处选择public的网段;在第六步处选择之前创建的允许80端口的已存在的安全组策略,其他默认。
选中刚才创建好的NAT实例,actions–>networking --> change sourcedest check ,在进入的界面,将其disable即可
在vpc的route tables处,点击 create route table ,自定义名称,vpc选择自己创建的,选中该信息,点击actions --> edit subnet associate ,在进入的页面中选中私有的subnet,将其关联上去。关联之后点击下面的routes,edit routes,add route 0.0.0.0/0 后面的框中选择刚才创建的NAT实例,保存
在公共子网上创建一个NAT网关,该网关必须要有公有ip以访问互联网
在私有子网的路由表添加条目,以允许该子网的实例通过NAT网关访问互联网
网络吞吐可以达到10Gbps;不需要关联安全组
实验:
注意,在做实验前,先将之前设置的NAT实例删除,删除后私有网段的实例就无法访问外网。
在vpc界面的左侧导航栏处找到 NAT gateways并点击进入,点击create NAT gateway ,在进入页面的subnet处指定public子网,在下面的 elastic ip id 处,点击后面的 create new EIP即可,最后点击create。点击create后,在弹出的页面处点击 edit route tables ,进入后选择在NAT实例处创建的路由策略,进入后将之前的策略删除,创建一个新的策略 0.0.0.0/0 后面的框选择刚才创建的NAT gateway,保存即可。
选择刚才的路由策略,在下面的表头中选择 subnet associates ,点击 edit subnet associates ,将私有的网段选中,点击保存
此时使用私有实例去访问互联网 curl www.baidu.com
是可以成功的
注意在做完实验后,需要将设置的NAT gateway进行删除,否则会产生费用;再在左侧导航栏处选择 Elastic ips ,将其release。
从下面的图中可以看到,当产生进站的流量时,会通过路由首先评估route table的规则,然后进入nacl,子网级别的访问控制,如果流量被允许,才会进入到安全组级别,通过后才会进入实例;如果是出站流量,先要通过安全组(默认允许所有流量出去),再进入nacl(根据规则判断,如果规则允许,才会进入路由),再去询问路由表,决定流量如何转发
首先进入EC2的管理界面,创建一台实例,放于public子网中,并在创建时,使用用户数据的方式安装apahce服务。选中该实例,在下面的详细信息处找到安全组,点击后面的链接跳转到安全组界面,下面可以看到安全组策略,在inbound处可以看到,允许进站的流量包括80和22端口;在outbound中可以看到允许出站的流量默认是所有
此时再浏览器输入该实例的ip,是可以访问到该实例apahce的发布页面中写的内容的。此时可以进入其安全组,在出站流量处,将允许所有流量出站的策略删除。此时再去浏览器访问,依旧可以成功访问,这表明安全组本身就是默认允许所有出站的流量
在vpc页面的左侧导航栏处找到network acls,点击进入,进入后会看到两条默认的访问控制策略。此时点击 create network acl ,自定义名称,在下面的vpc处选择之前自定义的vpc即可,创建完成后选中自己创建的acl,在下面查看详细信息处,可以看到入站流量和出站流量默认对所有都是拒绝的,并且没有关联到任何子网。所以需要将其关联到子网,选中后–>actions–>edit subnet associate --> 选择public子网进行关联
此时再使用浏览器去访问该实例的ip,就无法查看到其页面,此时可以在刚才创建的acl处的入站流量处,点击 edit inbound rules --> add rule --> 100 (顺序数字) 、http(80),其他默认,保存。此时再去浏览器访问依旧不成功,这是因为出站的没有被允许,所有页面根本无法到达外部浏览器。所以需要在出站处也添加一条允许 【rule=100、port range =1024-65535(临时返回流量的端口)】,保存即可。此时再去浏览器访问该页面是可以访问到的
再添加一条入站时的规则 【rule=200、type=http(80) 、allow/deny=deny】。此时再去访问页面是可以的,这是因为其执行规则是从低到高的,一旦匹配到规则,就不会再向下匹配。
注意:实验结束后,选中自建的acl ,点击actions --> edit subnet associate --> 将关联解除,取消publi子网前面的√并保存,然后再actions --> delete network acl;在安全组界面,在outbound处,编辑【type=all trafic 、custom 0.0.0.0/0】,保存;最后回到ec2界面将本次实验的实例terminate。
实验环境是之前创建的分别位于公有子网和私有子网的两台实例,公有子网的实例已经安装了apache服务,通过浏览器可以访问到放在默认发布目录下的发布文件。选中处在公有子网上的实例,从下面的详细信息处可以看到其 public DNS (IPV4) 处是没有DNS的,而private DNS处的ip格式就如:ip-PRIV-IP.REGION.compute.internal
在vpc界面,点击actions --> edit dns resolution ,进入的页面中 可以看到enable是被勾选的,表示dns server 在 vpc中是工作的,可以解析主机名,这也是私有dns存在的原因;在vpc界面,点击actions --> edit dns hostnames ,进入后可以看到其enable是没有开放的,这也就是没有 public dns的原因。将其enbale并保存,进入ec2管理界面,此时就可以看到公有子网的的public dns处有如:ec2-PUB-IP.REGION.compute.amazonaws.com 格式的公有dns
创建私有域,在services处的搜索框内搜索 route 53,在进入的页面点击 get started now ,点击 create hosted zone,在右侧弹出的窗口中输入域名(eg:lhy.local),在comment处输入说明(eg:private zone),type处选择 private,vpc id 处选择自己创建的vpc,完成后点击create。 在点击 create record set ,创建A记录,该记录是ip和域名的对应记录,在右边弹出的窗口 自定义名称(eg:www) ,type处选择 A-ipv4 address,value处写入公有子网实例的公有ip,然后点击create,此时就会产生一条A记录
连接到两台实例的控制台,输入 dig www.lhy.local
,此条解析可以看到的结果是产生一条A记录 ,ip是公有子网的实例的ip,此时输入curl www.lhy.locla
就可以看到apache发布文件 。但是此时是无法从浏览器输入自定义域名访问页面的
注意:最后实验结束需要将创建的host zone删除,把所有创建的都选中,然后点击上面的 delete record set,结束后再次查看,若有在route 53界面中没有被删除掉的,都进行删除。
vpc peering支持不同区域和账户之间的vpc互连,其完全由aws进行管理,所以不存在单点故障或带宽限制,可以根据需要自动的水平扩展带宽
vpc peering限制条件:
实验:
分别使用两个不同的地区,在其中一个地区创建一个vpc,或者是用之前的vpc,在另一个地区使用默认的vpc;分别在两个地区的vpc中创建实例,可以使用之前创建好的公有和私有,同时在另一个地区也创建一台实例,在创建时,在安全组的inbound中将其ICMP(可以实现ping)的端口打开
此时在vpc页面的左侧导航栏处找到 vpc peering,点击create peering connection ,在进入页面的 name处自定义一个名称,在下面的vpc(requester)处选择自己创建的vpc,在region处选择 another region 在其下拉菜单处选择另一个需要连接的地区,在 vpc(accepter)处需要手动输入另一个需要连接地区的vpc id,点击create即可
此时需要切换到另一个地区,进入peering connections处,将请求连接选中,点击actions–> accept request,此时两边就连接成功
此时还需要分别在两个路由表中添加路由条目,进入vpc页面左侧菜单栏的 route tables ,在routes中点击edit,点击add,【des处填写另一个区域的vpc范围包括掩码eg:172.31.0.0/16 ,target处选择刚才自己创建的peering connection】保存即可,同时在另外一个地区同样的步骤添加一条路由条目
通过控制台连接到第一个区域的public实例上,在通过一个控制台连接第二个区域上创建的实例,注意这两个实例的ip没处于同一个网段,但此时去相互ping依旧是可以成功的
注意:完成实验后,进入vpc–>peering connection–>actions -->delete vpc peering connection 这里只需要删除其中一个区域的即可,另一个会被自动删除;同时需要将两边route table中添加的条目删除;将另一个不需要的地区中创建的实例也terminate
特点:
类型:
终端端点的访问控制方式:
实验:
实验前,已经有两台之前已经创建好的私网和公网的实例,现在给处于私网的实例添加权限。选中该实例–> actions–>安全 -->attach/replace IAM role -->如果之前有添加过s3的权限,那就直接选择即可(这里添加s3权限的role参考前面的内容)。连接到处于私网实例的控制台输入 aws s3 ls
【ssh ec2-user@ip -i .pem秘钥文件
】,可以查看到现在存在的bucket。注意此时该实例是可以上网的,是通过nat gateway以及路由表上通过 nat gateway 上外网的条目 去上外网的,此时私网的实例是通过上外网再回来访问AWS的s3服务的。
将该实例的通过 nat gateway 上外网的条目删除,此时使用命令行的方式去访问互联网是不成功的,那么可想而知此时也无法访问AWS的s3服务。
此时可以通过终端节点的方式去访问AWS的服务,进入vpc的管理界面,在左侧导航栏处找到 endpoints ,点击进入,点击create endpoint ,在 service category 处选择 AWS services即可,然后在下面找,选择 s3 的 gateway类型(也可以选择interface类型,这里选gateway);在下面的vpc处选择自己创建的vpc;当创建完endpoint后会自动的去添加路由条目,在configure route table处下面选择关联到私网的实例处;policy处选择full即可。此时可以看到endpoint已经创建成功,选中该终端节点,在下面的 route tables 处点击 manage route tables ,这可以关联不同的subnet,我们可以进入私有实例的路由条目里,此时可以看到自动生成了。
此时我们可以进入私网实例的命令行,此时依旧无法访问互联网,输入 aws s3 ls
后也无法访问,这是因为该命令有默认区域,所以在使用该命令时,必须要加上区域参数,表明endpoint所在的区域,例如aws s3 ls --region ap-southest-2
,此时就可以访问到bucket了。
注意:做完实验后,在endpoint页面处,actions–>delete endpoint,将终端节点删除
默认情况下,您在 Amazon VPC 中启动的实例无法与您自己的(远程)网络进行通信。您可以通过创建 AWS 站点到站点 VPN(站点到站点 VPN)连接并将路由配置为通过该连接传输流量,从 VPC 启用对远程网络的访问。每个 VPN 连接均包括两条 VPN 隧道,可以同时使用这两条隧道来实现高可用性。
VPN(虚拟私有网络):在现有连接的基础上创建一个虚拟的私有链路,该链路会将所传输的数据进行加密,通过就可以安全的连接到某个内网
site-to-site VPN:一项建立本地企业网络和AWS VPC之间安全私密的网路连接的VPN服务;每个VPN连接包括两个VPN链路,达到高可用以及负载均衡的目的
注意:
常用组件:
应用场景:
用户网关设备:包括硬件或虚拟设备,可以去其官方文档上查看其所支持的用户设备类型
实验:
步骤:
1)创建一个用户网关
2)创建一个虚拟私有网关
3)在route table 启用 route propagation -VPG自动生成路由条目
4)创建一个VPN连接(选择 static route ,并指定用户网络CIDR)
5)从VPN连接页面下载配置文件,然后对用户网关设备进行配置,网址信息https://docs.aws.amazon.com//latest/s2s/customer-gateway-device-windows.html
实验准备,在默认的vpc里面创建分别输入公网和私网的两台实例,连接到私有实例上,此时是无法访问互联网的,再起下面的详细信息处可以点击进入其安全组,其安全组的策略是ssh–22以及ICMP-ipv4–All,此时使用公网的实例去ping私网的实例是可以成功的(同一个网段内不同子网ip是不可以ping通的,这里可能是因为有网关或其他自动设置)
再运行一台(windows server 2012 R2)虚拟机,将其作为用户网关使用,其ip地址设置为10.1.1.6/24,会再随机分配一个公有ip【这里使用了一个环境,但是未给出是什么环境创建的】
进入到vpc界面,点击左侧导航栏处的 customer gateways ,点击create customer gateway,自定义名称,routing处选择static,将其公有ip输入即可;再在左侧导航栏处选择 virtual private gateway进入,点击create,自定义名称,在asn处选default即可。创建好后它是一个deattach状态,所以需要将其attach到vpc上,点击actions–>attach to vpc,选择默认的vpc即可;在左侧导航栏寻找,进入route table中创建一个私有网段的路由表,然后将其连接到私有subnet中,然后在route propagation中点击edit,将里面的选项勾选,表示自动写路由,然后保存。再点击route,点击edit,des处写用户网关的网段CIDR,target处写刚才创建的 virtual private gateway ,保存即可;再左侧导航栏选择site-to-site VPN corneclions,点击 create connection,自定义名称,在virtual private gateway 处选择刚才创建的,customer gateway 也选择刚才创建的,route options 选择 static , static ip prefixs处填入用户网关的CIDR,其他默认即可。点击上面的 download configuretion,在弹出来的表格中选择 Microsoft的2012 R2版本,点击download
将下载下来命令的某些部分修改后,复制到Windows中执行,此时使用该Windows设备去ping私网实例的ip是可以成功的,也就是可以进行通信了,并且是不通过互联网的。此时回到 connection 界面,可以在下面看到其tunnel信息,有两个tunnel,一个是up状态,一个是down状态作为一个冗余存在
注意,做完实验需要将的连接、虚拟网关、用户网关都进行删除
1)相关概念
2)实验