有奖捉虫:办公协同&微信生态&物联网文档专题 HOT
文档中心 > 负载均衡 > 最佳实践 > 如何获取客户端真实 IP > 混合云部署场景下通过 TOA 获取客户端真实 IP
本文介绍混合云部署场景和 NAT64 CLB 场景下的 CLB 的四层(仅 TCP)服务如何通过 TOA 获取客户端真实源 IP。
说明:
仅北京、上海、广州地域的 NAT64 CLB 支持通过 TOA 获取客户端真实源 IP。
仅四层 TCP 支持通过 TOA 获取客户端真实源 IP,UDP 和七层(HTTP/HTTPS)不支持获取。
该功能目前处于内测中,如需使用,请提交 工单申请

应用场景

混合云部署场景

混合云部署 中,IDC 的 IP 和云上 VPC 的 IP 可能会有地址重叠,因此需要配置 SNAT IP,进行 SNAT 转换源 IP。对于服务端而言,无法获得真实源 IP,因此需要通过 TOA 进行获取。

NAT64 CLB 场景

在 NAT64 CLB 场景中,客户端真实的 IPv6 源 IP 会被转换成 IPv4 的公网 IP,因此对于真实的服务端的服务而言,无法获得真实的客户端 IPv6 IP。 腾讯云 NAT64 CLB 提供获取客户端真实 IP 的功能,即将客户端真实的源 IP 放入 TCP 协议的自定义 option 中,当被嵌入真实源 IP 的 TCP 数据包发往服务端时,服务端插入的 TOA 内核模块可提取 TCP 数据包中的真实客户端源 IP,此时客户端应用只需要调用 TOA 内核模块提供的接口即可获取真实客户端源 IP。

限制说明

控制台开启 TOA

1. 已创建 NAT64 版本的 CLB 实例,详情请参见 创建 IPv6 NAT64 负载均衡实例
2. 登录 负载均衡控制台,创建 TCP 监听器,详情请参见 配置 TCP 监听器
3. 在“创建监听器”对话框中,开启 TOA 开关。


加载 TOA 模块

1. 根据腾讯云上 Linux 的版本,下载对应的 TOA 包解压。
2. 
解压完成后
,执行 cd 命令进入到刚解压的文件夹里,执行以下命令加载模块:
insmod toa.ko
3. 执行以下命令确认 TOA 模块是否加载成功。若提示“toa load success”,则说明已加载成功。
dmesg -T | grep TOA
4. 加载成功以后,在启动脚本中加载 toa.ko 文件(重启机器 ko 文件需要重新加载)。
5. (可选)若不再需要使用 TOA 模块,执行以下命令进行卸载。
rmmod toa
6. (可选)执行以下命令确认 TOA 模块是否卸载成功。若提示“TOA unloaded”,则说明卸载成功。
dmesg -T
若上述下载文件中没有您的操作系统版本对应的安装包,则可以下载 Linux 通用版的源码包,编译后获取对应的 ko,该版本支持 Centos8、Centos7、Ubuntu18.04、Ubuntu16.04 等绝大多数具有代表性的 Linux 发行版。
说明
由于 Linux 内核版本众多,且 Linux 发行版操作系统市场庞大,版本繁多,因此考虑到内核模块的兼容性问题,建议在使用的系统上对 TOA 源码包进行编译后使用。
1. 下载源码包
注意
Linux 与 腾讯 TLinux 的 TOA 模块不能混用,请根据对应系统选择对应的 TOA 模块源码包。
Linux
wget "https://clb-toa-1255852779.file.myqcloud.com/tgw_toa_linux.tar.gz"
腾讯 TLinux
wget "https://clb-toa-1255852779.file.myqcloud.com/tgw_toa_tlinux.tar.gz"
2. 编译 TOA 内核模块的 Linux 环境需先安装 GCC 编译器、Make 工具和内核模块开发包。
3. 修改 PATH 环境变量为PATH=/opt/rh/devtoolset-8/root/bin:$PATH。编译前请确认内核 gcc 编译版本,gcc 版本需与编译版本保持一致,可使用dmesg | grep 'Linux version'命令查看内核 gcc 编译版本信息。
4. 编译源码,生成 toa.ko 文件。编译过程中未提示 warningerror,则说明编译成功。以 Linux 系统对应的源码包为例:
tar zxvf tgw_toa_linux_ver.tar.gz
cd tgw_toa_linux_ver//进入解压后的tgw_toa目录
make
5. 编译 toa.ko 成功后,执行上文 步骤2 中的加载 TOA 模块的操作。

适配后端服务

(可选)监控 TOA 模块状态

为保障 TOA 内核模块运行的稳定性,TOA 内核模块还提供了监控功能。在插入 toa.ko 内核模块后,可以在容器所在的宿主机通过以下两种方式监控 TOA 模块的工作状态。

FAQ