DCDN IPA TOA 测试最佳实践

本文涉及的产品
边缘安全加速 ESA,基础版 3个月
全站加速 DCDN,50GB 1年
简介: ## IPA TOA 的使用背景:TOA 模块是为了让后端的 realserver 能够看到真实的 clientip 而不是负载均衡器或者 proxy 的代理 ip;阿里云的全站加速产品天然的支持 TOA 的透明转发,且性能测试满足企业高并发访问性能,接下来看下如何进行 toa 使用。### 1、安装aliyun toa 支持 opcode=28/254https://github.c

IPA TOA 的使用背景:

TOA 模块是为了让后端的 realserver 能够看到真实的 clientip 而不是负载均衡器或者 proxy 的代理 ip;
阿里云的全站加速产品天然的支持 TOA 的透明转发,且性能测试满足企业高并发访问性能,接下来看下如何进行 toa 使用。

1、安装

aliyun toa 支持 opcode=28/254
https://github.com/aliyun/alibabacloud-cdn-tool-toa

2、全站加速支持现状

opcode=28的tcp option格式是:
nop(8 bits)
opcode(8 bits) = 28
opsize(8 bits) = 7
opversion(8 bits) = 1
ip(32 bits, big endian)

opcode=254的格式是:
tcp option(ipv4):
opcode(8 bits) = 254
opsize(8 bits) = 8
port(16 bits, big endian)
ip(32 bits, big endian)

tcp option(ipv6):
opcode(8 bits) = 254
opsize(8 bits) = 20
port(16 bits, big endian)
ip(128 bits, big endian)

huawei toa opcode=8/254
https://github.com/Huawei/TCP_option_address

对 TOA 不太了解的同学可以看下面的说明,熟悉的可以略过

3、TOA 基本原理

TOA 名字全称是 tcp option address,是 FullNat 模式下能够让后端服务器获取 ClientIP 的一种实现方式,它的基本原理比较简单。

1、客户端用户请求数据包到达 LVS 时,LVS 在数据包的 tcp option 中插入 src ip 和 src port 信息
2、数据包到达后端服务器(装有 toa 模块)后,应用程序正常调用 getpeername 系统函数来获取连接的源端 IP 地址
3、由于在 toa 代码中 hook(修改)了 inet_getname 函数(getpeername 系统调用对应的内核处理函数),该函数会从 tcp option 中获取 lvs 填充的 src 信息
4、这样后端服务器应用程序就获取到了真实客户端的 ClientIP,而且对应用程序来说是透明的。

TCP 协议栈中处理三次握手的 ack 数据包的函数是 tcp_v4_syn_recv_sock,完成连接的建立,并创建 newsock。 tcp_v4_syn_recv_sock_toa hook 在 tcp_v4_syn_recv_sock,第三次 TCP 握手时 ACK 报文到达 Server 段后,调用 sock* tcp_v4_syn_recv_sock_toa 函数,代码逻辑走到原有的 tcp_v4_syn_recv_sock 函数,如果是非 TOA 逻辑则执行 if (newsock) sock_reset_flag(newsock, SOCK_TOA_IPV4);
否则解析 tcp option 内容,获取到 ip 端口 等信息后挂到 newsock 中

                        tdata.opcode = TCPOPT_TOA;
                        tdata.opsize = TOA_V4_LEN - 1;
                        tdata.opversion = TOA_IPV4;
                        tdata.ip = ip;
                        memcpy(&ptr, &tdata, sizeof(struct toa_data));
                        newsock->sk_user_data = ptr;
                        sock_set_flag(newsock, SOCK_TOA_IPV4);
                        TOA_INC_STATS(ext_stats, SYN_RECV_SOCK_TOA_CNT);

4、测试用例

4.1 客户端

● nc 模式 tcp/udp 发包的强大工具,或者 telnet 直接探测
● curl / wget 模拟 http 请求

4.2 代理:

阿里云全站加速(DCDN)配置如下,ipa 对等转发,配置的回源端口和测试端口保持一致

