博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
lvs 负载均衡fullnat 模式clientip 怎样传递给 realserver
阅读量:7219 次
发布时间:2019-06-29

本文共 851 字,大约阅读时间需要 2 分钟。

    关于LVS和FULLNAT的介绍可以看一下 淘宝吴佳明(普空)的视频  http://blog.aliyun.com/1750 ,

FULLNAT模式很大简化了LVS的配置和部署,目前淘宝和百度基本上都在使用FULLNAT模式来作为接入侧的
负载均衡模式.
        百度的LVS叫做BVS, Baidu Virtual Server, 是在LVS基础上修改的增加了L3 Though 和
SYN Porxy,貌似也是吴佳明(普空)在百度搞的, 类似FULLNAT 项目.
        下面的图来自吴佳明(普空)的PPT, 自己重画了一遍,关于NAT和FULLNAT的区别如下图所示:

         看完上图后发现 FULLNAT有一个问题是:RealServer无法获得用户IP;淘宝通过叫TOA的方式解决的,

主要原理是:将client address放到了TCP Option里面带给后端RealServer,RealServer收到后保存在socket
的结构体里并通过toa内核模块hook了getname函数,这样当用户调用getname获取远端地址时,返回的是保
存在socket的TCPOption的IP. 百度的BVS是通过叫ttm模块实现的,其实现方式跟toa基本一样,只是没有开源.
 实现原理图如下:



下面看下上面说的逻辑的实现代码

lvs侧在TCP报文的选项中插入clientip代码:  tcp_fnat_in_handler()


RS侧收到建连报文时,取出toa里面的client ip和port 存放在socket的use_data里,toa.c


HOOK挂载:

当应用层调用getpeername() 或者 getsocketname() 时,会进入到inet_getname_toa,如果存在toa信息则将
socket里存放的真是的clientip 返回给应用层。'

本文转自 Tenderrain 51CTO博客,原文链接:http://blog.51cto.com/tenderrain/1982335

你可能感兴趣的文章
深入理解JVM:Java内存模型JMM
查看>>
前嗅ForeSpider脚本教程:基础对象(一)
查看>>
shell命令行下常用快捷键汇总
查看>>
【错误集】之nagios-plugins编译出错
查看>>
电脑文件备份软件
查看>>
php和html混写,遍历出二维关联数组
查看>>
nginx基础应用
查看>>
我的友情链接
查看>>
anrdoid 蓝牙简易发送代码
查看>>
[工具]Mac下非常好用的快捷终端Dterm
查看>>
PingingLab传世经典系列《CCNA完全配置宝典》-4.1 HDLC基本配置
查看>>
exchange2007 升级到 sp3 很ez
查看>>
SetupDiGetDeviceInterfaceDetail 函数
查看>>
Elasticsearch Kibana安装与使用
查看>>
我的友情链接
查看>>
TODO:这是一个我的自媒体
查看>>
conn堡垒机-日志审计和录像审计
查看>>
windows server 2008 r2系统搭建wamp环境
查看>>
docker学习笔记-批量删除停止运行的容器
查看>>
linux添加用户操作日志
查看>>