LVS的原理
请看这篇博客:https://blog.youkuaiyun.com/weixin_38044888/article/details/97794685
TUNEL模式详解
TUNEL模式实验
实验环境准备
主机 | 服务 |
---|---|
真实主机localhost | 客户端 |
server1 | DS(Director Sever——LVS调度器) |
server2 | RS(Real Server——后端真实提供服务的虚拟机) |
server3 | RS(Real Server——后端真实提供服务的虚拟机) |
注意:我们所有的虚拟机server1-3的实验环境都是rhel7.5版本。
配置各服务器环境
server1(DS)
- 首先,清除之前的ipvsadm策略以及VIP。
ipvsadm -C
ip addr del 172.25.66.100/24 dev eth0
- 添加隧道模式,将VIP配置到隧道模式网卡上。
modprobe ipip
ip addr add 172.25.66.100/24 dev tunl0
ip link set up tunl0
- 使用ipvsadm添加隧道模式策略
[root@server1 ~]# ipvsadm -A -t 172.25.66.100:80 -s rr
# 说明:-A 添加策略 -t 指定VIP:端口 -s 指定调度算法 rr轮询
[root@server1 ~]# ipvsadm -a -t 172.25.66.100:80 -r 172.25.66.2:80 -i
[root@server1 ~]# ipvsadm -a -t 172.25.66.100:80 -r 172.25.66.3:80 -i
# 说明: -t 指定VIP:端口 -r 指定rs:端口 -i 指定模式为TUNEL模式
- 查看并重启服务,看是否生效:
[root@server1 ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 172.25.66.100:80 rr
-> 172.25.66.2:80 Tunnel 1 0 0
-> 172.25.66.3:80 Tunnel 1 0 0
[root@server1 ~]# systemctl restart ipvsadm.service
[root@server1 ~]# cat /etc/sysconfig/ipvsadm
-A -t 172.25.66.100:80 -s rr
-a -t 172.25.66.100:80 -r 172.25.66.2:80 -i -w 1
-a -t 172.25.66.100:80 -r 172.25.66.3:80 -i -w 1
server2与server3(Real Server)
- 删除原有的VIP,添加隧道模式,将VIP配置到隧道模式网卡上。
ip addr del 172.25.66.100/24 dev eth0
modprobe ipip
ip addr add 172.25.66.100/24 dev tunl0
ip link set up tunl0
- 消除RS上反向过滤规则的影响。
内核sysctl中的rp_filter变量可以控制反向过滤。它验证反向数据包的流向,以避免伪装IP攻击。
rp_filter参数用于系统是否开启对数据包源地址的校验。有三个值,0、1、2,具体含义:
0:不开启源地址校验。
1:开启严格的反向路径校验。对每个进来的数据包,校验其反向路径是否是最佳路径。如果反向路径不是最佳路径,则直接丢弃该数据包。
2:开启松散的反向路径校验。对每个进来的数据包,校验其源地址是否可达,即反向路径是否能通(通过任意网口),如果反向路径不同,则直接丢弃该数据包。
所以,我们这里需要将相关的rp_filter参数修改为0,客户端才能接受到数据包。
sysctl -a | grep rp_filter # 查看参数状态
sysctl -w net.ipv4.conf.all.rp_filter=0
sysctl -w net.ipv4.conf.default.rp_filter=0
sysctl -w net.ipv4.conf.eth0.rp_filter=0
sysctl -w net.ipv4.conf.tunl0.rp_filter=0
sysctl -p # 使之通知内核生效
- 安装httpd,写入发布页面,实验效果更明显。
真实主机上测试
[root@localhost images]# curl 172.25.66.100
server3
[root@localhost images]# curl 172.25.66.100
server2
发现轮询访问,说明实验成功!