LVS FULLNAT 概要设计
By 吴佳明_普空
1 背景
LVS 当前应用主要采用 DR 和 NAT 模式,但这 2 种模式要求 RealServer 和 LVS
在同一个 vlan 中,导致部署成本过高;TUNNEL 模式虽然可以跨 vlan,但 RealServer
上需要部署 ipip 模块等,网络拓扑上需要连通外网,较复杂,不易运维。
为了解决上述问题,我们在 LVS 上添加了一种新的转发模式:FULLNAT,该
模式和 NAT 模式的区别是:Packet IN 时,除了做 DNAT,还做 SNAT(用户 ip->内
网 ip),从而实现 LVS-RealServer 间可以跨 vlan 通讯,RealServer 只需要连接到内
网;
2 目标
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%;
3 总体思路
1. 每个 session 维护 9 元组,caddr/vaddr/laddr/daddr,增加了 local address;
2. 逻辑上采用 2 个 session 表:
创建 in_idx 和 out_idx(struct ip_vs_conn_idx)结构体变量,2 个 index 指向同
一 session;
1. OUT2IN:in_idx 结构体变量,hash key 为 caddr/vaddr;
2. IN2OUT:out_idx 结构体变量,hash key 为 daddr/laddr;
评论0