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包

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

2、编译以下代码

toa.c

#include <stdio.h>
#include <string.h>
#include <arpa/inet.h>
#include <stdlib.h>
 
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



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

参考:

LVS FULLNAT模式下客户端真实地址的传递







      本文转自Tenderrain 51CTO博客,原文链接:http://blog.51cto.com/tenderrain/1982343,如需转载请自行联系原作者




相关文章
|
6月前
|
传感器 编解码 人工智能
PIE-ENGINE——高分1号系列影像数据大气层顶反射数据TOA
PIE-ENGINE——高分1号系列影像数据大气层顶反射数据TOA
87 0
ENVI Classic:如何加载栅格数据(Img/DEM)和矢量数据(evf of ROI)?
ENVI Classic:如何加载栅格数据(Img/DEM)和矢量数据(evf of ROI)?
746 0
|
6月前
|
存储 传感器 编解码
LANDSAT_7/02/T1/TOA的Landsat7_C2_TOA类数据集
LANDSAT_7/02/T1/TOA的Landsat7_C2_TOA类数据集
39 0
|
6月前
GE Fanuc IC200MDD849模块 离散混合I/O模块
GE Fanuc IC200MDD849模块 离散混合I/O模块
ENVI_IDL:批量对Modis Swath产品进行均值运算+解析
ENVI_IDL:批量对Modis Swath产品进行均值运算+解析
171 0
ENVI_IDL:批量对Modis Swath产品进行均值运算+解析
VOS3000 AXB模块工作原理
OS AXB 模块适用于语音市场直连运营商或虚拟运营商 X 号平台的业务需求 与 VOS 系统无缝集成,无需独立服务器部署,节约硬件,网络成本 单机支持不低于 2,000 并发 AXB 呼叫,性能是市面常见 AXB 产品的 2-3 倍
VOS3000 AXB模块工作原理
|
C++ 流计算
UE 虚幻引擎 【DT Subsystem】 插件说明
UE 虚幻引擎 【DT Subsystem】 插件说明
225 0
|
传感器 数据采集 数据可视化
Google Earth Engine(GEE)——Landsat 8TI/TOA/SR影像对比分析区别和去云即NDVI计算
Google Earth Engine(GEE)——Landsat 8TI/TOA/SR影像对比分析区别和去云即NDVI计算
1891 0
Google Earth Engine(GEE)——Landsat 8TI/TOA/SR影像对比分析区别和去云即NDVI计算
|
编解码 算法
Google Earth Engine ——MOD14A2.006: Terra Thermal Anomalies & Fire 8-Day Global 1km提供了1公里分辨率的8天火灾合成数据
Google Earth Engine ——MOD14A2.006: Terra Thermal Anomalies & Fire 8-Day Global 1km提供了1公里分辨率的8天火灾合成数据
249 0
Google Earth Engine ——MOD14A2.006: Terra Thermal Anomalies & Fire 8-Day Global 1km提供了1公里分辨率的8天火灾合成数据
|
传感器 ice
Google Earth Engine ——Landsat 5 TM_TOA DN值缩放的、校准的传感器辐射度数据集
Google Earth Engine ——Landsat 5 TM_TOA DN值缩放的、校准的传感器辐射度数据集
225 0
Google Earth Engine ——Landsat 5 TM_TOA DN值缩放的、校准的传感器辐射度数据集