背景
专有网络环境下,特定ECS往往需要公网访问能力,前面我们介绍了《ROS搭建SNAT网关使专有网络访问Internet》,利用ECS和EIP手动的搭建一个SNAT网关。
目前阿里云官方推出了专门的网络产品——NAT网关,对公网IP和公网带宽进行统一管理。
ROS资源介绍
ROS提供三个插件对NAT Gateway进行支持:
-
ALIYUN::ECS::NatGateway, 创建Nat网关,分配带宽包和公网IP
- VpcId: 给哪个VPC中创建NatGateway
- Spec: NAT网关的规格, 可选值:Small|Middle|Large
- BandwidthPackage: 可以申请多个带宽包,并设置带宽包的带宽值以及公网IP数。同一带宽包下的公网IP共享带宽。
-
ALIYUN::ECS::ForwardEntry, 配置端口转发规则, 提供外部访问vpc内部ip的能力
- ForwardTableId: 指向 NatGateway 的ForwardTableId
- IpProtocol: IpProtocol类型,可选TCP|UDP|Any
- ExternalIp: NatGateway 上的共享带宽包中的 IP
- ExternalPort: 源端口;取值范围:1~65535|Any
- InternalIp: 端口转发规则中的目标IP,是一个私网IP地址
- InternalPort: 目标端口;取值范围为1~65535|Any
-
ALIYUN::ECS::SNatEntry, 在指定的NAT Gateway上添加SNAT规则, 提供vpc访问公网的能力
- SNatTableId: 要在哪个SNAT表中添加规则
- SourceVSwitchId: 允许哪个VSwitch下的ECS通过NAT网关的SNAT功能访问互联网. 注意:这里是以VSwitch为基本单位
- SNatIp: 使用SNAT转换后使用的源地址;必须是当前NAT Gateway上的某个带宽包中的公网IP。注意:SNAT和DNAT不能配置相同的带宽包IP
ROS模板
本例创建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"
]
}
}
}