阿里云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