Fullnat
LVS當前應用主要採用DR和NAT模式,但這2種模式要求RealServer和LVS在同一個vlan中,導致部署成本過高;TUNNEL模式雖然可以跨vlan,但RealServer上需要部署 ipip 模塊等,網絡拓撲上需要連通外網,較複雜,不易運維。爲了解決上述問題,我們在LVS上添加了一種新的轉發模式:FULLNAT,該模式和NAT模式的區別是:Packet IN時,除了做DNAT,還做SNAT(用戶ip->內網ip),從而實現 LVS-RealServer間可以跨vlan通訊,RealServer 只需要連接到內網。
FULLNAT將作爲一種新工作模式(同DR/NAT/TUNNEL),實現如下功能:
1. Packet IN時,目標ip更換爲realserver ip,源ip更換爲 內網 local ip;
2. Packet OUT時,目標ip更換爲client ip,源ip更換爲 vip;
注:Local ip爲一組內網ip地址;
它的性能和NAT相比,正常轉發性能下降<10%;
主要思想:引入local address(內網ip地址),cip-vip轉換爲lip->rip,而lip和rip均爲IDC內網ip,可以跨vlan通訊。
Fullnat轉發模式,如圖:
Fullnat實現原理,如圖:
FULLNAT-設計考慮
–TCP OPT-TIMESTAMP
RealServer kernel開啓tcp_tw_recycle
用戶A和B,timestamp大的訪問成功,timestamp小的訪問失敗
–TCP OPT-MSS
TCP三次握手最後一個ack包爲GET請求
GET請求>1個數據包,toa無法插入
–TCP - Sequence
RealServer上timewait的socket複用條件:seq遞增
1.內核編譯
rpm -ivh kernel-2.6.32-220.23.1.el6.src.rpm yum install -y rpm-build cd rpmbuild/SPECS/ yum install -y gcc redhat-rpm-config patchutils xmlto asciidoc elfutils-libelf-devel zlib-devel binutils-devel newt-devel python-devel hmaccalc perl-ExtUtils-Embed ##安裝軟件,解決依賴性 yum install -y newt-devel-0.52.11-3.el6.x86_64.rpm asciidoc-8.4.5-4.1.el6.noarch.rpm slang-devel-2.2.1-Lvs-fullnat-synproxy.tar.gz1.el6.x86_64.rpm yum install -y rng-tools rngd -r /dev/urandom ##產生密鑰 rpmbuild -bp kernel.spec ##編譯生成的內核源碼
2.對生成的內核源碼打補丁
cd rpmbuild/BUILD/kernel-2.6.32-220.23.1.el6/ tar zxf Lvs-fullnat-synproxy.tar.gz cd lvs-fullnat-synproxy/ cp lvs-2.6.32-220.23.1.el6.patch ../linux-2.6.32-220.23.1.el6.x86_64/ ##把補丁拷貝到其上層目錄 cd ../linux-2.6.32-220.23.1.el6.x86_64/ patch -p1 < lvs-2.6.32-220.23.1.el6.patch ##打補丁 vim /root/rpmbuild/BUILD/kernel-2.6.32-220.23.1.el6/linux-2.6.32-220.23.1.el6.x86_64/Makefile VERSION = 2 PATCHLEVEL = 6 SUBLEVEL = 32 EXTRAVERSION = -220.23.1.el6 ##改成修改的內核版本 NAME = Man-Eating Seals of Antiquity RHEL_MAJOR = 6 RHEL_MINOR = 2 RHEL_RELEASE = 219
3.磁盤拉伸 ##防止在編譯過程中空間不足而報錯
fdisk -cu /dev/dvb n p 1 t 8e w vgextend VolGroup /dev/vdb1 lvextend -L +18G /dev/VolGroup/lv_root VolGroup lvextend -l +4607 /dev/VolGroup/lv_root resize2fs /dev/VolGroup/lv_root
4.編譯與安裝
make -j4 ##編譯 make modules_install ##安裝模塊 make install ##安裝 vim /boot/grub/grub.conf default=0 timeout=5 reboot uname -r ##查看內核版本 如圖: