LVS/Tun ( ip隧道)原理和特点
在原有的IP报文外再次封装多一层IP首部,内部IP首部(源地址为CIP,目标IIP为VIP),外层IP首部(源地址为DIPI,目标IP为RIP)
(a)当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。此时报文的源IP为CIP,目标IP为VIP。
(b) PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链
© IPVS比对数据包请求的服务是否为集群服务,若是,在请求报文的首部再次封装一层IP报文, 封装源IP为DIP,目标IP为RIP。然后发至POSTROUTING链。此时源IP为DIP、目标| P为R IP
d) POSTROUTING链根据最新封装的IP报文,将数据包发至RS (因为在外层封装多了- -层IP首部,所以可以理解为此时通过隧道传输)。此时源IP为DIP, 目标IP为RIP
(e) RS接收到报文后发现是自己的IP地址,就将报文接收下来,拆除掉最外层的IP后,会发现里面还有-层IP首部,而且目标是自己的lo接口VIP,那么此时RS开始处理此请求,处理完成之后,通过Io接口送给eth0卡,然后向外传递。此时的源IP地址为VIP, 目标IP为CIP
(f)响应报文最终送达至客户端
LVS-Tun模型特性
RIP、VIP、DIP全是公网地址
RS的网关不会也不可能指向DIP
所有的请求报文经由Director Server,但响应报文必须不能进过Director S erver
不支持端口映射
RS的系统必须支持隧道
其实企业中最常用的是DR实现方式,而NAT配置上比较简单和方便
搭建实验环境
真机172.25.254.2 | 客户端client |
---|---|
server1(172.25.254.10) | lvs调度器(DS) |
server2(172.25.254.20) | 后端的web服务器1(RS) |
server3(172.25.254.30) | 后端的web服务器2(RS) |
在真机中开启三台虚拟机
1台做lvs调度器,两台做后端轮询的web服务器,用真机分别连接三台虚拟机,真机本身是客户端
实现lvs调度器的TUN模式
在lvs服务器上面进行(server1):
清除上一个实验影响在server1执行lpvsadm -C
modprobe ipip加入隧道模块
ip addr del 172.25.254.100/32 dev eth0 将172.25.254.100从原来的网卡上ip删除
ip addr add 172.25.254.100/32 dev tunl0 放到隧道网卡上面
ip link set up tunl0激活网卡
server2和server3操作一样:
modprobe ipip添加隧道模块
ip addr del 172.25.254.100/32 dev eth0删除入口ip
ip addr add 172.25.254.100/32 dev tunl0添加入口ip
ip link set up tunl0激活网卡
sysctl -a | grep rp_filter查看过滤表将所有的过滤规则都关闭
sysctl -w (规则)=0
sysctl -p使设置生效
sysctl -a | grep rp_filter再次查看
测试: