天天看點

toa 子產品

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 &lt; </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>&gt;&gt; .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/ &gt; ~</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 &gt;</code><code>/dev/null</code> <code>2&gt;&amp;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>&gt;&gt; </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,如需轉載請自行聯系原作者

繼續閱讀