You need to enable JavaScript to run this app.
导航
ALB实现IPv4+IPv6流量的负载均衡
最近更新时间:2024.08.13 15:45:02首次发布时间:2024.07.08 16:07:56

本文指导您如何配置双栈 ALB 实例,以实现 ALB 承接 IPv4 、IPv6 的业务流量。通过参考本文的配置步骤,您的双栈 ALB 实例可以将 IPv4 、IPv6 的业务流量转发至后端服务器,从而使 IPv6 网络的客户端请求也能访问后端服务。

场景

您的业务希望利用 ALB 转发来自 IPv6 客户端的请求,IPv6 客户端通过 ALB 正常访问后端服务器。
图片

前提条件

说明

  • 当前私有网络开通 IPv6 功能、公网 IP 配置 IPv6 网关仅为白名单用户提供,如需体验请联系您的客户经理。
  • IPv4&IPv6 双栈实例仅对白名单用户开放。如需体验,请您联系客户经理或提交工单申请试用。

操作步骤

一、创建1个 IPv6 的 ECS-01 模拟客户端,1个 IPv4 的 ECS-02作为后端服务器。

  1. 创建一个 IPv6 的 ECS-01 ,模拟 IPv6 客户端访问。
  2. 创建一个 IPv4 的 ECS-02。作为后端服务器接收来自 ALB 的流量。具体内容请参考购买并使用云服务器实例
  3. 为 ECS-02 配置安全组规则,放行80端口,使安全组入方向能够允许接受 ALB 发送的请求。安全组放行100.64.0.0/10 服务网段。具体配置请参考搭建后端服务器安全组放通 ALB。在 ECS-02 中部署 Nginx 服务。
    yum install -y nginx && systemctl start nginx && systemctl status nginx && cd /usr/share/nginx/html/ && echo "Hello World! this is ipv4 rs." > index.html
    

二、为 ALB 所在的私有网络配置 IPv6 网关,实现公网访问。

  1. 登录 私有网络控制台,为 ALB 所在的私有网络启用 IPv6 。
    图片
  2. 登录子网控制台,参考子网开通/关闭IPv6,为 ECS 所在的私有网络下不同子网所对应的可用区开通 IPv6、分配 IPv6 CIDR。
    图片
    为 ALB 不同可用区分配 IPV6 CIDR:
    图片

三、创建 IPv4&IPv6 双栈实例,用于接收客户端的 IPv4、IPv6流量。

注意

  • IPv4&IPv6 双栈实例仅对白名单用户开放。如需体验,请您联系客户经理或提交工单申请试用。
  • 该实例与 ECS-02 所在的私有网络相同。
  • 该实例的可用区已经开通 IPv6 。
  • 私网类型的 IPv4&IPv6 双栈实例,不能接入公网流量。公网类型的 IPv4&IPv6 双栈实例,在创建时自动开通 IPv6 公网带宽,可以接入 IPv4、 IPv6的公网流量。

登录火山引擎应用型负载均衡控制台,完成如下操作。

  1. 参考创建实例创建一个公网类型的 IPv4&IPv6 双栈实例。
    图片
  2. 参考创建服务器组创建服务器组、添加后端服务器 ECS-02。
  3. 参考创建HTTP监听,完成双栈实例监听器的配置。
  4. 参考实例域名,获取 ALB 实例域名。在域名控制台配置域名解析,将您的服务域名通过 CNAME 方式解析到 ALB 实例上,通过实例域名的形式令您访问网络资源更加便捷。

四、测试连通性

方式一:通过 ping6 检查连接状况,通过 dig 获取详细 DNS 解析信息

假设你测试的应用服务域名为alb.example.com。实际测试时,请将alb.example.com替换为您的服务域名。

  1. ping6 检查:

    ping6 alb.example.com 
    

    如果返回了响应,说明 alb.example.com 已经成功解析到了一个 IPv6 地址且网络路径通畅。

  2. dig 检查:

    dig alb.example.com
    

    您可获取并查看服务域名的详细 DNS 解析信息,以确定解析结果是否符合预期。
    图片

方式二:通过模拟访问,查看相关字段确认连通性

  1. 前置工作:
    确保 Nginx 配置记录 X-Forwarded-For 头部:在 Nginx 配置文件(如 /etc/nginx/nginx.conf /etc/nginx/conf.d/default.conf)中增加或修改日志格式,确保包含 X-Forwarded-For头部。

    1. 打开配置文件/etc/nginx/nginx.conf

      sudo vim /etc/nginx/nginx.conf 
      
    2. 在 http 块中添加或修改日志格式。

      http {
       log_format custom '$remote_addr - $remote_user [$time_local] "$request" '
                         '$status $body_bytes_sent "$http_referer" '
                         '"$http_user_agent" "$http_x_forwarded_for"';
                         
       access_log /var/log/nginx/access.log custom;
       ...
      }
      
    3. 重新加载或重启 Nginx 配置:修改完配置文件后,重新加载 Nginx 配置以使更改生效。

      sudo systemctl reload nginx 
      
  2. 利用 ECS-01 模拟 IPv6 客户端使用curl 访问服务域名

    1. 输入curl命令。实际测试时,请将alb.example.com替换为您的服务域名。

      curl -6 -g -I http://alb.example.com 
      
    2. 您可获取服务器响应的基本情况,如下图所示,表示您的服务已接入 ALB 。
      图片

  3. 在服务端 Nginx 上查看访问日志,可发现在 x-forwarded-for 中存在 IPv6 客户端真实 IP 地址。使用如下命令:

    grep 'X-Forwarded-For' /var/log/nginx/access.log 
    

    您也可通过抓包工具来获取 x-forwarded-for 的信息。 x-forwarded-for 信息表明,IPv6 客户端已经成功接入 ALB。
    图片

常见问题

ALB 如何获取真实客户端IP地址?

答:ALB 会将真实的客户端 IP (IPv4 或者 IPv6)放在 HTTP 头部的 X-Forwarded-For字段,字段中的第一个地址就是客户端真实 IP。

使用双栈 ALB 实例后,访问提示502 错误

答:建议您优先检查后端应用服务运行状态是否正常,例如:

  • 检查后端ECS 安全组是否正确放行服务网段:100.64.0.0/10
  • 建议 ALB 启用后端服务健康检查,避免ALB 转发流量到异常的后端服务器。

如何提高 IPv6 按实际流量计费模式的默认带宽上限?默认带宽上限是否可以提升?

答:您可参考以下两种方式:

  1. 基于业务场景,您可通过购买共享带宽包的方式来提高默认 200M 的带宽限制。目前共享带宽包计费模式支持:固定带宽上限、95带宽,不支持如 IPv4 的按主流量计费模式。
  2. IPv6 按实际流量计费模式时,如需提高默认的带宽上限,您可联系客户经理,基于实例提升带宽上限。