LVS 四层转发模式:DR模式、TUNNEL模式、NAT模式、FULLNAT模式

1.DR模式

 要求调度器 LB 与真实服务器 RS 都有一块网卡连接到同一物理网段上,必须在同一个局域网环境。(使用MAC地址确定真实服务器)

 RS需要配置VIP与LB的IP相同。

2.TUNNEL模式

简单来说IP隧道技术就是将 【IP数据包】 的上面再封装一层【IP数据包】, 然后路由器根据最外层的IP地址路由到目的地服务器,目的地服务器拆掉最外层的IP数据包,拿到里面的IP数据包进行处理。

用户请求负载均衡服务器,当IP数据包到达负载均衡服务器后

根据算法选择一台真实的服务器,然后通过IP隧道技术将数据包原封不动再次封装,并发送给真实服务器

当这个数据包到达真实服务器以后,真实服务器进行拆包(拆掉第一层的IP包)拿到里面的IP数据包进行处理,然后将结果直接返回给客户端。
 

3.NAT模式

 NAT模式对入报文做了DNAT,即将报文的目的地址改为RS的地址,但源地址不变;

 出报文到了LVS(需要LVS作为网关)设备上后做SNAT,即将报文的源地址改为LVS设备上的地址,目的地址不变。

4.FULLNAT模式

 FULLNAT模式对入报文做了DNAT+SNAT,即将报文的目的地址改为RS的地址,源地址改为LVS设备地址;

 出报文到了LVS(不必要配置为网关)设备上后做SNAT+DNAT,即将报文的源地址改为LVS设备上的地址,目的地址改为真实的用户地址。

 问题

一般来说,我们不需要使用FULLNAT,但是有一种场景,必须使用FULLNAT(或者类似的技术)

通常LVS是为了解决外部访问集群内部的问题,但是在我们的一个生产环境上,我们遇到了必须在集群内部的server1,向server2/server3(提供sysdb)写log的场景。 server2/server3对外提供了VIP,用户可以从集群外部通过LVS来访问,但是server1访问sysdb的时候,会有路由问题。server1发出的syn报文(使用的server2/server3的VIP),经由LVS转发给了server2,而server2应答的syn+ack报文,由于syn报文的源地址是server1,而server1跟server2在同一局域网内,所以server1会直接将该报文转发给server1,而不经过LVS。 所以就会不通。

有了fullnat,syn报文经过LVS的处理以后,源地址改为LVS的LIP(Local IP)、目的地址改为了server2的地址,所以,对于server2来说,该syn请求就是LVS发起的,所以syn+ack报文还是会应答给LVS服务器;而应答报文再经过LVS处理,源地址改为LVS的EIP(External IP),目的地址改为server1的地址,所以对于server1来说,请求得到了正确的应答,连接可以建立。

fullnat解决了集群内部互相访问的问题。在阿里内部,应该还有更广阔的应用(例如虚机之间通信)。不过,据说青云曾经指出fullnat的一个弊端,即对于Real Server来说,无法审计真实的客户端,只能向LVS(阿里叫做SLB)请求。

posted @ 2020-04-24 21:37  vvf  阅读(2715)  评论(0)    收藏  举报