在前面的文章中,总结了ROS搭建SNAT网关使专有网络访问Internet,它的主要思路是在VPC网络里面创建一个ECS做NAT网关的角色以便实现VPC网络访问internet的功能。坦白的说,这个方法是比较复杂的。今天介绍一个ROS的新资源NAT Gateway,通过它能非常方便的实现这个功能,在专有网络中的机器与Internet互访不是梦。
Nat Gateway介绍
NAT网关(NAT Gateway)是一款企业级的VPC公网网关,提供NAT代理(SNAT、DNAT)、10Gbps级别的转发能力、Region级别的高可用性(跨可用区的容灾能力)。
共享带宽包(Bandwidth Package)是对NAT网关上的公网IP与公网带宽的封装;一个共享带宽包由一份公网带宽和一组公网IP组成,这些公网IP共享带宽。
NAT网关与共享带宽包需要配合使用,组合成为高性能、配置灵活的企业级网关。
NAT Gateway在VPC中的拓扑如下图所示:
关键特性:
DNAT:目的网络地址转换(入方向代理),用于VPC内的ECS面向互联网提供服务;支持端口映射、IP映射;
SNAT:源网络地址转换(出方向代理),用于VPC内的ECS访问互联网内容;
多IP共享带宽:NAT网关上购买公网IP和公网带宽时以“共享带宽包”形式购买,一个带宽包内的所有IP共享带宽;
高性能:NAT网关可以支撑单实例10Gbps级别的转发能力;
高可用:NAT网关基于SDN技术,采用跨可用区分布式架构,每个实例均具备应对可用区级别故障;
按需购买:所有费用均为先使用后结算,实例规格、带宽大小、公网IP个数均可随时调整、即时生效;
ROS Nat Gateway相关资源介绍
ALIYUN::ECS::NatGateway
这个资源是申明要在那个VPC中创建一个NAT Gateway。在创建NAT Gateway的时候必须指定VPC的ID,VSWITCH的ID,以及至少一个带宽包。NAT Gateway
资源创建成功后会自动在VPC的路有表中添加一条指向NAT Gateway的路由表项。通过ROS可以输出NAT Gateway的ID, 所有带宽包的ID,所有带宽包中申明的所有公网IP,Forward 表ID,SNAT表ID。
"NatGateway": {
"DependsOn": "VSwitch",
"Properties": {
"BandwidthPackage": [
{
"Bandwidth": 5,
"IpCount": 1,
"ZoneId": "cn-hangzhou-b"
},
{
"Bandwidth": 5,
"IpCount": 1,
"ZoneId": "cn-hangzhou-b"
}
],
"Description": "hhhhh",
"NatGatewayName": "nat_gateway_1",
"Spec": "Middle",
"VSwitchId": {
"Fn::GetAtt": [
"VSwitch",
"VSwitchId"
]
},
"VpcId": {
"Fn::GetAtt": [
"Vpc",
"VpcId"
]
}
},
"Type": "ALIYUN::ECS::NatGateway"
}
ALIYUN::ECS::BandwidthPackage
带宽包也可以单独作为一个资源创建,然后关联到一个具体的NAT Gateway。创建带宽包必须要指定NAT Gateway的ID,带宽大小,以及所需要的公网IP数量。
资源创建完成后,通过ROS可以输出带宽包ID和带宽包中所申请的所有IP
BandwidthPackage": {
"Type": "ALIYUN::ECS::BandwidthPackage",
"Properties": {
"BandwidthPackageName": "pkg_2",
"Description": "new bandwidth package",
"NatGatewayId": "ngw-h1xoxepyf",
"IpCount": 2,
"Bandwidth": 5,
"ZoneId": "cn-beijing-c"
}
}
ALIYUN::ECS::ForwardEntry
本资源是给NAT Gateway的目的网络转换表添加访问规则,通过这条规则可以让外网主动访问VPC网络中的机器。创建一条规则必须传入Forward表的ID,网络协议,VPC内部机器的IP,内部机器的端口,暴漏给外网访问的IP和端口。外网的IP,就是带宽包中所申请的IP资源。
资源创建完成,通过ROS可以输出这条规则的ID
下面的例子展示如何配置一个外网通过22端口访问在VPC网络的机器。
"ForwardEntry": {
"Properties": {
"ExternalIp": {
"Fn::Select": [
"1",
{
"Fn::GetAtt": [
"NatGateway",
"BandwidthPackageIps"
]
}
]
},
"ExternalPort": "22",
"ForwardTableId": {
"Fn::GetAtt": [
"NatGateway",
"ForwardTableId"
]
},
"InternalIp": "192.168.0.1",
"InternalPort": "22",
"IpProtocol": "TCP"
},
"Type": "ALIYUN::ECS::ForwardEntry"
}
ALIYUN::ECS::SNatEntry
本资源给源网络地址转换表配置一条规则,通过这个规则可以让VPC中的机器能主动访问外网。创建一条规则必须传入SNAT表的ID,将要访问外网的VSWITCH ID,以及通过那个外网IP访问外网,这个IP也是带宽包中所申请的IP。如果同时需要主动,被动访问外网的,就必须至少有两个外网IP。也就是SNAT和Forward表的公网IP不能相同。
"SNatEntry": {
"Properties": {
"SNatIp": {
"Fn::Select": [
"0",
{
"Fn::GetAtt": [
"NatGateway",
"BandwidthPackageIps"
]
}
]
},
"SNatTableId": {
"Fn::GetAtt": [
"NatGateway",
"SNatTableId"
]
},
"SourceVSwitchId": {
"Fn::GetAtt": [
"VSwitch",
"VSwitchId"
]
}
}
下面是一个完整的模版创建一个VPC网络,然后配置NAT Gateway,让VPC的中的ECS实例能和Internet互访。完整模版下载 ->>