1. TUN模式(隧道模式)工作原理
1 IP隧道技术又称为IP封装技术,它可以将带有源和目标IP地址的数据报文使用新的源和目标IP进行第二次封装,这个报文就可以发送到一个指定的目标主机上
2 VS/TUN模式下,调度器和后端服务器组之间使用IP隧道技术。当客户端发送的请求(CIP–>VIP)被director接收后,director修改该报文
加上IP隧道两端的IP地址作为新的源和目标地址,并将请求转发给后端被选中的一个目标;
3 当后端服务器接收到报文后,首先解封报文得到原有的CIP–>VIP,该后端服务器发现自身的tun接口上配置了VIP,因此接受该数据包。
4 当请求处理完成后,结果将不会重新交给director,而是直接返回给客户端;在后端服务器返回给客户端数据包时
由于使用的是普通网卡接口,根据一般的路由条目,源IP地址将是该网卡接口上的地址,例如是RIP。
因此,要让响应数据包的源IP为VIP,必须添加一条特殊的路由条目,明确指定该路由的源地址是VIP。
Client --> DS(调度器) --> prerouting(CIP:VIP) --> INPUT --> ([DIP:RIP] CIP:VIP) --> postrouting
–> RS(真正的服务器)–> DIP:RIP –> lo 回环接口–> 网卡eth0 --> Client
2. TUN模式中的名词解释
DS | 调度器,lvs的前端设备 |
---|
RS | 真正提供服务的后端服务器 |
RIP | 后端服务器的ip地址 |
DIP | 调度器和后端服务器通信的ip |
源IP CIP | (客户端的IP) |
目的IP VIP | (设置的统一入口),对外公布的ip,客户请求进来的ip |
3. 搭建实验环境
- 三台虚拟机+一台真实主机
1台做lvs调度器,两台做后端轮询的web服务器,用真机分别连接三台虚拟机,真机本身是客户端
主机名称 | ip | 功能 |
---|
server1 | 172.25.254.11 | lvs调度器 DS |
server2 | 172.25.254.12 | [apache]后端web服务器1 RS |
server3 | 172.25.254.13 | [apache]后端web服务器2 RS |
localhost | 172.25.254.60 | 客户端(client) |
- 清除原先的规则
在lvs服务器上面进行(server1)
ipvsadm -ln | 查看一下刚才的轮询调度访问策略 |
---|
ipvsadm -C | 清除DR模式的策略 |
ipvsadm -ln | 再查看一下 |
4. 搭建lvs调度器的TUN模式
4.1 增加隧道所用的模块
ipvsadm -C 清除DR模式的策略
ipvsadm -L 查看策略
modprobe ipip 加入隧道模块
ip a 查看多了一块网卡
ip addr add 192.168.1.100/24 dev tunl0 添加ip临时添加
ip link set up tunl0 是网卡生效
ipvsadm -A -t 172.25.254.100:80 -s rr | 设置轮询调度 |
---|
ipvsadm -a -t 172.25.254.100:80 -r 172.25.254.12:80 -i | 表示隧道模式,轮询服务器1 |
ipvsadm -a -t 172.25.254.100:80 -r 172.25.254.13:80 -i | 表示隧道模式,轮询服务器2 |
systemctl restart ipvsadm.service | 重启服务生效 |
cat /etc/sysonfig/ipvsadm | 查看策略文件 |
4.2 在server2和server3上面进行添加隧道模块
4.3 关闭反向过滤规则
sysctl -a | grep rp_filter查看过滤表将所有的过滤规则都关闭 |
---|
sysctl -w (规则)=0 | |
sysctl -p | 使设置生效 |
sysctl -a | grep rp_filter | 再次查看 |
因为隧道模式实现的是不同网段的主机进行通信,如果信息要从服务端返回到客户端时,由于客户端和服务端不在同一个网段,数据根本出不去,所以我们需要关闭反向参数检验
0 | 不开启源地址校验。 |
---|
1 | 开启严格的反向路径校验。对每个进来的数据包,校验其反向路径是否是最佳路径。如果反向路径不是最佳路径,则直接丢弃该数据包。 |
因为系统会对流入的数据包进行反向路径校验,入包的数据是100,如果出包的数据不是100,这个数据就会被丢弃,所以我们要消除反向过滤的影响,将**=1的项都设置为0**
关闭反向过滤规则,是为了防止web服务器不认识发来的拆包后的源ip把数据包给丢掉,导致web服务器丢包,客户端访问不到数据
4.4 测试