如何在LVS中使用SSL

章老师你好:
有关web SSL测试中的问题向您请教。
我们测试中使用的是BRITESTREAM公司的BN1200 SSL硬件卸载卡。这块卡就是一块网卡,但是将ssl加解密全部完成,转交给系统的是明文。
nat模式下 DR使用一块SSL卸载卡(对用户),一块普通网卡(对real server),real server使用普通网 卡,测试ok。
What I haven't tested yet is failover between multiple load balancers.LVS contains a module that synchronizes TCP connection state information between the primary load balancer and a backup load balancer, so if the first one fails for any reason the second one will know most of the connection state. However, this is impossible to do with SSL because we cannot share the Secret connection information between chips. We will have to test and find out how thataffects the client-server connection state.

DR TUN模式下测试尚没有完成,由于数据包返回不经过DR,所以DR不使用ssl卸载卡,real server使用ssl卸载卡。缺点是这种方式浪费卡,(这块卡的性能较高)。DR不能干real server的活。
DR模式下,DR使用一块SSL卸载卡(对用户),一块普通网卡(对real server),real server使用普通网 卡,网络架构像nat模式。缺点是回包要经过DR.这个测试已经完成。

请问章先生和大家有无相关ssl的经验,方案和文档,能否介绍一下

Forums:

不好意思,最近出差离开了一段时间。

我想因为BRITESTREAM公司的BN1200 SSL硬件卸载卡对请求数据进行解密,对响应数据进行加密,这意味着带SSL加速的负载均衡服务只能用NAT方式,而不能用IP隧道或直接路由方式。

我想你是对的,BN1200 SSL硬件卸载卡保存私有的SSL连接信息,这个信息比较难在另一块BN1200 SSL硬件卸载卡构造出来。不知道BN1200 SSL硬件卸载卡是否支持两块卡连接信息同步的功能?若支持,那实现高可用的SSL加速负载均衡服务是没有问题的。

章博士你好:我们在LVS的DR架构中对ssl的应用进行测试,使用也是BRITESTREAM公司的BN1200 SSL硬件卸载卡。有两个问题向您请教。
1。我们的LVS/DR+SSL方式的负载均衡集群如下图所示:(类似nat拓扑) 请问这种方式是否可行?您能否评价一下这种方式?
______
|client|
|____|
5.6.7.8
|
_______
|Internet|
|______|
|
VIP=202.16.45.1
_eth0(BN卡)__
|director|
|__eth2_|
DIP=192.168.0.1
|
/---------------------------------\
|---------------|------------------|
RIP1=192.168.0.3 RIP=192.168.0.4 RIP=192.168.0.5
VIP=202.16.45.1 VIP=202.16.45.1 VIP=202.16.45.1
eth0___ ___eth0___ ___eth0____
|realserver||realserver||realserver|
|_______| |_______| |________|

我们把Redirector做路由的方式置于所有Real server的前方.Redirector安装了两块网卡(eth0=BN1200 SSL卡,eth2=普通网卡对real server).Redirector的linux内核打了一个补丁重新编译,因为linux内核发行版基本上不支持share_forward和rp_filter选项,也就是它不会转发源IP是自已的包。当打这个补丁后就可以使用那两个选项实现包的转发。
具体方案如下:
RealServer和Director的eth2都在同一个物理网段中,Director的内网卡(eth2)是192.168.0.1、外网卡(eth0)是BN卡为202.16.45.1作为对外界的virtual IP,外界客户通过该IP来访问整个集群系统。Real Server在lo上绑定IP:202.16.45.1,同时加入相应的路由。
注:director用的是从kernel.org下载的linux-2.6.12版内核源码加forward_shared-2.6.12-2. diff补丁编译的。
第一步:配置Director脚本并执行
运行脚本之后可以看到如下信息:
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 202.16.45.1:http rr
-> 192.168.0.3:http Route 1 0 0
-> 192.168.0.4:http Route 1 0 0
-> 192.168.0.5:http Route 1 0 0

第二步:配置Real Server
第三步:测试LVS
LVS/DR方式的负载均衡集群已经成功架设。模拟多个用户从外界访问202.16.45.1的80端口,用ipvsadm可以观看到以下信息:
# ipvsadm
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 202.16.45.1:http rr
-> 192.168.0.3:http Route 3 2 0
-> 192.168.0.4:http Route 2 1 0
-> 192.168.0.5:http Route 2 1 0
看到有3个HTTP请求,被分别分配在不同的Real Server上,表明这个负载均衡集群正在成功运行中。
第四步:设置SSL加解密通道
通过SSL操作手册和提供的ucli小程序使用大约4条命令即可设定一条加解密通道,假设我们设定202.16.45.1的443到80做SSL加解密。
第五步:测试SSL的LVS
通过web浏览器使用https://202.16.45.1即可访问,效果跟第三步测试效果一样,只是这次经过BN卡做SSL加解密的https协议。
这种LVS/DR方式与LVS/NAT方式不同,理论上性能相对nat来说要快(因为nat方式的LVS需要对包记录、修改、并重新计算校验,这方面很耗性能)。但和正规的LVS/DR相比,多一次路由过程,这种方式不需要在每机Real server上hidden有关ARP的回馈.

2.我们还准备用BN卡测试标准的DR布局,但把Redirector的重定向去掉,把Real server的网关设成Redirector并设置arp-hidden,这样回包就都经过Redirector了,看这种方式下BN卡是否可正常工作。请问章老师如下的方案是否可行?

把Load Banlancing的那台机只装BN卡和Real server连在同一个局域网(如下图),然后在之前的LVS/DR设置基础之上把
/proc/sys/net/ipv4/conf/all/send_redirect文件设为0,再把Real server的arp应答
hidden,看是否可以成功 。
图:
[client]
|
|
[switch]-------[ Real Serv ]
|.....\
|........\
BNcard...\
[LVS] [Real Serv]

谢谢!
大家如果有LVS+SSL的相关经验和文档,欢迎和我们讨论。
email&MSN:inlife@tom.com

第一种方法挺棒的,比我想得远。:) 原来做过在NAT架构下使用LVS/DR的方式,忘记了和SSL可以这样结合。

第二种方法应该可行的,你已经考虑到了禁止send_redirect。

先进!

关注结果,不知道作者什么时候会 回来汇报一下!

如果不用 SSL 卡, LVS 可以解决 SSL 么?