一、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 --> INPUT -->postrouting -->RS(真正的服务器)–>lo 回环接口–> 网卡ens33 -->Client
二、访问服务器的详细流程:
数据包从客户端发往DS服务器,DS服务器会根据调度策略确定要把客户端的请求发给哪台RS,此时会在数据包外面再加一层IP报头;此时源IP从CIP(192.168.1.55)变为了VIP(192.168.1.100);目的IP从VIP(192.168.1.100)变为了RIP(192.168.1.22/33),数据包的请求来源就是DS调度器(192.168.1.100);请求的目的地是RS(192.168.1.22/33),RS在接收到数据包之后,请求包的来源本来是CIP(192.168.1.55);但是加了一层数据包之后变为了VIP(192.168.1.100),而RS服务器上也有(192.168.1.100)这个ip;所以RS会把IP包的报头拆开,拆开发现请求的数据包访问的还是自己的ip(192.168.1.22/33);这时RS就会回复客户端的请求(跟DR模式类似,只不过多加了一层IP报头,封装IP守护)
IP隧道技术又称为IP封装技术,它可以将带有源和目标IP地址的数据报文使用新的源和目标IP进行二次封;这样这个报文就可以发送到一个指定的目标主机上。

三、TUN模式中的名词解释

DS	    调度器,lvs的前端设备
RS	    真正提供服务的后端服务器
RIP	    后端服务器的ip地址
DIP	    调度器和后端服务器通信的ip
源IP	CIP(客户端的IP)
目的IP	VIP(设置的统一入口),对外公布的ip,客户请求进来的ip

四、搭建实验环境
实验环境
三台虚拟机+一台真实主机
1台做lvs调度器,两台做后端轮询的web服务器,用真机分别连接三台虚拟机,真机本身是客户端

主机名称             ip                  功能
server1            192.168.1.11         lvs调度器 DS       
server2            192.168.1.22         [apache]后端web服务器1 RS
server3            192.168.1.33         [apache]后端web服务器2 RS
localhost          192.168.1.55         客户端(client)

五、搭建lvs调度器的TUN模式
在server1上:

ipvsadm -C    清除DR模式的策略
ipvsadm -L    查看策略
[root@server1 ~]# ipvsadm -C
[root@server1 ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
[root@server1 ~]# modprobe ipip 加入隧道模块 
[root@server1 ~]#  ip a 查看多了一块网卡
[root@server1 ~]# ip addr add 192.168.1.100/24 dev tunl0  添加ip临时添加
[root@server1 ~]# ip link set up tunl0  是网卡生效

android exo隧道模式 隧道模式如何工作_客户端

在隧道模式里面添加策略:
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 表示隧道模式,轮询web服务器1
ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.33:80 -i 表示隧道模式,轮询web服务器2
systemctl restart ipvsadm.service重启服务生效
cat /etc/sysonfig/ipvsadm查看策略文件

android exo隧道模式 隧道模式如何工作_客户端_02


server2/3相同操作

[root@server2 ~]# modprobe ipip 加入隧道模块 
[root@server2 ~]#  ip a 查看多了一块网卡
[root@server2 ~]# ip addr add 192.168.1.100/24 dev tunl0  添加ip临时添加
[root@server2 ~]# ip link set up tunl0  是网卡生效

android exo隧道模式 隧道模式如何工作_android exo隧道模式_03


在server2(web2)和server(web3)上面分别修改反向过滤规则,防止丢包

系统会对流入的数据包进行反向路径校验,入包的数据是100,如果出包的数据不是100

这个数据就会被丢弃,所以我们要消除反向过滤的影响,将=1的项都设置为0

关闭反向过滤规则,是为了防止web服务器不认识发来的拆包后的源ip把数据包给丢掉,导致web服务器丢包,客户端访问不到数据

因为隧道模式实现的是不同网段的主机进行通信,如果信息要从服务端返回到客户端时

由于客户端和服务端不在同一个网段,数据根本出不去,所以我们需要关闭反向参数检验

0:不开启源地址校验
1:开启严格的反向路径校验

对每个进来的数据包,校验其反向路径是否是最佳路径。如果反向路径不是最佳路径,则直接丢弃该数据包

server2/3相同设置

sysctl -a | grep rp_filter查看过滤表将所有的过滤规则都关闭
sysctl -w 规则=0
sysctl -p 必须使设置生效
sysctl -a | grep rp_filter再次查看
主机测试(清除缓存)

android exo隧道模式 隧道模式如何工作_客户端_04

android exo隧道模式 隧道模式如何工作_linux_05

android exo隧道模式 隧道模式如何工作_后端服务_06

主机测试

android exo隧道模式 隧道模式如何工作_客户端_07