toa子產品是為了讓後端的realserver能夠看到真實的clientip而不是lvs的dip。
一、編譯centos6
2、解壓
3、編輯.config,将CONFIG_IPV6=M改成CONFIG_IPV6=y
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)
<a href="http://ssmax.net/archives/1198.html" target="_blank">http://ssmax.net/archives/1198.html</a>
三、打核心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
<code>rpm -ivh </code><code>/usr/local/src/kernel-2</code><code>.6.32-220.23.1.el6.src.rpm</code>
2、生成核心源碼目錄
<code>rpmbuild -bp ~</code><code>/rpmbuild/SPECS/kernel</code><code>.spec</code>
3、複制一份源碼目錄
<code>cd</code> <code>~</code><code>/rpmbuild/BUILD/kernel-2</code><code>.6.32-220.23.1.el6/</code>
<code>cp</code> <code>-a linux-2.6.32-220.23.1.el6.x86_64/ linux-2.6.32-220.23.1.el6.x86_64_new</code>
4、在複制出來的源碼目錄中打阿裡提供的toa更新檔
<code>cd</code> <code>~</code><code>/rpmbuild/BUILD/kernel-2</code><code>.6.32-220.23.1.el6</code><code>/linux-2</code><code>.6.32-220.23.1.el6.x86_64_new/</code>
<code>patch -p1 < </code><code>/usr/local/src/linux-2</code><code>.6.32-220.23.1.el6.x86_64.rs</code><code>/toa-2</code><code>.6.32-220.23.1.el6.patch</code>
5、編輯.config
<code>#在linux-2.6.32-220.23.1.el6.x86_64_new中</code>
<code>sed</code> <code>-i </code><code>'s/CONFIG_IPV6=m/CONFIG_IPV6=y/g'</code> <code>.config</code>
<code>echo</code> <code>-e </code><code>'\n# toa\nCONFIG_TOA=m'</code> <code>>> .config</code>
6、拷貝.config至SOURCE
<code>#在linux-2.6.32-220.23.1.el6.x86_64_new中,會提示覆寫,直接覆寫即可</code>
<code>cp</code> <code>.config ~</code><code>/rpmbuild/SOURCES/config-x86_64-generic</code>
7、删除原始源碼中的.config
<code>cd</code> <code>~</code><code>/rpmbuild/BUILD/kernel-2</code><code>.6.32-220.23.1.el6</code><code>/linux-2</code><code>.6.32-220.23.1.el6.x86_64</code>
<code>rm</code> <code>-rf .config</code>
8、生成最終的patch
<code>diff</code> <code>-uNr linux-2.6.32-220.23.1.el6.x86_64 linux-2.6.32-220.23.1.el6.x86_64_new/ > ~</code><code>/rpmbuild/SOURCES/toa</code><code>.patch</code>
9、編輯KERNEL.SPEC
<code>vim ~</code><code>/rpmbuild/SPECS/kernel</code><code>.spec</code>
<code> </code><code>%define distro_build rs.shanks</code>
<code> </code><code>Patch999999: toa.patch</code>
<code> </code><code>ApplyOptionalPatch toa.patch</code>
10、打rpm包
<code>rpmbuild -bb --with baseonly --without kabichk --with firmware --without debuginfo --target=x86_64 ~</code><code>/rpmbuild/SPECS/kernel</code><code>.spec</code>
11、加載toa子產品
<code>vim </code><code>/etc/sysconfig/modules/toa</code><code>.modules</code>
<code> </code><code>#!/bin/bash</code>
<code> </code><code>modprobe toa ></code><code>/dev/null</code> <code>2>&1</code>
<code>chmod</code> <code>u+x </code><code>/etc/sysconfig/modules/toa</code><code>.modules</code>
<code>reboot</code>
<code>[root@localhost ~]</code><code># lsmod |grep toa</code>
<code>toa 4203 0</code>
done
***********************************
例如:我想知道請求 dx-xxx-xxx 03 這台機器11300端口的源IP資訊?
方式:
1、抓目的端口為11300的SYN包
2、編譯以下代碼
toa.c
3、執行該腳本進行轉換
<code>cat</code> <code>11300.ni|</code><code>awk</code> <code>'{print $15}'</code><code>|</code><code>awk</code> <code>-F </code><code>','</code> <code>'{system("./toa "$1)}'</code> <code>>> </code><code>/home/user/result</code><code>.txt</code>
參考:
<a href="http://www.just4coding.com/blog/2015/11/16/toa/" target="_blank">LVS FULLNAT模式下用戶端真實位址的傳遞</a>
本文轉自Tenderrain 51CTO部落格,原文連結:http://blog.51cto.com/tenderrain/1982343,如需轉載請自行聯系原作者