Fullnat


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轉發模式,如圖:

wKioL1dr_PCRzy4qAAKYlOp7qcU673.png-wh_50


Fullnat實現原理,如圖:

wKioL1dr_P-QgZhwAAJHG949NVM491.png-wh_50


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  ##查看內核版本
如圖:


wKiom1dr_RvTJfEzAAAUPsDOrbo767.png-wh_50

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章