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>&1if [ $? -eq 0 ]; then/sbin/insmod $toapathfichmod +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

TOA(tcp option adress)安装相关推荐

  1. TOA - TCP Option Address

    使用Haproxy转发TCP到业务服务器端,后端报文看到的源 IP 地址是代理服务器的IP . 为了让后端能够获取到用户端实际的 IP 地址,有三个方案: 1. http 请求记录标识: 在客户端和服 ...

  2. win7 中出现“为了配置TCP/IP,必须安装并启动网络适配卡“问题的解决办法

    win7 中出现"为了配置TCP/IP,必须安装并启动网络适配卡"问题的解决办法 参考文章: (1)win7 中出现"为了配置TCP/IP,必须安装并启动网络适配卡&qu ...

  3. tcp option

    一.奇怪现象: 三次握手时,前两次syn|syn+ack中的window size明明很大,但是第三次握手的时候window size却突然变得很小, 并且后续的数据传输的过程中,window siz ...

  4. tcp option 结构体_基于 Kotlin 实现一个简单的 TCP 自定义协议

    一. 开发背景 想要成为一名优秀的Android开发,你需要一份完备的 知识体系,在这里,让我们一起成长为自己所想的那样~. 我们的项目需要开发一款智能硬件.它由 Web 后台发送指令到一款桌面端应用 ...

  5. TCP BBR - 如何安装、启动、停止BBR!

    TCP BBR从Linux 4.9 内核开始,就作为它内核的一部分存在了,如果想使用BBR,那么首先就是判断内核版本是否大于4.9,如果符合版本标准,那么直接启动BBR就可以了,如果低于4.9,升级内 ...

  6. Ubuntu20.04 tcp调试工具mNetAssist安装

    1. 下载 tcp调试工具 mNetAssist.deb下载地址:https://cloud.189.cn/t/ra2M7juimAFb (访问码:k9kv) 2. 安装 用命令行安装软件如下: # ...

  7. 安装、卸载TCP/IP协议

    卸载TCP/IP协议 注意:不适用Win10 打开注册表 .运行窗口输入regedit进入注册表. 删除HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Serv ...

  8. 关于 FullNat 模式的 Toa 实现原理【转】

    目录 背景 获取client ip的几种方法 toa/uoa 获取client ip 原理 tcp option 字段 lvs中的toa格式与插入 格式 插入 后端获取client ip ss/net ...

  9. snort完整安装(snort-2.8.3.1)

    snort完整安装一(snort-2.8.3.1) 本来是打算做字符串匹配的,上网查了资料说是snort中有匹配算法,于是想自己装一个试试,真是没想到,一装就3个星期,还是好不容易才搞定的.闲话不说了 ...

最新文章

  1. MyBatis入门示例
  2. 部署awstats分析系统
  3. Python3 文件操作
  4. 步步为营-72-asp.net简单练习(通过webForm实现一些简单实例)
  5. 原型设计20条军规(转)
  6. 面试官:GET和POST两种基本请求方法有什么区别
  7. linux下面mysql不监听3306
  8. Qt5使用windeployqt后 exe文件还是无法执行 无法定位程序输入点 _ZdaPvj 于动态链接库 libstdc++-6.dll
  9. C语言逆序字符串(递归实现)
  10. 安装SQL2005只有配置工具或 错误码是29506 解决方案
  11. Web前端笔记-2D图形平面内平移定位(two.js)
  12. Vue小案例 之 商品管理------创建页面与部分数据
  13. scrapy使用meta在各个模块的组件之间传递数据
  14. 使用Visual Studio.net调试javascript最方便的方法
  15. endnote修改正文中参考文献标注_如何用endnote修改毕业论文后参考文献格式为毕业手册要求格式...
  16. 嵌入式linux系统蜂鸣器实验,嵌入式系统原理实验四蜂鸣器.docx
  17. Flask 创建app 时候传入的 static_folder 和 static_url_path参数理解(1ni)
  18. MAC地址克隆有什么作用
  19. ValueError: mode mismatch
  20. 手把手教你:CSS+JS 打造一个有个性的滚动条

热门文章

  1. ios应用数据存储方式(偏好设置)
  2. iOS 偏好设置 NSUserDefault
  3. ROS中一个关于时间的函数
  4. 3D游戏编程与设计——粒子系统
  5. iOS 百思不得姐 项目
  6. AI量化(代码):深度强化学习DRL应用于金融量化
  7. 市场的霸主:对冲基金世界的超额回报大师
  8. rgb与16进制颜色是如何相互转换的?
  9. JavaScript高级第01天笔记
  10. 2019年9月 黑马头条项目14天