LVS的TUN(隧道模式)配置
1.TUN模式的工作原理
TUN模式简称隧道模式,隧道模式就是修改请求报文的首部IP,再加一层IP报头
优点:DS和RS不需要在同一网段,可以实现不同网络之间的访问
具体过程如下:
数据包从客户端发往DS服务器,DS服务器会根据调度策略确定要把请求给哪台RS,会在数据包外面再加一层IP报头
此时源IP从CIP(172.25.58.250)变为了VIP(DIP172.25.58.100)
目的IP从VIP(172.25.58.100)变为了RIP(172.25.58.2/172.25.58.3),数据包的请求来源就是DS调度器(172.25.8.100)
请求的目的地是RS(172.25.8.2/3),RS在接收到数据包之后,请求包的来源本来是CIP(172.25.8.250)
但是加了一层数据包之后变为了VIP(172.25.8.100),而RS服务器上也有172.25.8.100这个ip
所以RS会把IP包的报头拆开,拆开发现请求的数据包访问的还是自己的ip(172.25.8.2/3)
这时RS就会回复客户端的请求(跟DR模式类似,只不过多加了一层IP报头,封装IP守护)
Client --> DS(调度器) -->prerouting --> INPUT -->postrouting -->RS(真正的服务器)–>lo 回环接口–> 网卡eth0 -->Client
IP隧道技术又称为IP封装技术,它可以将带有源和目标IP地址的数据报文使用新的源和目标IP进行二次封装
这样这个报文就可以发送到一个指定的目标主机上

2.TUN模式中的名词解释
| DS | 调度器,lvs的前端设备 |
|---|---|
| RS | 真正提供服务的后端服务器 |
| RIP | 后端服务器的ip地址 |
| DIP | 调度器和后端服务器通信的ip |
| 源IP | CIP(客户端的IP) |
| 目的IP | VIP(设置的统一入口),对外公布的ip,客户请求进来的ip |
客户端发送到lvs调度器的数据包:源地址:CIP(客户端IP)目标地址:VIP(DS服务器)
加了数据包报头之后:源地址:DIP(VIP)(DS服务器)目标地址:RIP(RS真正的服务器)
3.TUN模式的特点
隧道模式下,调度器和后端服务器组之间使用IP隧道技术,当客户端发送的请求(CIP–>VIP)被director接收后
director修改该报文,加上IP隧道两端的IP地址作为新的源和目标地址,并将请求转发给后端被选中的一个目标
当后端服务器接收到报文后,首先解封该报文原有的CIP—>VIP,该后端服务器发现自身的tun接口上配置了VIP,因此接受该数据包
当请求处理完成后,结果将不会重新交给director,而是直接返回给客户端。此时响应数据包的源IP为VIP,目标IP为CIP
realserver的RIP和director的DIP不用处于同一物理网络中,且RIP必须可以和公网通信。也就是说集群节点可以跨互联网实现
realserver的tun接口上需要配置VIP地址,以便接收director转发过来的数据包,以及作为响应的报文源IP
director转发给realserver时需要借助隧道,隧道外层的IP头部的源IP时DIP,目标IP是RIP
而realserver响应给客户端的IP头部是根据隧道内层的IP头分析得到的,源IP是VIP,目标IP是CIP
director只处理入站请求,响应请求由realserver自己完成
一般来说,TUN模式会用来负载调度缓存服务器组,这些缓存服务器一般放置在不同的网络环境,可以就近折返给客户端
在请求对象不在Cache服务器本地命中的情况下,Cache服务器要向源服务器发送请求,将结果取回,最后将结果返回给用户。
4.搭建实验环境
一共需要3台rhel7.3版本的虚拟机
| 主机信息 | 主机的功能(服务) |
|---|---|
| 真机172.25.58.250 | 客户端client |
| server1(172.25.58.1) | lvs调度器(DS) |
| server2(172.25.58.2) | 后端的web服务器1(RS) |
| server3(172.25.58.3) | 后端的web服务器2(RS) |
在真机中开启三台虚拟机
1台做lvs调度器,两台做后端轮询的web服务器,用真机分别连接三台虚拟机,真机本身是客户端



