阿里云ECS服务器、非阿里云ECS服务器(主要指线下IDC服务器)通过端口方式接入DDoS高防后,由于业务请求流量先经过DDoS高防清洗过滤再转发到源站服务器,源站无法直接获取真实的请求来源IP,您可以通过在服务器安装TOA模块来获取真实的来源IP。本文介绍如何安装TOA模块。
适用场景
适用场景 | 描述 |
DDoS高防-阿里云ECS | 源站部署在阿里云ECS上。业务流量经过DDoS高防清洗后到达阿里云ECS。 |
DDoS高防-四层SLB-阿里云ECS | 源站部署在阿里云ECS上。业务流量先经过DDoS高防清洗后,由四层SLB转发到达阿里云ECS。 |
DDoS高防-云下IDC服务器 | 源站部署在IDC服务器上。业务流量经过DDoS高防清洗后到达IDC服务器。 |
注意事项
本文仅适用于基于Linux内核的操作系统。
仅支持通过端口接入DDoS高防的四层TCP协议业务,不支持UDP协议业务。网站业务,请参见配置DDoS高防后获取真实的请求来源IP。
请确保服务器可以访问源码下载链接。
如果是非root用户,需拥有sudo权限。
建议您先在测试环境中执行本文的操作,观察环境稳定后再在正式环境中进行配置。
如果您的操作系统中自带TOA模块,建议您提前备份,如果出现重启失败,可以切换到原有内核执行系统恢复。
网络连接通过TOA模块转换,TOA模块是部署在旁路的,因此对网络性能几乎没有影响。
Linux升级内核后,会导致现有TOA模块不匹配,因此每次升级内核都需要重新编译、安装TOA模块。
方式一:通过modprobe命令加载VTOA模块
仅适用于Alibaba Cloud Linux 3操作系统。
加载VTOA模块。
#modprobe vtoa
验证VTOA模块是否加载成功。
#lsmod | grep vtoa
设置VTOA模块,开启系统启动时自动加载功能。
创建文件
/etc/sysconfig/modules/vtoa.modules
,并在文件中添加以下内容。#!/bin/bash modprobe vtoa > /dev/null 2>&1
执行以下命令,授予
vtoa.modules
文件可执行权限。sudo chmod +x /etc/sysconfig/modules/vtoa.modules
方式二:通过源码加载TOA模块
访问TOA源码下载链接,下载源码包。
内核版本为2.x时,请使用toa_kernel2.x文件。
内核版本为3.x时,请使用toa_kernel3.x文件。
内核版本 4.x/5.x时,请使用toa_kernel_common文件。
安装编译环境(gcc、kernel-headers和kernel-devel)。
CentOS系统
#yum install gcc kernel-headers kernel-devel -y
Ubuntu/Debian系统
#apt-get install gcc linux-headers-$(uname -r) -y
编译TOA模块。
将源码包解压,执行cd命令进入文件夹中并编译源码文件。编译过程未提示warning或者error,说明编译成功,检查当前目录下是否已经生成toa.ko文件。
//源码包路径,以toa_kernel3.x为例介绍 #cd toa_kernel3.x/ //编译 #make
说明如果要在其他相同操作系统中加载此TOA模块,可以直接将toa.ko文件拷贝到其他服务器,然后直接参照后续步骤加载TOA模块。
加载TOA模块。
#mv toa.ko /lib/modules/`uname -r`/kernel/net/netfilter/ipvs/toa.ko && depmod #insmod /lib/modules/`uname -r`/kernel/net/netfilter/ipvs/toa.ko
确认TOA模块是否已加载成功。
# lsmod | grep toa
设置TOA模块,开启系统启动时自动加载功能。
CentOS系统
创建文件
/etc/sysconfig/modules/toa.modules
,并在文件中添加以下内容。#!/bin/bash if [ -e /lib/modules/`uname -r`/kernel/net/netfilter/ipvs/toa.ko ] ; then insmod /lib/modules/`uname -r`/kernel/net/netfilter/ipvs/toa.ko > /dev/null 2>&1 fi
执行以下命令,授予
toa.modules
文件可执行权限。sudo chmod +x /etc/sysconfig/modules/toa.modules
Ubuntu/Debian系统
创建文件
/etc/modules-load.d/toa.conf
,并在文件中添加以下内容。toa
执行
sudo reboot
命令,重启系统。
方法三:通过RPM包加载TOA模块
适用的操作系统:
Redhat Linux
CentOS 6.x
CentOS 7.x
根据您的服务器系统类型,下载对应的TOA模块安装文件。
CentOS 7.x系统:kernel-3.10.0-957.21.3.el7.toa.x86_64.rpm
CentOS 6.x或Redhat Linux系统:
安装TOA模块。
CentOS 7.x系统
定位到安装文件目录,执行以下命令:
sudo yum localinstall kernel-3.10.0-957.21.3.el7.toa.x86_64.rpm
说明建议您使用
yum localinstall
命令安装内核,避免出现依赖问题。您也可以执行sudo rpm -ivh kernel-3.10.0-957.21.3.el7.toa.x86_64.rpm
命令进行安装。CentOS 6.x或Redhat Linux系统
定位到安装文件目录,执行以下命令:
sudo rpm -ivh kernel-firmware-2.6.32-696.13.2.el6.centos.plus.toa.x86_64.rpm sudo rpm -ivh kernel-2.6.32-696.13.2.el6.centos.plus.toa.x86_64.rpm
说明如果系统中的kernel-firmware版本大于或等于2.6.32-696.13.2.el6.centos.plus.toa,只需要执行上述第二行命令。
如果安装过程中出现依赖错误,可以尝试在
rpm
命令中加上额外参数--nodeps
。如果内核版本大于toa内核版本,可以尝试在
rpm
命令中加上额外参数--force
,进行强制安装。
设置TOA模块,开启系统启动时自动加载功能。
创建文件
/etc/sysconfig/modules/toa.modules
,并在文件中添加以下内容。CentOS 7.x系统:
#!/bin/bash if [ -e /lib/modules/`uname -r`/kernel/net/toa/toa.ko.xz ] ; then modprobe toa > /dev/null 2>&1 fi
CentOS 6.x或Redhat Linux系统:
#!/bin/bash if [ -e /lib/modules/`uname -r`/kernel/net/toa/toa.ko ] ; then modprobe toa > /dev/null 2>&1 fi
执行以下命令,授予
toa.modules
文件可执行权限。sudo chmod +x /etc/sysconfig/modules/toa.modules
执行
reboot
命令,重启系统。
执行结果
安装完成后,服务器能够正常获取真实访问源IP。
如果仍无法获取真实访问源IP,建议您执行lsmod|grep toa
命令检测TOA模块的加载情况。如果TOA模块未加载,您可以执行modprobe toa
命令手动加载。加载成功后,您可以查看服务端访问日志,重新测试主机能否获取真实的访问源IP。
相关操作
临时关闭TOA :
rmmod 路径/模块名
。rmmod toa.ko
卸载TOA模块。
rmmod toa
确认TOA模块是否卸载成功。若提示“TOA unloaded”,则说明卸载成功。
dmesg -T