LVS–基础–04–实践–TUNNEL模式


1、原理

1.1、数据处理

在IP隧道模式中,代理主机将数据包经过自己打包之后,将IP转化成公网可传递的IP,并将消息经过自己又一次的打包,发送给真实服务器,真实服务器对这个请求作出响应,这样就达到一个可以跨地区的传输。并且也避免了DR模式中代理机与真实服务机必须在同一局域网的不便。

1.2、说明

  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首部,而且目标是自己的tunl0接口VIP,那么此时RS开始处理此请求,处理完成之后,通过tunl0接口送给eth0网卡,然后向外传递。此时的源IP地址为VIP,目标IP为CIP

2、LVS TUNNEL特性

  1. RIP、VIP、DIP全是公网地址
  2. RS的网关不会也不可能指向DIP
  3. 所有的请求报文经由Director Server,但响应报文必须不能进过Director Server
  4. 不支持端口映射
  5. RS的系统必须支持隧道

3、机器

机器

IP

说明

lvs主机

192.168.187.181

lvs主机

RealServer1

192.168.187.182

后端真实服务器

RealServer2

192.168.187.183

后端真实服务器

3.1、安装软件

3.1.1、lvs主机

# ipvsadm 安装
yum install -y ipvsadm

3.1.2、RealServer

# 安装
yum install httpd -y

# 编写测试文件 
# echo "from RealServer 192.168.187.182"  > /var/www/html/index.html
echo "from RealServer 192.168.187.183"  > /var/www/html/index.html

# 启动httpd
systemctl start httpd

lvs tunnel lvs tunnel 抓包_服务器

4、LVS主机操作

4.1、如果之前有的话,就清空ipvs配置

ipvsadm -C

4.2、配置tunnel信息

# 添加隧道模式
modprobe ipip 
# 隧道模式添加网卡
ip addr add  192.168.187.200/24 dev tunl0  
# 开启隧道模式
ip link set up tunl0     
# 查看
ip addr show

4.3、配置ipvs

# 添加虚拟服务器192.168.187.200:80,使用TCP协议,使用rr轮询算法
ipvsadm -A -t 192.168.187.200:80 -s rr   
# 添加后端服务器 192.168.187.182,使用TCP协议,VIP是192.168.187.200:80,-i是TUNNEL模式
ipvsadm -a -t 192.168.187.200:80 -r 192.168.187.182:80 -i 
ipvsadm -a -t 192.168.187.200:80 -r 192.168.187.183:80 -i
# 查看ipvs配置信息
ipvsadm -ln 
# 保存规则
/usr/sbin/ipvsadm-save

lvs tunnel lvs tunnel 抓包_运维_02

5、RealServer服务器配置

5.1、添加隧道模式的DIP

# 添加隧道模式
modprobe ipip 

# 添加隧道模式的DIP
ip addr add  192.168.187.200/32 dev tunl0   

#开启隧道模式
ip link set up tunl0

5.2、调整系统参数

vim /etc/sysctl.conf

内容

net.ipv4.conf.default.rp_filter=0
net.ipv4.conf.lo.rp_filter = 0
net.ipv4.conf.ens32.rp_filter=0
net.ipv4.conf.tunl0.rp_filter=0

5.3、生效配置

sysctl -p

6、验证

6.1、验证轮询

在机器192.168.187.171上测试(与realserver的IP处于同一网段)

curl 192.168.187.200:80
curl 192.168.187.200:80
curl 192.168.187.200:80
curl 192.168.187.200:80
curl 192.168.187.200:80
curl 192.168.187.200:80

lvs tunnel lvs tunnel 抓包_lvs tunnel_03

原因

192.168.187.171 请求192.168.187.200,但是mac确是182的

lvs tunnel lvs tunnel 抓包_网络_04


lvs tunnel lvs tunnel 抓包_IP_05

6.2、改造