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

本文共 863 字,大约阅读时间需要 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
,如需转载请自行联系原作者
你可能感兴趣的文章
${content}和<c:out value="${content}">区别
查看>>
Android内存优化
查看>>
Linux文件管理
查看>>
JFinal常见问题汇总
查看>>
Ubuntu install vsftpd
查看>>
【BuglyIOS干货分享】iOS内存管理:从MRC到ARC实践
查看>>
【Bugly干货分享】Android性能优化典范之多线程篇
查看>>
【腾讯Bugly干货分享】QQ电话适配iOS10 Callkit框架
查看>>
python,时间加减,时间计算,时间格式化,时间提取汇总
查看>>
Python 数据结构>>7.7 列表解析
查看>>
基于MapReduce框架的PageRank算法实战(下)
查看>>
linux 管理工具
查看>>
页面被刷新两次异常
查看>>
java小知识点
查看>>
Linux 配置ip,远程,验证,运行,救援,相关
查看>>
Java(Android)线程池
查看>>
Spring MVC整合Velocity
查看>>
使用 GUID 值来作为数据库行标识讲解
查看>>
find命令详解
查看>>
linux字符终端中文显示输入工具zhcon
查看>>