
# 使用TOA模块获取真实请求来源IP
#### 应用场景
业务接入DDoS高防后，经过高防转发的流量到服务端之后真实源IP将被隐藏，客户业务源站所见的源IP为高防的回源IP，从tcp报文中的tcp option字段获取真实源IP，支持获取IPv6真实访问源。
在业务应用开发中，通常需要获取客户端真实的IP地址。例如，投票系统为了防止刷票，需要通过获取客户端真实IP地址，限制每个客户端IP地址只能投票一次。
本章节介绍如何通过安装DDoS高防提供的TOA模块获取真实源IP。
 #### 方案架构
通常情况下，经过高防的流量会修改真实源IP与高防IP（由真实源IP-\>高防IP转换为回源IP-\>源站IP），用户在自己的源站服务器上看到的流量源IP是回源IP，如[图1]所示。
图1原理说明   
![](https://support.huaweicloud.com/bestpractice-aad/zh-cn_image_0000002125998565.png)
- 高防IP：华为云为用户提供的IP，用来代理源站IP，确保源站的稳定可靠。
- 回源IP：用户在自己的源站服务器上看到的所有流量的源IP就是回源IP。
- 源站IP：用户的实际业务对外提供服务所使用的公网IP地址。
 
#### 约束与限制
源站服务器为以下Linux操作系统时，您可以通过安装DDoS高防提供的TOA模块获取高防转发后流量的真实源IP。
- CentOS6.5（对应Linux内核版本2.6.X）
- CentOS7（对应Linux内核版本3.10.X）
- Huawei Cloud EulerOS 2.0 等保2.0三级版 64位 ARM版
- toa_common（通用版本toa，一般针对Linux内核3.0及其以上的系统，如Ubuntu 14/16 、Suse 11/42等）
- toa_linux-2.6.32-220.23.1.el6.x86_64.rs（对应指定的版本：linux-2.6.32-220.23.1.el6.x86_64.rs）
 
![](https://support.huaweicloud.com/bestpractice-aad/public_sys-resources/notice_3.0-zh-cn.png)
- DDoS高防+Web源站场景下，如果DDoS高防关闭了Web基础防护，则需要在源站安装TOA以获取真实源IP。
- 如果DDoS高防开启了Web基础防护或源站配置为华为云WAF的场景，不需要安装TOA获取真实源IP，可从xff，x-real等7层请求头部获取真实源IP，仅支持获取IPv4真实访问源。请参考[获取客户端真实IP](https://support.huaweicloud.com/bestpractice-waf/waf_06_0020.html)获取七层协议（HTTP）真实源IP。
- 如果源站服务器使用了其他操作系统（Ubuntu、SUSE等），请参考[TOA插件配置](https://support.huaweicloud.com/usermanual-ga/ga_03_9001.html)定制编译安装TOA插件以获取真实源IP。
 
#### 实施步骤
1. 请参考[TOA模块的开源代码](https://github.com/huaweicloud/huaweicloud-tool-aad-toa)编译安装TOA模块。
   
   ![](https://support.huaweicloud.com/bestpractice-aad/public_sys-resources/note_3.0-zh-cn.png)
   挂载内核模块过程中，不影响服务器现有业务，不用修改原有服务器进程即可获取真实源IP。
   
   
2. 验证TOA内核模块。 
   可以参考[TOA插件配置](https://support.huaweicloud.com/usermanual-ga/ga_03_9001.html)获取真实源IP，或参考[原理说明]如下示例获取源站IP。
   ```
   >>print(newServerSocket.getpeername())
   >>"('cip',cport)"
   ```
   
   
 
