aws(学习笔记第七课) 私有子网使用NAT服务器

aws(学习笔记第七课)

  • AWS的私有子网使用NAT服务器

学习内容:

  • AWS的私有子网使用NAT服务器

1. AWS的私有子网使用NAT服务器

在上面的例子的网络构成图中,可能会发现一个问题。就是Private SubnetApache server无法访问互联网。比如,当需要软件更新的时候,或者访问其他web service的时候,不能实现互联网访问。那么有实现同时让Apache Server躲在堡垒机后面(没有公网IP地址),还能兼顾访问互联网吗,这个解决方案就是NAT服务。

在这里插入图片描述

  1. 首先学习什么是NAT
    • 学习参考

    • NAT的概念
      网络地址转换(NAT)是一种网络技术,用于在不同网络之间转换IP地址。它主要解决了IPv4地址短缺的问题,同时也可以增强网络安全性和提高网络性能。通过在路由器或防火墙设备上配置NAT,可以实现私有网络和公共网络之间的IP地址转换,从而隐藏内部网络的真实拓扑结构。

      • 静态NAT
        静态 NAT:一对一映射,将一个私有IP地址映射到一个公共IP地址。在这里插入图片描述
      • 动态NAT
        动态分配公共IP地址给私有IP地址,使得多个私有IP地址可以共享少量公共IP地址。在这里插入图片描述
    • SNATDNAT

      • SNAT
        SNAT 又称源地址转换。源地址转换是内网地址向外访问时,发起访问的内网ip地址转换为指定的ip地址(可指定具体的服务以及相应的端口或端口范围),这可以使内网中使用保留ip地址的主机访问外部网络,即内网的多部主机可以通过一个有效的公网ip地址访问外部网络。
        • 数据包从内网发送到公网时,SNAT会把数据包的源地址由私网IP转换成公网IP。
        • 当相应的数据包从公网发送到内网时,会把数据包的目的地址由公网IP转换为私网IP。
      • DNAT
        DNAT 又称目标地址转换。将私网中web服务器映射到公网IP,使其公网IP作为目标地址被公网中主机进行访问。
        • 数据包从外网发送到内网时,DNAT会把数据包的目标地址由公网IP转换成私网IP。
        • 当相应的数据包从内网发送到公网时,会把数据包的源地址由私网IP转换为公网IP。
    • AWS中的NAT实现

      • 实现之后的网络结构
        在这个结构中,位于私有子网的Apache Server没有直接访问互联网的路由,如果访问互联网0.0.0.0的场合,将其路由到公网的NAT Server,这样经过NAT Server的网络转换,同样能访问互联网。
        在这里插入图片描述
    • 定义NAT Server以及Apache Server的路由指向

      • 定义NAT Server所在的subnet

        		"SubnetPublicNAT": {
                 
        			"Type": "AWS::EC2::Subnet",
        			"Properties": {
                 
        				"AvailabilityZone": {
                 "Fn::Select": ["0", {
                 "Fn::GetAZs": ""}]},
        				"CidrBlock": "10.0.0.0/24",
        				"VpcId": {
                 "Ref": "VPC"}
        			}
        		},
        		"RouteTablePublicNAT": {
                 
        			"Type": "AWS::EC2::RouteTable",
        			"Properties": {
                 
        				"VpcId": {
                 "Ref": "VPC"}
        			}
        		},
        		"RouteTableAssociationPublicNAT": {
                 
        			"Type": "AWS::EC2::SubnetRouteTableAssociation",
        			"Properties": {
                 
        				"SubnetId": {
                 "Ref": "SubnetPublicNAT"},
        				"RouteTableId": {
                 "Ref": "RouteTablePublicNAT"}
        			}
        		},
        		"RoutePublicNATToInternet": {
                 
        			"Type": "AWS::EC2::Route",
        			"Properties": {
                 
        				"RouteTableId": {
                 "Ref": "RouteTablePublicNAT"},
        				"DestinationCidrBlock": "0.0.0.0/0",
        				"GatewayId": {
                 "Ref": "InternetGateway"}
        			},
        			"DependsOn": "VPCGatewayAttachment"
        		},
        		"NetworkAclPublicNAT": {
                 
        			"Type": "AWS::EC2::NetworkAcl",
        			"Properties": {
                 
        				"VpcId": {
                 "Ref": "VPC"}
        			}
        		},
        		"SubnetNetworkAclAssociationPublicNAT": {
                 
        			"Type": "AWS::EC2::SubnetNetworkAclAssociation",
        			"Properties": {
                 
        				"SubnetId": {
                 "Ref": "SubnetPublicNAT"},
        				"NetworkAclId": {
                 "Ref": "NetworkAclPublicNAT"}
        			}
        		},
        		"NetworkAclEntryInPublicNATHTTP": {
                 
        			"Type": "AWS::EC2::NetworkAclEntry",
        			"Properties": {
                 
        				"NetworkAclId": {
                 "Ref": "NetworkAclPublicNAT"},
        				"RuleNumber": "100",
        				"Protocol": "6",
        				"PortRange": {
                 
        					"From": "80",
        					"To": "80"
        				},
        				"RuleAction": "allow",
        				"Egress": "false",
        				"CidrBlock": "10.0.0.0/16"
        			}
        		},
        		"NetworkAclEntryInPublicNATHTTPS": {
                 
        			"Type": "AWS::EC2::NetworkAclEntry",
        			"Properties": {
                 
        				"NetworkAclId": {
                 "Ref": "NetworkAclPublicNAT"},
        				"RuleNumber": "110",
        				"Protocol": "6",
        				"PortRange": {
                 
        					"From": "443",
        					"To": "443"
        				},
        				"RuleAction": "allow",
        				"Egress": "false",
        				"CidrBlock": "10.0.0.0/16"
        			}
        		},
        		"NetworkAclEntryInPublicNATEphemeralPorts": {
                 
        			"Type": "AWS::EC2::NetworkAclEntry",
        			"Properties": {
                 
        				"NetworkAclId": {
                 "Ref": "NetworkAclPublicNAT"},
        				"RuleNumber": "200",
        				"Protocol": "6",
        				"PortRange": {
                 
        					"From": "1024",
        					"To": "65535"
        				},
        				"RuleAction": "allow",
        				"Egress": "false",
        				"CidrBlock": "0.0.0.0/0"
        			}
        		},
        		"NetworkAclEntryOutPublicNATHTTP": {
                 
        			"Type": "AWS::EC2::NetworkAclEntry",
        			"Properties": {
                 
        				"NetworkAclId": {
                 "Ref": "NetworkAclPublicNAT"},
        				"RuleNumber": "100",
        				"Protocol": "6",
        				"PortRange": {
                 
        					"From": "80",
        					"To": "80"
        				},
        				"RuleAction": "allow",
        				"Egress": "true",
        				"CidrBlock": "0.0.0.0/0"
        			}
        		},
        		"NetworkAclEntryOutPublicNATHTTPS": {
                 
        			"Type": "AWS::EC2::NetworkAclEntry",
        			"Properties": {
                 
        				"NetworkAclId": {
                 "Ref": "NetworkAclPublicNAT"},
        				"RuleNumber": "110",
        				"Protocol": "6",
        				"PortRange": {
                 
        					"From": "443",
        					"To": "443"
        				},
        				"RuleAction": "allow",
        				"Egress": "true",
        				"CidrBlock": "0.0.0.0/0"
        			}
        		},
        		"NetworkAclEntryOutPublicNATEphemeralPorts": {
                 
        			"Type": "AWS::EC2::NetworkAclEntry",
        			"Properties": {
                 
        				"NetworkAclId": {
                 "Ref": "NetworkAclPublicNAT"},
        				"RuleNumber": "200",
        				"Protocol": "6",
        				"PortRange": {
                 
        					"From": "1024",
        					"To": "65535"
        				},
        				"RuleAction": "allow",
        				"Egress": "true",
        				"CidrBlock": "0.0.0.0/0"
        			}
        		},
        
      • 定义NAT Server

        		"NatServer": {
                 
        			"Type": "AWS::EC2::Instance",
        			"Properties": {
                 
        				"ImageId": {
                 "Fn::FindInMap": ["EC2RegionMap", {
                 "Ref": "AWS::Region"}, "AmazonLinuxNATAMIHVMEBSBacked64bit"]},
        				"InstanceType": "t2.micro",
        				"KeyName": {
                 "Ref": "KeyName"},
        				"NetworkInterfaces": [{
                 
        					"AssociatePublicIpAddress": "true",
        					"DeleteOnTermination": "true",
        					"SubnetId": {
                 "Ref": "SubnetPublicNAT"},
        					"DeviceIndex": "0",
        					"GroupSet": [{
                 "Ref": "SecurityGroup"}]
        				}],
        				"SourceDestCheck": "false",
        				"UserData": {
                 "Fn::Base64": {
                 "Fn::Join": ["", [
        					"#!/bin/bash -ex\n",
        					"/opt/aws/bin/cfn-signal --stack ", {
                 "Ref": "AWS::StackName"}, " --resource NatServer --region ", {
                 "Ref": "AWS::Region"}, "\n"
        				]]}}
        			},
        			"DependsOn": "VPCGatewayAttachment"
        		},
        
      • Apache Server的互联网0.0.0.0的连接路由指向NAT Server

        		"RoutePrivateApacheToInternet": {
                 
        			"Type"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值