本文介绍的是 TOA 透传,所以开启的是 TOA ,如果是 Proxy protocol 需要原站能支持 PP (https://docs.nginx.com/nginx/admin-guide/load-balancer/using-proxy-protocol/?spm=5176.11220512.help.18.cacf72f0ZfQK8t

4.3 原站抓包验证 opcode4.1

目录
相关文章
|
2天前
|
设计模式 前端开发 JavaScript
自动化测试框架设计原则与最佳实践####
本文深入探讨了构建高效、可维护的自动化测试框架的核心原则与策略,旨在为软件测试工程师提供一套系统性的方法指南。通过分析常见误区,结合行业案例,阐述了如何根据项目特性定制自动化策略,优化测试流程,提升测试覆盖率与执行效率。 ####
18 6
|
4月前
|
机器学习/深度学习 监控 算法
自动化测试框架的演进与最佳实践
随着软件行业的迅猛发展,自动化测试已成为确保软件质量的关键手段。本文将深入探讨自动化测试框架的历史演进、当前趋势以及面临的挑战,并结合实际案例分析,提出一系列的最佳实践策略,旨在帮助读者构建更加高效、稳定的自动化测试体系。
|
3天前
|
存储 监控 测试技术
测试脚本编写和维护的最佳实践有哪些?
测试脚本编写和维护的最佳实践有哪些?
|
6天前
|
缓存 JavaScript 测试技术
Vue 3 单元测试最佳实践
Vue 3 单元测试最佳实践
10 1
|
15天前
|
前端开发 数据管理 测试技术
前端自动化测试:Jest与Cypress的实战应用与最佳实践
【10月更文挑战第27天】本文介绍了前端自动化测试中Jest和Cypress的实战应用与最佳实践。Jest适合React应用的单元测试和快照测试,Cypress则擅长端到端测试,模拟用户交互。通过结合使用这两种工具,可以有效提升代码质量和开发效率。最佳实践包括单元测试与集成测试结合、快照测试、并行执行、代码覆盖率分析、测试环境管理和测试数据管理。
31 2
|
16天前
|
前端开发 JavaScript 数据可视化
前端自动化测试:Jest与Cypress的实战应用与最佳实践
【10月更文挑战第26天】前端自动化测试在现代软件开发中至关重要,Jest和Cypress分别是单元测试和端到端测试的流行工具。本文通过解答一系列问题,介绍Jest与Cypress的实战应用与最佳实践,帮助开发者提高测试效率和代码质量。
27 2
|
30天前
|
安全 Java 测试技术
最佳实践:通义灵码生成单元测试,让单测更简单
本文首先讲述了什么是单元测试、单元测试的价值、一个好的单元测试所具备的原则,进而引入如何去编写一个好的单元测试,通义灵码是如何快速生成单元测试的。
|
9天前
|
测试技术 持续交付
软件测试中的自动化测试策略与最佳实践
【10月更文挑战第31天】 在当今快速迭代的软件开发环境中,自动化测试成为确保软件质量和加速产品上市的关键。本文探讨了自动化测试的重要性、实施策略以及一些最佳实践。通过分析不同类型的自动化测试工具和框架,本文旨在为软件开发团队提供一套实用的指导方案,以提高测试效率和质量。
|
2月前
|
设计模式 SQL 安全
PHP中的设计模式:单例模式的深入探索与实践在PHP的编程实践中,设计模式是解决常见软件设计问题的最佳实践。单例模式作为设计模式中的一种,确保一个类只有一个实例,并提供全局访问点,广泛应用于配置管理、日志记录和测试框架等场景。本文将深入探讨单例模式的原理、实现方式及其在PHP中的应用,帮助开发者更好地理解和运用这一设计模式。
在PHP开发中,单例模式通过确保类仅有一个实例并提供一个全局访问点,有效管理和访问共享资源。本文详细介绍了单例模式的概念、PHP实现方式及应用场景,并通过具体代码示例展示如何在PHP中实现单例模式以及如何在实际项目中正确使用它来优化代码结构和性能。
45 2
|
2月前
|
监控 安全 测试技术
提升软件测试效率:探索持续集成的最佳实践
在现代软件开发过程中,持续集成(CI)已成为提高软件质量和测试效率的关键实践。通过将代码库的每次提交自动构建和测试,CI 帮助团队及时发现问题,减少手动测试的负担。本文探讨了如何有效实施持续集成来优化软件测试流程,并提供了一些实用的策略和工具建议,以帮助开发团队更高效地运作。
75 2