VPC NAT网关/私网连接组合动手实践
NAT网关反向访问
一、同账号下VPC之间的反向访问:
场景描述:
vpc-2(endpoint)和vpc-3(endpoint)是client端,vpc-1(endpointservice)是服务端;本次 是从服务端反向访问client端,是从vpc-1可以访问vpc-2和vpc-3:本次示例从ECS(ECS-0或者ECS-1)分别访问vpc-2(ECS-3和ECS-4);
(福利推荐:阿里云、腾讯云、华为云服务器最新限时优惠活动,云服务器1核2G仅88元/年、2核4G仅698元/3年,点击这里立即抢购>>>)
条件
- 至少两个VPC(vsw,ecs);
- nat反向访问开通白名单;
- 反向访问终端服务白名单;
- VPC NAT服务资源类型白名单;
操作步骤
1、vpc1 —作为service操作
创建vpc nat 网关:
- 登录https://vpc.console.aliyun.com/vpc-nat/eu-central-1/nats 专有网络控制台;
- 点击NAT网关;
- 点击VPC NAT 网关;
-
点击创建VPC NAT 网关;
- 选择地域:选择region
- vpc id: 选择vpc1;
- 可用区:选择对应的可用区(A/B);
- 交换机:选择对应的交换机;
- 实例名称:自己可以定义
- Privatelink服务使能:勾选
- 立即购买,如下图:
创建终端节点服务(endpointservice):
- 登录https://vpc.console.aliyun.com/vpc-nat/eu-central-1/nats 专有网络控制台
- 选择终端节点服务
-
创建终端节点服务
- 服务类型选择:VPC NAT网关
- 服务资源:VPC1的交换机和可用区
- 确定创建,如下图:
2、vpc2—作为client 操作
创建终端节点(endpoint)
- 登录https://vpc.console.aliyun.com/vpc-nat/eu-central-1/nats专有网络控制台;
- 终端节点:选择反向终端节点并点击创建终端节点;
-
创建终端节点:
- 填写节点名称:自定义;
- 终端节点类型:选择反向终端节点(2.2.2选择后默认);
- 终端节点服务:选择之前创建的endpintservice-(VPC1)
- 专有网络:选择VPC2后出现安全组和可用区与交换机;选择安全组和对应的可用区以及交换机(需要与vpc-1的交换机的可用区保持一致),确定创建,如下图:
- 注:控制台创建终端节点可用区,eni会默认生成一个ip,如果想要更多ip提升nat session能力,可以使用openapi指定ip数量(最大不超过20个)。
- 创建成功后会显示:
3、VPC1和VPC2的终端连接接通:
- 登录https://vpc.console.aliyun.com/vpc-nat/eu-central-1/nats 专有网络控制台;
- 点击终端节点服务;
- 点击创建好的终端节点服务的实例id;
- 点击终端节点连接;
- 操作栏:允许;稍等几分钟后(endpointservicer和endpoint)显示已连接(如果创建vpc-1时选择自动连接此操作可以省略);
- 最终状态显示成功如下图:
- 在终端节点也可以看到显示连接成功如下图:在终端节点创建后显示
4、配置NAT的连接规则(共两种,选择一种)
- 登录https://vpc.console.aliyun.com/vpc-nat/eu-central-1/nats 专有网络控制台
- 选择NAT网关:选择VPC NAT网关,点击已经创建的VPC NAT网关实例,如下图
-
点击基本信息–私网连接服务:点击模式
-
普通模式:需要配置fullnat规则
- 选择普通模式后,点击确定
- 点击NAT IP:查看nat ip(配置多条可以添加nat ip,不用添加路由;添加nat ip网段时需要添加路由)
- 点击FULL NAT规则管理:点击创建FULL NAT条目
- 选择NAT IP地址:选择nat ip(上步查看的nat ip);
- 转换后目的IP地址:VPC2下的ecs的私网IP(编辑);
- 端口设置(示例填写80);
- 弹性网卡:选择endpoint的eni(创建终端节点后显示eni);
- 条目名称:自己可以定义,最后确定创建;详情如下图:
- Geneve模式:不需要配置规则
-
5、验证是否配置成功
5.1 fullnat验证
-
登录vpc-2 下的ECS(ecs-2和ecs-3),开启http的服务执行:
- yum install httpd
- systemctl start httpd
-
登录vpc-1 下的ECS(ecs-0或者ecs-1),执行一下命令:
- curl http://ip(ecs-2或者ecs-3):80
- 结果显示html页面为成功,如下图:
5.2 geneve的概述
nat使用的geneve协议报文格式定义:
VPC NAT反向访问geneve模式,nat所在VPC的客户端和nat交互时,需要使用符合NAT定义标准的geneve协议,定义如下。
- GENEVE与VXLAN类似,也是over UDP的隧道协议。VXLAN header是固定长度的(8个字节,其中包含24bit VNI),与VXLAN不同的是,GENEVE header中增加了TLV(Type-Length-Value),由8个字节的固定长度和0~252个字节变长的TLV组成,并且geneve使用的固定udp端口号为0x6081。GENEVE header中的TLV代表了可扩展的元数据。我们来看一下GENEVE header:
与VXLAN等协议相比,GENEVE最大特点,是在Geneve Header部分增加了Option部分。Option部分格式如下:
geneve协议标准定义:
- Version(2bit):版本号,目前是0。
- Opt Len(6bit):以4字节为单位,表明Variable Length Options的长度。因为只有6bit,所以Variable Length Options最多是252(63*4)字节。
- O(1bit):表明这是一个OAM包,包含了控制信息,而非数据。
- C(1bit):表明在Variable Length Options里面,存在一个或者多个Critical的option。
- Rsvd.(6bit):保留字段。
- Protocol Type(16bit):被封装的协议类型,例如Ethernet就是0x6558,IP就是0x0800。这个字段的存在,使得GENEVE封装其他的协议成为可能。
- VNI(24bit):虚拟化标识符,和我们当前所用tunnel id功能类似。
- Reserved(8bit):保留字段。
- Variable Length Options:由TLV构成,包含了可扩展的元数据。
geneve封装在报文中的位置:
GENEVE隧道对接NAT格式定义:
- 隧道部分:向natgw发包时,隧道dip为natgw在本vpc内私网ip地址,即nat ip地址,该地址在创建natgw即可获得,如果nat ip是自定义网段的地址,那需要用户手动添加vpc路由指向nat。natgw反向回包时,会回包给原始正向包的隧道源地址。udp目的端口号固定为0x6081。
- geneve固定header部分:protocol type目前只支持IP类型即0x0800,geneve头后面跟着原始报文IPv4头.
- geneve tlv部分:
- option class为alibaba自定义class 0x131。
- type 4标识EP信息。
- len ep-id为2个字长,len=2。
- EP ID来源于创建EP时产生的ID,其中最后8字节的16进制数字。例如ep- 67j8f86b540a76543210,0xf86b540a76543210就是geneve中的EP ID。
- geneve协议头后报文格式:geneve协议头后面跟着原始报文IP头,目的IP为目的vpc要访问的目的资源IP。
5.3 geneve的验证
-
验证过程:
- 由于geneve规则没有配置相关参数,测试时可以使用自定义的工具,指定相关参数:nat ip –endpoint–ecs(ip、 port);
- 使用命令行参数运行脚本(脚本见附件):
Python3 脚本名称 -n nat ip -e endpoint id -d ecs ip -p 协议类型 -r dport
- 获取相应的报文信息:
注意:以上操作是两个vpc的操作,如场景描述图所示,需要创建多个endpoint,可以继续操作创建endpoint;
二、不同账号下VPC之间的反向访问:
与同账号的操作步骤一样,只需要在创建终端节点服务后添加需要访问账号的白名单,继续其它相关操作;
- 登录https://vpc.console.aliyun.com/vpc-nat/eu-central-1/nats 专有网络控制台
- 选择终端节点服务:点击已创建的终端节点服务实例id;
- 点击服务白名单;
- 添加白名单:填写对应的uid-,确定;
你还在原价购买阿里云、腾讯云、华为云、天翼云产品?那就亏大啦!现在申请成为四大品牌云厂商VIP用户,可以3折优惠价购买云服务器等云产品,并且可享四大云服务商产品终身VIP优惠价,还等什么?赶紧点击下面对应链接免费申请VIP客户吧: