toa 模块

简介:

原文:http://shanks.blog.51cto.com/3899909/1393434

toa模块是为了让后端的realserver能够看到真实的clientip而不是lvs的dip。

一、编译centos6

   1、下载http://kb.linuxvirtualserver.org/images/3/34/Linux-2.6.32-220.23.1.el6.x86_64.rs.src.tar.gz

   2、解压

   3、编辑.config,将CONFIG_IPV6=M改成CONFIG_IPV6=y

       测试的时候发现如果不改会遇到报错,可以看下这个帖子:http://bbs.linuxtone.org/forum.php?mod=redirect&goto=findpost&ptid=21631&pid=111599

   4、编辑Makefile,可以在EXTRAVERSION =处加上自定义的一些说明,将会在uname -r中显示。比如-shanks.e11.x86_64

   5、make -jn

   6、make modules_install

   7、make install

   8、修改/boot/grub/grub.conf     用第一个内核启动

   9、reboot

   10、装个nginx,试试看能不能看见真实的clientip。

二、编译centos5

   1~4和centos6一样

   5、可能是由于centos5和6的区别还是很大的,所以在centos5上编译2.6.32的时候,需要让内核还是用旧的sysfs,否则会kernel panic。

   在.config中添加这两行,有的话就直接改,没有添上

   CONFIG_SYSFS_DEPRECATED=y
   CONFIG_SYSFS_DEPRECATED_V2=y

   之后的操作就和centos6的一样了(5~10)

参考:http://kb.linuxvirtualserver.org/wiki/IPVS_FULLNAT_and_SYNPROXY

http://ssmax.net/archives/1198.html


三、打内核rpm包(适用于centos6)

事先准备:

下载Linux-2.6.32-220.23.1.el6.x86_64.rs.src.tar.gz和kernel-2.6.32-220.23.1.el6.src.rpm到/usr/local/src

1、安装kernel-2.6.32-220.23.1.el6.src.rpm

1
rpm -ivh  /usr/local/src/kernel-2 .6.32-220.23.1.el6.src.rpm

2、生成内核源码目录

1
rpmbuild -bp ~ /rpmbuild/SPECS/kernel .spec

3、复制一份源码目录

1
2
cd  ~ /rpmbuild/BUILD/kernel-2 .6.32-220.23.1.el6/
cp  -a linux-2.6.32-220.23.1.el6.x86_64/ linux-2.6.32-220.23.1.el6.x86_64_new

4、在复制出来的源码目录中打阿里提供的toa补丁

1
2
cd  ~ /rpmbuild/BUILD/kernel-2 .6.32-220.23.1.el6 /linux-2 .6.32-220.23.1.el6.x86_64_new/
patch -p1 <  /usr/local/src/linux-2 .6.32-220.23.1.el6.x86_64.rs /toa-2 .6.32-220.23.1.el6.patch

5、编辑.config

1
2
3
#在linux-2.6.32-220.23.1.el6.x86_64_new中
sed  -i  's/CONFIG_IPV6=m/CONFIG_IPV6=y/g'  .config
echo  -e  '\n# toa\nCONFIG_TOA=m'  >> .config

6、拷贝.config至SOURCE

1
2
#在linux-2.6.32-220.23.1.el6.x86_64_new中,会提示覆盖,直接覆盖即可
cp  .config ~ /rpmbuild/SOURCES/config-x86_64-generic

7、删除原始源码中的.config

1
2
cd  ~ /rpmbuild/BUILD/kernel-2 .6.32-220.23.1.el6 /linux-2 .6.32-220.23.1.el6.x86_64
rm  -rf .config

8、生成最终的patch

1
2
cd  ~ /rpmbuild/BUILD/kernel-2 .6.32-220.23.1.el6/
diff  -uNr linux-2.6.32-220.23.1.el6.x86_64 linux-2.6.32-220.23.1.el6.x86_64_new/ > ~ /rpmbuild/SOURCES/toa .patch

9、编辑KERNEL.SPEC

