专有网络环境下,特定ECS往往需要公网访问能力,前面我们介绍了《ROS搭建SNAT网关使专有网络访问Internet》,利用ECS和EIP手动的搭建一个SNAT网关。
目前阿里云官方推出了专门的网络产品——NAT网关,对公网IP和公网带宽进行统一管理。
ROS提供三个插件对NAT Gateway进行支持:
ALIYUN::ECS::NatGateway, 创建Nat网关,分配带宽包和公网IP
VpcId: 给哪个VPC中创建NatGatewaySpec: NAT网关的规格, 可选值:Small|Middle|LargeBandwidthPackage: 可以申请多个带宽包,并设置带宽包的带宽值以及公网IP数。同一带宽包下的公网IP共享带宽。ALIYUN::ECS::ForwardEntry, 配置端口转发规则, 提供外部访问vpc内部ip的能力
ForwardTableId: 指向 NatGateway 的ForwardTableIdIpProtocol: IpProtocol类型,可选TCP|UDP|AnyExternalIp: NatGateway 上的共享带宽包中的 IPExternalPort: 源端口;取值范围:1~65535|AnyInternalIp: 端口转发规则中的目标IP,是一个私网IP地址InternalPort: 目标端口;取值范围为1~65535|AnyALIYUN::ECS::SNatEntry, 在指定的NAT Gateway上添加SNAT规则, 提供vpc访问公网的能力
SNatTableId: 要在哪个SNAT表中添加规则SourceVSwitchId: 允许哪个VSwitch下的ECS通过NAT网关的SNAT功能访问互联网. 注意:这里是以VSwitch为基本单位SNatIp: 使用SNAT转换后使用的源地址;必须是当前NAT Gateway上的某个带宽包中的公网IP。注意:SNAT和DNAT不能配置相同的带宽包IP本例创建VPC类型的ECS, 同时配置公网访问。主要片段如下:
创建NatGateway, 规格为小型,一个带宽包,两个公网IP "NatGateway": { "Type": "ALIYUN::ECS::NatGateway", "Properties": { "NatGatewayName": "NatGateway", "VpcId": { "Fn::GetAtt": [ "Vpc", "VpcId" ] }, "VSwitchId": { "Ref": "PubSubnet" }, "BandwidthPackage": [ { "Bandwidth": 10, "IpCount": 2 } ], "Spec": "Small" } } 创建ForwardEntry,开放ECS的22端口,通过带宽包的第一个IP进行转发 "ForwardEntryMaster": { "Type": "ALIYUN::ECS::ForwardEntry", "Properties": { "ExternalIp": { "Fn::Select": [ "0", { "Fn::GetAtt": [ "NatGateway", "BandwidthPackageIps" ] } ] }, "ExternalPort": "22", "ForwardTableId": { "Fn::GetAtt": [ "NatGateway", "ForwardTableId" ] }, "InternalIp": { "Fn::Select": [ "0", { "Fn::GetAtt": [ "Master", "PrivateIps" ] } ] }, "IpProtocol": "TCP", "InternalPort": "22" } } 创建SNatEntry,vswitch下的ECS可以通过带宽包的第二个IP访问公网 "SNatEntry": { "Type": "ALIYUN::ECS::SNatEntry", "Properties": { "SNatTableId": { "Fn::GetAtt": [ "NatGateway", "SNatTableId" ] }, "SNatIp": { "Fn::Select": [ "1", { "Fn::GetAtt": [ "NatGateway", "BandwidthPackageIps" ] } ] }, "SourceVSwitchId": { "Fn::GetAtt": [ "PubSubnet", "VSwitchId" ] } } }