NLB双栈实例支持IP版本亲和模式,开启后可将IPv4请求转发至IPv4后端服务器、IPv6请求转发至IPv6后端服务器,实现按IP协议版本的流量调度,简化网络架构。
方案架构
问题场景
在业务从 IPv4 向 IPv6 迁移的过程中,IPv4 与 IPv6 服务常常需要共存。当目标服务器组中同时包含 IPv4 和 IPv6 地址的后端服务器时,NLB 默认不区分客户端请求的 IP 协议版本,而是仅依据调度算法(如轮询或最小连接数)向后端转发流量。
这可能导致跨协议转发现象——例如,来自 IPv6 客户端的请求被转发到仅支持 IPv4 的后端服务器,或反之。此类协议不匹配会引发以下问题:
后端服务器无法获取真实客户端IP,影响基于源IP的地域分析和权限管控。
为获取真实源IP,需额外部署Nginx等代理层并开启Proxy Protocol,增加运维成本。
解决方案
NLB服务器组支持IP版本亲和模式,开启后实现4to4/6to6的亲和转发。
后端可直接获取对应协议的客户端真实IP,无需额外代理层。当某一协议的所有后端健康检查失败时,该协议的请求在同协议后端内尽力转发,不会跨协议转发。
适用范围
操作步骤
在开始操作前,请确保已在华东2(上海)地域创建一个专有网络VPC1,分别在可用区E和可用区G创建交换机VSW1和VSW2,且交换机已开启IPv6。
1. 创建ECS实例并部署服务
参考下表配置,创建两台ECS实例。
实例名称
地域
VPC
交换机
IP版本
镜像
ecs-ipv4
华东2(上海)
VPC1VSW1IPv4
Alibaba Cloud Linux 3.2104 LTS 64位
ecs-ipv6
VSW2IPv6
购买ECS实例时,在网络和安全组配置项下勾选免费分配 IPv6 地址。
远程连接
ecs-ipv4和ecs-ipv6,执行以下命令,部署Nginx服务。ecs-ipv4
sudo yum install -y nginx sudo systemctl start nginx echo "Hello from IPv4 backend" | sudo tee /usr/share/nginx/html/index.htmlecs-ipv6
sudo yum install -y nginx sudo systemctl start nginx echo "Hello from IPv6 backend" | sudo tee /usr/share/nginx/html/index.html在两台ECS实例所属安全组添加入方向规则,放行请求流量。请确保规则具备足够高的优先级。
实例名称
授权策略
协议
访问来源
访问目的(本实例)
ecs-ipv4
允许
自定义TCP
选择
IPv4后,选择本VPC网段。选择
端口后,选择HTTP(80)。ecs-ipv6
选择
IPv6后,选择本VPC网段。
相关操作,可参考自定义购买实例、ECS远程连接操作指南、配置安全组规则。
2. 创建双栈NLB实例
登录NLB控制台,选择华东2(上海)地域,单击创建网络型负载均衡。
完成以下配置,其他选项保持默认,单击立即创建:
实例网络类型:选择公网。
VPC:选择
VPC1。可用区:选择可用区E和可用区G及对应交换机
VSW1和VSW2,并自动分配公网IP。协议版本:选择双栈。
创建完成后,单击实例ID进入实例详情页。在基本信息区域找到网络类型,单击IPv6:私网右侧的变更网络类型。在弹出的窗口单击确定变更,并确认变更成功。
3. 创建双栈服务器组并开启亲和模式
在服务器组控制台,单击创建服务器组。
完成以下配置,单击创建:
服务器组类型:选择服务器类型。
服务器组名称:输入名称
sgp-dualstack。VPC:选择
VPC1。选择后端协议:选择TCP。
IP协议版本:选择IPv4/v6双栈。选择后支持同时添加IPv4和IPv6后端服务器。
IP版本亲和模式:选择亲和模式。开启后,IPv4请求仅转发至IPv4后端,IPv6请求仅转发至IPv6后端。
单击服务器组创建成功弹窗中的添加后端服务器。在IP地址列为
ecs-ipv4选择IPv4地址,为ecs-ipv6选择IPv6地址。选中两台实例,单击下一步。批量添加IPv6后端时,可单击IP地址列表头旁的设置图标,选择首选IPv6,系统将优先选中服务器的IPv6地址。
在配置端口和权重步骤中,将两台服务器的端口均设置为
80,单击确定完成添加。
4. 创建监听
在NLB控制台,单击目标实例ID进入实例详情页。在监听页签单击创建监听。
在配置监听步骤,选择监听协议为TCP,监听端口填写
80,单击下一步。在选择服务器组步骤,选择服务器组
sgp-dualstack,单击下一步。在配置审核步骤确认配置,单击提交。
5. 设置域名解析
将自有域名通过CNAME解析指向NLB实例的DNS名称,客户端通过自有域名访问NLB。
本文以阿里云云解析DNS为例,对于非阿里云注册域名,需先将域名添加到云解析控制台。
6. 验证亲和转发
用户通过自有域名访问具备IPv6公网能力的双栈NLB实例时,DNS服务器将根据客户端的查询类型返回A记录(IPv4地址)或AAAA记录(IPv6地址)。
测试IPv4请求
curl -4 http://test.example.com多次请求,返回结果应均为Hello from IPv4 backend,表明IPv4请求被转发至IPv4后端ecs-ipv4。
测试IPv6请求
curl -6 http://test.example.com多次请求,返回结果应均为Hello from IPv6 backend,表明IPv6请求被转发至IPv6后端ecs-ipv6。
验证亲和隔离
停止
ecs-ipv4的Nginx服务:sudo systemctl stop nginx。再次测试IPv4请求。请求将失败,不会被转发至IPv6后端
ecs-ipv6。恢复
ecs-ipv4服务:sudo systemctl start nginx。IPv4请求恢复正常。
更多信息
计费说明
NLB双栈支持的地域
区域 | 地域 |
中国 | 华东1(杭州)、华北2(北京)、华南1(深圳)、华东2(上海)、华北1(青岛)、华北3(张家口)、西南1(成都)、华南3(广州)、中国香港、华南2(河源)、华北6(乌兰察布) |
亚太 | 泰国(曼谷)、菲律宾(马尼拉)、新加坡、日本(东京)、韩国(首尔)、 马来西亚(吉隆坡)、印度尼西亚(雅加达) |
欧洲与美洲 | 德国(法兰克福)、英国(伦敦)、美国(弗吉尼亚)、美国(硅谷)、墨西哥 |
中东 | 沙特(利雅得) |
应用于生产环境
高可用部署:后端服务器应部署在多个可用区,IPv4和IPv6后端均需保证冗余,避免单点故障。
健康检查配置:根据业务特点调整健康检查间隔、超时时间和阈值,确保故障服务器能被及时摘除。
常见问题
开启亲和模式后,IPv4请求会转发到IPv6后端吗?
不会。开启亲和模式后,IPv4请求仅转发至IPv4后端,IPv6请求仅转发至IPv6后端,不会跨协议转发。
如果服务器组内只有IPv4后端,IPv6请求会如何处理?
未开启亲和模式时,NLB支持将IPv6请求转换成IPv4并发给后端;开启亲和模式后,IPv6请求将无法正常转发,该场景下请确保您的NLB同时包含健康的IPv4和IPv6后端。
已创建的服务器组可以修改IP协议版本吗?
不支持。服务器组的IP协议版本(IPv4或IPv4/v6双栈)创建后不可修改,如需变更需删除服务器组后重新创建。
已创建的服务器组可以修改IP版本亲和模式吗?
可以。可在服务器组控制台单击目标双栈服务器组操作列的编辑基本信息进行修改。
双栈服务器组可以关联到IPv4类型的NLB实例吗?
不可以。双栈服务器组仅支持关联至双栈NLB实例的监听。