LVSFULLNAT概要设计方案_第1页
LVSFULLNAT概要设计方案_第2页
LVSFULLNAT概要设计方案_第3页
LVSFULLNAT概要设计方案_第4页
LVSFULLNAT概要设计方案_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

LVSFULLNAT纲要设计By吴佳明_普空背景LVS目前应用主要采纳DR和NAT模式,但这2种模式要求RealServer和LVS在同一个vlan中,致使部署成本过高;TUNNEL模式固然能够跨vlan,但RealServer上需要部署ipip模块等,网络拓扑上需要连通外网,较复杂,不易运维。为认识决上述问题,我们在LVS上增添了一种新的转发模式:FULLNAT,该模式和NAT模式的差别是:PacketIN时,除了做DNAT,还做SNAT(用户ip->内网ip),进而实现LVS-RealServer间能够跨vlan通信,RealServer只要要连结到内网;目标FULLNAT将作为一种新工作模式(同DR/NAT/TUNNEL),实现以下功能:PacketIN时,目标ip改换为realserverip,源ip改换为内网localip;PacketOUT时,目标ip改换为clientip,源ip改换为vip;注:Localip为一组内网ip地点;性能要求,和NAT比,正常转发性能降落<10%;整体思路每个session保护9元组,caddr/vaddr/laddr/daddr,增添了localaddress。逻辑上采纳2个session表:创立in_idx和out_idx(structip_vs_conn_idx)构造体变量,2个index指向同session;OUT2IN:in_idx构造体变量,hashkey为caddr/vaddr;IN2OUT:out_idx构造体变量,hashkey为daddr/laddr;要点技术点4.1session管理-ip_vs_conn.cFULLNAT的要点是session管理,其设计思路拜见第3章-整体思路;DR/NAT/TUNNEL下,laddr设置为caddr,以便查找session/nat变换时,一致办理;FULL-NAT下,LOCAL_INHOOK点,找到session后,怎样确认是IN2OUT仍是OUT2IN的包?查找session时,输出dir参数,dir取自structip_vs_conn_idx中的flag;1个session在2个hash桶中,查找session时,能否需要计算2个hashkey?不需要,在查找sesson时,都用s_addr/d_addrhash;由于创立session已经躲避了该问题。4.2fullnat变换-ip_vs_xmit.c新增函数ip_vs_fnat_xmit用于fullnat变换;新增函数tcp_fnat_in_handler–实现OUT2IN的fullnat新增函数tcp_fnat_out_handler–实现IN2OUT的fullnat4.3TOA(addressoftcpoption)插-入clientip为了保证应用透明性,经过tcpoption传达clientip给RealServer;在函数tcp_fnat_in_handler中调用插入clientip的功能,由于该功能只有fullnat才会用和tcp协议有关新增函数:tcp_opt_add_toa,用于实现toa功能;函数tcp_opt_insert_cip实现可参照函数tcp_options_write,主要流程:假如skb数据长度超出设定的MSS,则异样报错;复制skb,增添长度;Skb数据今后挪动,tcp头部以后,空出TOA空间;插入CIP,包含OPTCODE+LEN+DATA调整tcp头部长度参数,调整SKB参数;4.4TCPOPT办理参照函数tcp_parse_options;过滤TIMESTAMPFULLNAT方式下,假如timestamp开启,同时RealServer上开启tcp_tw_recycle,则关于NAT网关出来的用户,可能会出现服务端拒连结的问题;同时,采纳localaddress会加剧该问题;解决方法:过滤掉timestamp,即过滤掉Client->RSSYN包中的timestamp;新增函数tcp_opt_remove_timestamp,在函数tcp_fnat_in_handle中被调用。注意点:需从头计算校验和;调整MSSFULLNAT模式下,需要插入clientip到tcpoption中,为了保证数据包大小不超出MTU,需要将RS->ClientSYN_ACK包中的MSS减小TCPOLEN_ADDR(8字节);新增函数tcp_opt_adjust_mss,在函数tcp_fnat_in_handle中被调用。注意点:需从头计算校验和;4.5Localaddress管理Localaddress以list方式保护在virtualserver中,近似realserver;ip保护:采纳链表,RR轮转;port保护:经过查找session表,判断端口能否可用;不一样工作模式,选择不一样localaddress:FULLNAT–从virtualserver的localaddresslist中选用;DR/NAT/TUNNEL–采纳clientip作为localaddress,进而实现不一样转发模式下,查找session等的一致办理;4.6序列号变换正常流程选择localaddress后,需要从头计算seq,以知足同一个TCP流中的SYN包序列号单向递加的要求;Seq初始化新增函数tcp_in_init_seq,用于序列号初始化工作,在函数tcp_fnat_in_handle中被调用;序列号计算采纳内核标准函数secure_tcp_sequence_number;注意:IPV4和IPV6序列号计算方式不一样;OUT2IN,变换seq新增函数tcp_in_adjust_seq,在函数tcp_fnat_in_handle中被调用;IN2OUT,变换ack_seq新增函数tcp_out_adjust_seq,在函数tcp_fnat_out_handle中被调用;包命中已有session,则从头计算seq4.7ICMP包办理ICMP包主要在ip_vs_in_icmp和ip_vs_out_icmp2个函数中办理;4.8RESET功能Established状态的session超时开释后,client/rs可能以为有关socket仍是活跃的,进而影响业务;解决方法:关于Established状态的session,超时开释时,向client和rs发送reset包;4.9控制接口FULLNAT增添了localaddress和fullnat转发模式2个配置;Fullnat转发模式该信息保护在svc->flags中,所以,需要在ip_vs.h头文件中增添#defineIP_VS_CONN_F_FULLNAT0x0005/*fullnat*/需要改正keepalived和ipvsadm程序Localaddress每个service都有自己的localaddresslist在sockopt/netlink中,增添IP_VS_SO_SET_ADDLADDRIP_VS_SO_SET_DELLADDRIP_VS_SO_GET_LADDRS需要改正keepalived和

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论