1.說明
1.1.場景說明
TOA 屬於 4層轉發系統
的一個功能模塊,缺省情況下服務經過 4層轉發系統
,服務源站查看到的請求IP爲NAT的回源地址,這對於一些特殊業務來說(比如遊戲),是無法滿足的,TOA的功能就是讓真實源服務源站獲取訪問者真實IP地址,該模塊安裝在源站服務器上。以下爲 TOA 的侷限性:
- 僅支持 TCP 協議
- 僅支持 IPv4
- 僅支持 Linux 操作系統
1.2.前提條件
-
編譯TOA 內核模塊時,當前的內核版本與需與內核開發包版本保持一致
-
需要 root 權限
-
在代理節點開啓對應轉發規則
-
使用任意客戶端訪問代理節點業務IP,源站正常可以看到客戶端IP,而代理節點業務IP
2.安裝
2.1.共通
sudo yum -y install gcc
sudo yum -y install make
sudo yum -y install kernel-devel-`uname -r`
sudo yum -y install kernel-headers-`uname -r`
進入toa內核目錄:cd /lib/modules/uname -r/kernel/net/toa/
卸載toa,執行:rmmod toa
重新掛載本目錄下的新的toa,執行:modprobe toa (或 insmod ./toa.ko) 若無任何報錯,即爲安裝成功,
通過命令:lsmod | grep toa ,將會顯示出已安裝的toa模塊
2.2.Centos6
2.6.32-754.9.1.el6.x86_64
2.3.Centos7
3.10.0-327.el7.x86_64
系統源碼包下載地址
2.3.0.原理
TOA的kind(即代碼字段opcode)採用的是254 tcp options
ipv4時佔用Options 8字節,ipv6時將佔用20字節
2.3.1.源碼編譯
git clone https://github.com/Huawei/TCP_option_address.git
cd src
make
2.3.2.加載內核
執行如下命令,加載內核模塊。
sudo insmod toa.ko
執行如下命令,驗證模塊加載情況,查看內核輸出信息。
dmesg | grep TOA
若提示信息包含“TOA: toa loaded”,說明內核模塊加載成功。
可執行lsmod|grep toa命令檢測 toa 模塊加載情況
通過執行 modprobe toa 命令手動加載
2.3.3.開機啓動自動加載
vi /etc/sysconfig/modules/toa.modules
#!/bin/sh
toapath=/root/toa/toa.ko
/sbin/modinfo -F filename $toapath > /dev/null 2>&1
if [ $? -eq 0 ]; then
/sbin/insmod $toapath
fi
chmod +x /etc/sysconfig/modules/toa.modules
或者
echo “modprobe toa” >> /etc/rc.d/rc.local
3.參考
toa模塊-編譯centos5/6版本
toa協議源碼解析
騰訊雲toa.pdf
TOA 實現原理
TOA與Proxy Protocol