1
2
3
4
vim ~ /rpmbuild/SPECS/kernel .spec
     %define distro_build rs.shanks
     Patch999999: toa.patch
     ApplyOptionalPatch toa.patch

10、打rpm包

1
rpmbuild -bb --with baseonly --without kabichk --with firmware --without debuginfo --target=x86_64 ~ /rpmbuild/SPECS/kernel .spec

11、加载toa模块

1
2
3
4
5
6
7
8
9
vim  /etc/sysconfig/modules/toa .modules
     #!/bin/bash
     modprobe toa > /dev/null  2>&1
chmod  u+x  /etc/sysconfig/modules/toa .modules
 
reboot
 
[root@localhost ~] # lsmod |grep toa
toa                     4203  0


done

***********************************

例如:我想知道请求 dx-xxx-xxx 03 这台机器11300端口的源IP信息?

方式:

1、抓目的端口为11300的SYN包

1
tcpdump  - i eth0  "tcp[tcpflags] & (tcp-syn) != 0 and dst port 11300"   - 1000  >>  / home / user / 11300.ni

2、编译以下代码

toa.c

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include 
#include 
#include 
#include 
  
int  main( int  argc, char  * argv[])
{
     struct in_addr addr;
     const char  * toaHex  =  argv[ 1 ];
     char  * ip  =  NULL;
     unsigned short port  =  0 ;
     addr.s_addr  =  htonl(strtol(&toaHex[strlen(toaHex)  -  8 ], NULL,  16 ));
     port  =  htonl(strtol(&toaHex[strlen(toaHex)  -  12 ], &toaHex[strlen(toaHex)  -  9 ],  16 ));
     ip  =  inet_ntoa(addr);
     printf( "%s %u\n" , ip, port);
}

3、执行该脚本进行转换

cat  11300.ni| awk  '{print $15}' | awk  -F  ','  '{system("./toa "$1)}'  >>  /home/user/result .txt



***********************************

参考:



本文转自 Tenderrain 51CTO博客,原文链接:http://blog.51cto.com/tenderrain/1982343


相关文章
|
应用服务中间件 nginx Shell
|
网络协议 Linux
[原创]分析解决lvs fullnat模式下后端服务器获取真实IP地址异常问题
分析解决lvs fullnat模式下少量的请求记录client IP不是用户真实的IP地址问题.
8374 0
|
搜索推荐 前端开发 数据挖掘
拼多多根据ID取商品详情原数据 API 实现实时数据获取的完整指南
在电商行业中,商品详情页是用户了解商品信息、进行购买决策的重要页面。为了提高用户体验和促进销售,电商平台通常会提供商品详情的API接口,以便第三方应用能够实时获取商品数据。本文将介绍如何使用拼多多获得的根据ID取商品详情原数据的API实现实时数据获取,并提供相应的代码示例。
|
Linux
linux各个版本内核源代码下载
linux各个版本内核源代码下载
1480 0
|
运维 监控 项目管理
运维工程师的出路到底在哪里?—— 浅谈运维工程师前景
运维工程师的出路到底在哪里?—— 浅谈运维工程师前景
|
存储 算法 安全
真实世界的密码学(一)(3)
真实世界的密码学(一)
834 0
|
2月前
|
机器人 数据安全/隐私保护 开发者
钉钉机器人接入 OpenClaw 全攻略教程
本文详解OpenClaw接入钉钉企业内部机器人的全流程:从创建应用、开通机器人能力、配置Stream模式(免公网域名),到获取Client ID/Secret并对接网关。涵盖前置准备、图文操作步骤及关键注意事项,助力高效实现业务信息实时同步与团队协作升级。
|
运维 算法 Linux
LVS详解(四)——LVS安装与配置命令
LVS详解(四)——LVS安装与配置命令
744 2
|
SQL 关系型数据库 MySQL
MySQL锁:解析隐式锁与显式锁
【4月更文挑战第20天】
803 0
|
NoSQL 关系型数据库 MySQL
mysql中的get_lock锁机制解析
mysql中的get_lock锁机制解析
971 0
mysql中的get_lock锁机制解析