LVS–基础–04–实践–TUNNEL模式
1、原理
1.1、数据处理
在IP隧道模式中,代理主机将数据包经过自己打包之后,将IP转化成公网可传递的IP,并将消息经过自己又一次的打包,发送给真实服务器,真实服务器对这个请求作出响应,这样就达到一个可以跨地区的传输。并且也避免了DR模式中代理机与真实服务机必须在同一局域网的不便。
1.2、说明
- 当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。此时报文的源IP为CIP,目标IP为VIP 。
- PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链
- IPVS比对数据包请求的服务是否为集群服务,若是,在请求报文的首部再次封装一层IP报文,封装源IP为为DIP,目标IP为RIP。然后发至POSTROUTING链。此时源IP为DIP,目标IP为RIP
- POSTROUTING链根据最新封装的IP报文,将数据包发至RS(因为在外层封装多了一层IP首部,所以可以理解为此时通过隧道传输)。此时源IP为DIP,目标IP为RIP
- RS接收到报文后发现是自己的IP地址,就将报文接收下来,拆除掉最外层的IP后,会发现里面还有一层IP首部,而且目标是自己的tunl0接口VIP,那么此时RS开始处理此请求,处理完成之后,通过tunl0接口送给eth0网卡,然后向外传递。此时的源IP地址为VIP,目标IP为CIP
2、LVS TUNNEL特性
- RIP、VIP、DIP全是公网地址
- RS的网关不会也不可能指向DIP
- 所有的请求报文经由Director Server,但响应报文必须不能进过Director Server
- 不支持端口映射
- 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
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
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
原因
192.168.187.171 请求192.168.187.200,但是mac确是182的
6.2、改造