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_第1张图片


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