LVS-----TUN模式配置
一、实验环境
主机名称 | ip | 角色 |
---|---|---|
lvs-tun | 192.168.100.100 | lvs调度器 |
web1 | 192.168.100.1 | 后端web服务器1 |
web2 | 192.168.100.2 | 后端web服务器2 |
client | 192.168.100.200 | 客户端 |
二、搭建lvs调度器的TUN模式
1、lvs-tun调度器配置
#清除DR模式的策略
ipvsadm -C
#查看策略
ipvsadm -L
[root@lvs-tun ~]# ipvsadm -C
[root@lvs-tun ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port Forward Weight ActiveConn InActConn
#加载隧道模块
[root@lvs-tun ~]# modprobe ipip
[root@lvs-tun ~]# ip a
#添加ip临时添加
[root@lvs-tun ~]# ip addr add 192.168.1.100/24 dev tunl0
#使网卡生效
[root@lvs-tun ~]# ip link set up tunl0
#开启路由转发功能
[root@lvs-tun ~]# cat /etc/sysctl.conf
net.ipv4.ip_forward = 1
[root@lvs-tun ~]# sysctl -p
在隧道模式里面添加策略
#设置轮询调度
[root@lvs-tun ~]# ipvsadm -A -t 192.168.1.100:80 -s rr
#-i表示隧道模式,轮询web服务器
[root@lvs-tun ~]# ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.22:80 -i
[root@lvs-tun ~]# ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.33:80 -i
#保存策略
[root@lvs-tun ~]# ipvsadm-save > /etc/sysconfig/ipvsadm
#查看策略文件
[root@lvs-tun ~]# cat /etc/sysonfig/ipvsadm
2、web服务器配置
#加载隧道模块
[root@web1 ~]# modprobe ipip
[root@web1 ~]# ip a
#添加ip临时添加
[root@web1 ~]# ip addr add 192.168.1.100/24 dev tunl0
#网卡生效
[root@web1 ~]# ip link set up tunl0
在web1和web2上面分别修改反向过滤规则,防止丢包 【不是绝对必须,但强烈建议】
-
在 LVS - TUN 模式下,通常需要将反向路径过滤设置为
0
或2
,以防止丢包。因为真实服务器从隧道接口接收请求,但响应数据包是通过物理接口发送回客户端的,严格的反向路径过滤(1
)会认为这是非法的数据包而丢弃。 -
系统会对流入的数据包进行反向路径校验,入包的数据是100,如果出包的数据不是100 ;这个数据就会被丢弃,所以我们要消除反向过滤的影响 。
-
由于隧道模式实现的是不同网段的主机进行通信,如果信息要从服务端返回到客户端时 ,假设客户端和服务端不在同一个网段,数据根本出不去,所以我们需要关闭反向参数检验 。
rp_file参数用于控制系统是否开启对数据包源地址的校验,有三个值,含义分别如下:
- 0:表示不开启源地址校验
- 1:开启严格的反向路径校验,对每个进来的数据包,校验其反向路径是否是最佳路径,如果反向路径不是最佳路径,则直接丢弃该数据包
- 2:开启松散的反向路径校验,对每个进来的数据包,校验其源地址是否可达,即反向路径是否能通(通过任意网口),如果反向路径不通,则直接丢弃该数据包
cat /etc/sysctl.confnet.ipv4.conf.all.rp_filter=0
net.ipv4.conf.default.rp_filter=0
net.ipv4.conf.eth0.rp_filter=0
net.ipv4.conf.tunl0.rp_filter=0
sysctl -p
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 -a | grep rp_filter
3、测试