码迷,mamicode.com
首页 > 其他好文 > 详细

Fullnat

时间:2016-06-24 13:09:30      阅读:816      评论:0      收藏:0      [点我收藏+]

标签:ip地址   成本   local   网络   用户   


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

如图:

技术分享

本文出自 “jeffrey13” 博客,谢绝转载!

Fullnat

标签:ip地址   成本   local   网络   用户   

原文地址:http://jeffrey13.blog.51cto.com/8875406/1792387

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!