5.实现lvs调度器的TUN模式
DR模式:给web1和web2使用arptables规则来丢弃客户端的第一次访问,使客户端直接找lvs服务器实现调度轮询,不可以跨网络访问
隧道模式:给web1和web2用关闭反向过滤规则来丢弃客户端的第一次访问,使客户端直接找lvs服务器实现调度轮询,可跨网络访问
本来客户端发来的数据包是:源ip是cip(172.25.12.250),目的ip是vip(lvs服务器172.25.12.100)
当客户端的数据包到达lvs服务器,会在原来的数据包上面加一层数据包报文头
源ip是lvs服务器(172.25.12.100),目的ip是(web服务器的ip:172.25.12.2/3)
此时这个数据包就会转发给web服务器,web服务器接收到数据包之后会拆包
发现里面的数据包的目的ip是172.25.12.100,此时自己上面刚好也有这个ip
就知道这个客户端就是问自己要资源了,所以web服务器直接把资源发送给客户端
这个和DR模式一样,都是一个方向的发送数据包,不回送数据包
(每封装一次,轮询设置web服务器的ip是目的ip)
隧道模式的172.25.12.100都是在隧道网卡上面进行设置的
当客户端第一次发送请求给172.25.12.100的时候,此时web1和web2服务器上面的172.25.12.100走不通(过滤规则)
因为只有lvs调度器上面才可以走通(上面有ipvs程序),才可以走通去调度
172.25.12.250—》172.25.12.100
172.25.12.100—》web
TUN隧道模式就是将传输报文头加一个IP进行封装,IP隧道可以跨网络
实验步骤如下
这个实验在上一个DR模式实验的基础上做的
- (1)在lvs服务器上面设置隧道模式:(server1)
ipvsadm -ln查看一下刚才的轮询调度访问策略
ipvsadm -C清除DR模式的策略
ipvsadm -ln再查看一下,确认清除完毕
lsmod查看所有的模块(虚拟机上没有虚拟模块),准备加入隧道模块
lsmod | grep kvm 虚拟机上查看没有虚拟模块在真机上查看有虚拟机模块
现在开始加入隧道模式:
modprobe ipip加入隧道模块
ip a 可以看到多了一块网卡tunl0
ip addr del 172.25.58.100/24 dev eth0 将172.25.58.100从原来的网卡上ip删除ip addr add 172.25.58.100/24 dev tunl0 放到隧道网卡上面
ip a查看网卡的状态是down
ip link set up tunl0激活网卡
ip a查看是unknow,只要不是down就好了
在隧道模式里面添加策略:
ipvsadm -A -t 172.25.58.100:80 -s rr 设置轮询调度
ipvsadm -a -t 172.25.58.100:80 -r 172.25.58.2:80 -i 表示隧道模式,轮询web服务器1
ipvsadm -a -t 172.25.58.100:80 -r 172.25.58.3:80 -i 表示隧道模式,轮询web服务器2
systemctl restart ipvsadm.service重启服务使设置生效
cat /etc/sysonfig/ipvsadm查看策略文件
- (2)在server2和server3上面进行添加隧道模块:
modprobe ipip添加隧道模块
ip a 查看
ip addr del 172.25.58.100/24 dev eth0 删除入口ip
ip addr add 172.25.58.100/24 dev tunl0 添加入口ip
ip a
ip link set up tunl0 激活网卡
ip a
- (3)在server2和server3上面分别修改反向过滤规则,防止丢包(这个具体的还得看)
sysctl -a | grep rp_filter查看过滤表将所有的过滤规则都关闭
sysctl -w (规则)=0 即关闭掉过滤规则
sysctl -p 使设置生效
sysctl -a | grep rp_filter 再次查看,确认生效
因为隧道模式实现的是不同网段的主机进行通信,如果信息要从服务端返回到客户端时,由于客户端和服务端不在同一个网段,数据根本出不去,所以我们需要关闭反向参数检验 0:不开启源地址校验。 1:开启严格的反向路径校验。对每个进来的数据包,校验其反向路径是否是最佳路径。如果反向路径不是最佳路径,则直接丢弃该数据包。

该设置的原因是:系统会对流入的数据包进行反向路径校验,入包的数据是100,如果出包的数据不是100
这个数据就会被丢弃,所以我们要消除反向过滤的影响,将=1的项都设置为0
关闭反向过滤规则,是为了防止web服务器不认识发来的拆包后的源ip把数据包给丢掉,导致web服务器丢包,客户端访问不到数据
因为隧道模式实现的是不同网段的主机进行通信,如果信息要从服务端返回到客户端时
由于客户端和服务端不在同一个网段,数据根本出不去,所以我们需要关闭反向参数检验
0:不开启源地址校验
1:开启严格的反向路径校验
对每个进来的数据包,校验其反向路径是否是最佳路径。如果反向路径不是最佳路径,则直接丢弃该数据包
- (4)然后再客户端进行测试
- 注意:我刚才快被整死了,在这上边检查了快一个小时
- 最终arp -d 172.25.58.100 清除了一下缓存,就好咯
-
root@foundation58 ~]# curl 172.25.58.100 bbs.westos.org [root@foundation58 ~]# curl 172.25.58.100 www.westos.org [root@foundation58 ~]# curl 172.25.58.100 bbs.westos.org [root@foundation58 ~]# curl 172.25.58.100 www.westos.org
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
