一、SLB 产生背景
SLB(服务器负载平衡):在多个提供雷同服务的服务器的状况下,负载平衡设施存在虚构服务地址,当大量客户端从内部拜访虚构服务 IP 地址时,负载平衡设施将这些报文申请依据负载平衡算法,将流量平衡的调配给后盾服务器以均衡各个服务器的负载压力,防止在还有服务器压力较小状况下其余服务达到性能临界点呈现运行迟缓甚至宕机状况,从而进步服务效率和品质。
因而对客户端而言,RS(real server 理论服务器)的 IP 地址即是负载平衡设施 VIP(虚构服务地址 IP)地址,真正的 RS 服务器 IP 地址对于客户端是不可见的。
二、SLB 的三种传输模式
七层 SLB 和四层 SLB 的区别:
四层 SLB:配置负载平衡设施上服务类型为 tcp/udp,负载平衡设施将只解析到 4 层,负载平衡设施与 client 三次握手之后就会和 RS 建设连贯;
七层 SLB:配置负载平衡设施服务类型为 http/ftp/https 等,负载平衡设施将解析报文到 7 层,在负载平衡设施与 client 三次握手之后,只有收到对应七层报文,才会跟 RS 建设连贯。
在负载平衡设施中,SLB 次要工作在以下的三种传输模式中:
- 反向代理模式
- 透传模式
- 三角模式
依据不同的模式,负载平衡设施的工作形式也不尽相同,但无论在哪种模式下,客户端发动的申请报文总是须要先达到负载平衡设施进行解决,这是负载平衡设施失常工作的前提。模仿网络拓扑环境:
- Client:10.8.21.40
- 负载平衡设施:172.16.75.83
- VIP:172.16.75.84
- RS1IP:172.16.75.82
- RS2IP:172.16.75.85
在整个报文交互过程中,采纳 Tcpdump 和 Wireshark 别离在 RS 和 Client 处抓包,而后应用 Wireshark 进行报文解析。
三、反向代理模式
反向代理:一般的代理设施是内网用户通过代理设施出外网进行拜访,而工作在这种模式下的负载平衡设施,则是外网用户通过代理设施拜访内网,因而称之为反向代理。
在反向代理模式下:
当负载平衡设施收到客户端申请后,会记录下此报文(源 IP 地址、目标 IP 地址、协定号、源端口、目标端口,服务类型以及接口索引),将报文目标地址更改为优选后的 RS 设施的 IP 地址,目标端口号不变,源地址批改为负载平衡设施上行与对应 RS 设施接口的 IP 地址,源端口号随机发送给 RS;
当 RS 收到报文后,会以源为 RS 接口 IP 地址,目标 IP 设施地址回复给负载平衡设施,负载平衡设施将源批改为 VIP,目标端口号批改为客户端的源端口号,目标 IP 批改为 Client 的源 IP 回复报文。
查看报文解析后果:
配置实现后,Client 拜访 RS 服务器,返回胜利,整个报文交互过程如下:
Client 和负载平衡设施之间的报文交互过程
RS 和负载平衡设施之间报文交互过程
后果剖析
剖析整个报文交互过程:
TCP 握手过程:首先 Client 向负载平衡设施发送 TCP SYN 报文申请建设连贯,源 IP 为 Client 的 IP 10.8.21.40,源端口号 50894,目标 IP 为 VIP 地址 172.16.75.84,目标端口号 80;
收到申请报文后,负载平衡设施会以源 IP 为 VIP 地址 172.16.75.84,端口号 80,目标 IP 10.8.21.40,目标端口号 50894 回应 SYN ACK 报文;
Client 收到报文后回复 ACK 报文,TCP 三次握手胜利。
HTTP 报文交互过程:
当负载平衡设施与 client 实现三次握手后,因为配置的七层 SLB,如果收到 HTTP 申请,就会依据负载平衡算法和服务器衰弱状态优选出对应的 RS(在这次过程中抉择的 RS 设施为 172.16.75.82),而后与 RS 建设 TCP 连贯:
负载平衡设施发送 TCP SYN 报文申请连贯,源 IP 为负载平衡设施与 RS 相连接口 IP 172.16.75.83,源端口号随机 4574,目标 IP 为 RS 的 IP 172.16.75.82,目标端口号 80;
RS 收到报文后,以源 IP 172.16.75.82,端口号 80,目标 IP 172.16.75.83,目标端口号 4574 回复 SYN ACK 报文,负载平衡设施回复 ACK 报文建设三次握手;
之后,负载平衡设施再将收到的 HTTP 报文源 IP 批改为与 RS 相连上行接口 IP 地址 172.16.75.83,源端口号为随机端口号,将报文发送给 RS;当 RS 收到报文后,应用源为本地 IP 172.16.75.82,目标 IP 为 172.16.75.83 进行回复,所以报文间接回复给负载平衡设施;
当负载平衡设施收到 RS 的回应报文后,将报文的源批改为 VIP 地址 172.16.75.84,目标 IP 为 10.8.21.40 发送回 Client,再将目标端口号批改为 HTTP 申请报文中的源端口号,服务器拜访胜利。
由上述的过程能够看出,在 RS 端上,client 的实在 IP 地址被负载设施批改成与 RS 相连接口的 IP 地址,所以 RS 无奈记录到 Client 的拜访记录,为了解决这个问题,能够采纳在 HTTP 报文头中增加 X -Forwarded-For 字段,本文不做赘述,能够自行查问。
四、透传模式
当负载平衡设施工作在透传模式中时,RS 无奈感知到负载平衡设施的存在,对于 Client 来说,RS 的 IP 地址就是负载平衡设施的 VIP 地址。
在这种模式下,当负载平衡设施收到源为 Client 的 IP,目标 IP 为本地 VIP 地址的报文时,会将报文依据负载平衡策略和健康状况发送给最优的 RS 设施上,继而 RS 设施会收到目标为本地 IP,源为 Client 理论 IP 的申请报文;
而后 RS 将会间接回应此申请,报文的目标 IP 地址为 Client 的 IP 地址,当负载平衡设施收到此报文后,将源 IP 地址批改为 VIP 地址,而后将报文发送给 Client。
报文解析后果:
同样在 RS 端和 Client 端抓取交互报文:
Client 和负载平衡设施之间的报文交互过程
RS 和负载平衡设施之间的报文交互过程
后果剖析:
TCP 握手过程:同反向代理模式交互过程
HTTP 报文交互过程:
Client 向负载平衡设施的 VIP 地址 172.16.75.84 以源 IP 10.8.21.40 发送 HTTP 申请,当负载平衡设施收到报文后,与优选后的 RS 进行 TCP 三次握手,过程同反向代理模式,而后将收到的 HTTP 报文,不扭转报文的源 IP 地址和源 / 目标端口号,只批改目标 IP 批改为优选后的 RS 地址 172.16.75.82;
当 RS 收到源来自 IP 10.8.21.40 的报文后,回复报文给 IP 地址 10.8.21.40,此时要留神,必须在 RS 上配置回复报文通过负载平衡设施,负载平衡设施会将源 IP 批改为 VIP 地址 172.16.75.84,而后转发给 Client,否则 Client 将会收到源 IP 为 172.16.75.82 的 HTTP 报文,服务器拜访失败。
五、三角模式
在三角模式下,当客户端发送申请到负载设施上时,负载平衡设施会计算出最优 RS,而后间接依据 MAC 地址将报文转发给 RS,在 RS 上配置报文的源 IP 为 VIP 地址(个别配置在 loopback 口上),因而在这种状况下,RS 会间接将报文发送给 Client,即便回复报文通过负载平衡设施,此设施不做任何解决。因为报文在整个过程中传输路径相似于三角形,因而称之为三角模式。
报文解析后果
别离在 Client 端和 RS 端抓包,内容如下:
Client 和负载平衡设施之间的报文交互过程
RS 和负载平衡设施之间的报文交互过程
后果剖析
TCP 握手过程:
因为采纳了 4 层 SLB,所以在 TCP 握手过程中与上述的 7 层 SLB 有些不同,当 Client 和 RS 实现三次握手之后,此时负载平衡设施会间接抉择 RS,而后跟 RS 建设 TCP 三次握手;
在三角模式环境中,因为 RS 的 Loopback 口和负载平衡设施上都存在着 VIP 地址 172.16.75.84,当负载平衡设施通过负载平衡算法抉择出对应的 RS 后,会依据理论配置的 RS 的 IP 地址对应的 mac 地址,将报文以目标 mac 为 RS,目标 IP 为 VIP 的形式建设 TCP 连贯。
HTTP 报文交互过程:
首先 Client 向负载平衡设施的 VIP 发送 HTTP 申请,源为 10.8.21.40,当负载平衡设施收到报文后,将报文间接转发给 RS,当 RS 收到源 IP 为 10.8.21.40,目标 IP 为本地 Loopback 口 IP 地址 172.16.75.84 的报文后,间接将报文回复给 10.8.21.40,同样源为 IP 地址 172.16.75.84,由此拜访服务器胜利。
在三角模式中,因为回复报文负载平衡设施不做任何解决,所以非常适合于 RS 到 Client 方向流量较大或者连贯数目较多的组网环境。
采纳三角模式时,必须留神 RS 有路由能够达到 Client,并且在 RS 的 Loopback 接口上必须有负载平衡设施的 VIP 地址,否则即便 RS 设施收到 Client 的申请报文也会间接抛弃报文,不作回应。
六、总结
因为反向代理模式中在 RS 侧只能收到源为负载平衡设施 IP 的报文,因而能够应用防火墙减少安全性,只容许源 IP 为负载平衡设施的 IP 地址的报文通过,同时减少 X -Forwarded-For 字段也能够让 RS 只容许有此字段的报文进行拜访,因而安全性绝对较高。
_作者:蹦蹦啪
链接:https://www.zhihu.com/questio…