【博客679】LVS NAT模式与FULLNAT模式原理与配置差别

LVS NAT模式与FULLNAT模式原理与配置差别

注意:

LVS NAT模式是LVS原生的一种工作方式,而FULLNAT是在NAT模式下通过配置SNAT来
实现FULLNAT的,而且配合SNAT这部分是靠我们自己来实现的

1、LVS NAT模式原理与特点

在这里插入图片描述

在这里插入图片描述
NAT模式的数据包请求流程:

  • 1、当用户请求到达 Director Server,此时请求的数据报文会先到内核空间的 PREROUTING 链。 此时报文的源 IP 为 CIP,目标 IP 为 VIP
  • 2、PREROUTING 检查发现数据包的目标 IP 是本机,将数据包送至 INPUT 链
  • 3、IPVS 比对数据包请求的服务是否为集群服务,若是,修改数据包的目标 IP 地址为后端服务器 IP,然后将数据包发至 POSTROUTING 链。 此时报文的源 IP 为 CIP,目标 IP 为 RIP
  • 4、POSTROUTING 链通过选路,将数据包发送给 Real Server
  • 5、Real Server 比对发现目标为自己的 IP,开始构建响应报文发回给 Director Server。 此时报文的源 IP 为 RIP,目标 IP 为 CIP
  • 6、Director Server 在响应客户端前,此时会将源 IP 地址修改为自己的 VIP 地址,然后响应给客户端。 此时报文的源 IP 为 VIP,目标 IP 为 CIP

NAT模式特点:

  • RS 应该使用私有地址,RS 的网关必须指向 DIP
  • DIP 和 RIP 必须在同一个网段内
  • 请求和响应报文都需要经过 Director Server,高负载场景中,Director Server 易成为性能瓶颈
  • 支持端口映射
  • RS 可以使用任意操作系统

2、为什么需要LVS FULLNAT模式

LVS NAT模式下,一般需要设置RS 的网关必须指向 DS:
因为RS收到的包的源ip是client ip,如果不设置RS 的网关必须指向 DS,默认将包送回DS,再由DS回复给client的话,那么RS直接回给client就会有问题,因为client发出的时候目的ip是vip,不是RS的ip,那么此时client对RS直接回过来的包会回复RST来终止这个连接,因为在client看来,不认为这个包是自己发出去的请求包的回包

如果采用LVS NAT + MASQUERADE实现FULLNAT的话,则不会有这个问题,因为RS看到的ip是DS的ip,也就是DS对client和对RS实现了双边连接,从而达到FULLNAT目的。虽然NAT模式也是RS流量都回给DS的,但是得将RS的默认网关设置为DS,这样有两个问题:

  • 需要操作RS(有时候RS你没有权限操作,有可能是别人是server,你是LB提供方)
  • 如果一个RS同时是多个DS的后端,这时候你无法配置一个RS有多个默认网关,而且你无法区分流量要给哪个DS

因此如果你是LB的提供方,你提供vip和负载均衡能力的时候只能使用FULLNAT,从而实现对于client和RS都无感知!

3、LVS NAT配合MASQUERADE实现FULLNAT要注意的地方

1、需要开启两个内核特性:

  • net.ipv4.ip_forward
  • net.ipv4.vs.conntrack

2、需要添加MASQUERADE

iptables -t nat -A POSTROUTING -m ipvs --vaddr xxxx --vport xxxxx -j MASQUERADE

3、参数的作用参考之前的博文:

4、LVS NAT模式下为什么不需要开启net.ipv4.ip_forward和net.ipv4.vs.conntrack

原因是LVS NAT模式自己实现了一套连接跟踪机制,原理如下: