侧边栏壁纸
博主头像
J&S Blog

顺着一路星光,去往有你的嘉处

  • 累计撰写 14 篇文章
  • 累计创建 5 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

LVS-TUN

Administrator
2026-05-24 / 0 评论 / 0 点赞 / 2 阅读 / 0 字

LVS-TUN集群概述

DR方式是通过MAC,规模是一个交换网络。而TUN方式,是通过给数据包加上新的IP头部来实现,这个可以跨整个广域网。TUN模式可以解决DR模式下不能跨网段的问题,甚至可以跨公网进行。

LVS/TUN使用IP Tunneling技术,在Director机器和Real Server机器之间架设一个IP Tunnel,通过IP Tunnel将负载分配到Real Server机器上。Director和Real Server之间的关系比较松散,可以是在同一个网络中,也可以是在不同的网络中,只要两者能够通过IP Tunnel相连就行。收到负载分配的Real Server机器处理完后会直接将反馈数据送回给客户,而不必通过Director机器。实际应用中,服务器必须拥有正式的IP地址用于与客户机直接通信,并且所有服务器必须支持IP隧道协议

LVS-TUN原理

image-20251107204750411.png

在原有的IP报文外再次封装一层IP首部,内部IP首部(源地址为CIP,目标IP为VIP),外层IP首部(源地址为DIP,目标IP为RIP)

  1. 当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。此时报文的源IP为CIP,目标IP为VIP。

  2. PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链

  3. IPVS比对数据包请求的服务是否为集群服务,若是,在请求报文的首部再次封装一层IP报文,封装源IP为DIP,目标IP为RIP。然后发至POSTROUTING链。此时源IP为DIP,目标IP为RIP

  4. POSTROUTING链根据最新封装的IP报文,将数据包发至RS(因为在外层封装多了一层IP首部,所以可以理解为此时通过隧道传输)。此时源IP为DIP,目标IP为RIP

  5. RS接收到报文后发现是自己的IP地址,就将报文接收下来,拆除掉最外层的IP后,会发现里面还有一层IP首部,而且目标是自己的tunl接口VIP,那么此时RS开始处理此请求,处理完成之后,通过tunl接口送给ens33网卡,然后向外传递。此时的源IP地址为VIP,目标IP为CIP

  6. 响应报文最终送达至客户端

LVS-TUN模型特性

  1. RIP、VIP、DIP全是公网地址

  2. RS的网关不会也不可能指向DIP

  3. 所有的请求报文经由Director Server,但响应报文必须不能进过Director Server

  4. 此模式不支持端口映射

  5. RS的操作系统得支持隧道功能

LVS-TUN模型优缺点

缺点:由于后端服务器RS处理数据后响应发送给用户,此时需要租借大量IP(特别是后端服务器使用较多的情况下)。

优点:实现lvs-tun模式时,LVS调度器将TCP/IP请求进行重新封装并转发给后端服务器,由目标应用服务器直接回复用户。负载调度器和应用服务器之间是通过IP隧道来进行转发,故两者可以存在于不同的网段中(如异地机房,好处是可以容灾,通过智能dns(DNS view)实现边界最近访问)。

image-20251107204817414.png

所有节点加载ipip模块

modprobe ipip
​
lsmod | grep ipip
ipip                   13465  0 
tunnel4                13252  1 ipip
ip_tunnel              25163  1 ipip
​
​

为tunl0设备配置VIP

ip link set up tunl0  #激活隧道
ip addr add 192.168.1.88  dev tunl0  #添加虚拟ip
ifconfig tunl0

创建负载均衡策略

ipvsadm -C
ipvsadm -A -t 192.168.1.100:80 -s rr
ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.22:80 -i
ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.23:80 -i
ipvsadm --save -n > /etc/sysconfig/ipvsadm
​

后端服务器关闭ARP转发

net.ipv4.conf.ens33.arp_ignore = 1
net.ipv4.conf.ens33.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.tunl0.arp_ignore = 1
net.ipv4.conf.tunl0.arp_announce = 2
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.tunl0.rp_filter = 0

rp_filter定义系统是否开启对数据包源地址的校验

net.ipv4.conf.tunl0.rp_filter默认为1,需要改为0,关闭此功能。Linux的rp_filter用于实现反向过滤技术,它验证反向数据包的流向,以避免伪装IP攻击。然而,在LVS TUN模式中,我们的数据包是有问题的,因为从realserver ens33出去的IP数据包的源IP地址应该为192.168.1.22,而不是VIP地址。所以必须关闭这一项功能。DR和TUN在网络层实际上使用了一个伪装IP数据包的功能。

net.ipv4.conf.all.rp_filter = 0#这个值默认就是0,此功能就是关闭的。所以在LVS DR模式中,不需要修改这一样内核参数

NAT/DR/TUN比较

image-20251107204833227.png


0
LVS
博主关闭了所有页面的评论