注意:在实际生产中 RIP、VIP、DIP全是公网地址,目前由于条件限制,为了实现实验效果。实验中RIP、VIP、DIP 、CIP全部为同一个网段的ip。
以下实验时在7.3主机上进行
主机内核必须支持隧道模式才可以使用该方式。
1 、安装模块:(调度取主机(toto1),以及所有的真实服务器主机(toto2、toto3))
modprobe ipip
[root@toto1 ~]# modprobe ipip # 加载模块
[root@toto1 ~]# ip addr show # 查看网络
1: lo: mtu 65536 qdisc noqueue state UNKNOWN qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 52:54:00:9e:0d:c8 brd ff:ff:ff:ff:ff:ff
inet 172.25.47.110/24 brd 172.25.47.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::5054:ff:fe9e:dc8/64 scope link
valid_lft forever preferred_lft forever
3: tunl0@NONE: mtu 1480 qdisc noop state DOWN qlen 1 # 加载成功出现tunl0接口
link/ipip 0.0.0.0 brd 0.0.0.0
[root@toto1 ~]#
给调度器主机以及所有的真实服务器主机都加载该模块。
2 添加VIP到tunl0网络接口,并激活该接口
[root@toto1 ~]# ip addr add 172.25.47.100/24 dev tunl0 # 添加VIP
[root@toto1 ~]# ip link set up tunl0 # 激活网络接口
[root@toto1 ~]# ip addr show # 查看网卡信息
3: tunl0@NONE: mtu 1480 qdisc noqueue state UNKNOWN qlen 1
link/ipip 0.0.0.0 brd 0.0.0.0 #此处不是down表示已经激活
inet 172.25.47.100/24 scope global tunl0
valid_lft forever preferred_lft forever
3 安装lvs管理工具ipvsadm,并添加策略
[root@toto1 ~]# yum install ipvsadm -y
[root@toto1 ~]# ipvsadm -A -t 172.25.47.100:80 -s rr
[root@toto1 ~]# ipvsadm -a -t 172.25.47.100:80 -r 172.25.47.120:80 -i
[root@toto1 ~]# ipvsadm -a -t 172.25.47.100:80 -r 172.25.47.130:80 -i
[root@toto1 ~]# ipvsadm -l
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP toto1:http rr
-> toto2:http Tunnel 1 0 0
-> toto3:http Tunnel 1 0 0
2 添加VIP到tunl0网络接口,并激活该网络接口
[root@toto2 ~]# ip addr add 172.25.47.100/24 dev tunl0 # 添加VIP 到tunl0 网络接口
[root@toto2 ~]# ip link set up tunl0 # 激活该网络接口
[root@toto2 ~]# ip addr show # 查看网卡信息
3: tunl0@NONE: mtu 1480 qdisc noqueue state UNKNOWN qlen 1
link/ipip 0.0.0.0 brd 0.0.0.0 # 显示已经成功添加VIP 并且激活
inet 172.25.47.100/24 scope global tunl0
valid_lft forever preferred_lft forever
3 安装httpd服务,并且设置共享页面。
为了实验效果明显,不同的真实服务器可以设置不同的共享页面内容。
[root@toto2 ~]# yum install httpd -y # 安装服务
[root@toto2 ~]# echo toto2 > /var/www/html/index.html # 设置共享页面内容toto2
[root@toto2 ~]# systemctl start httpd # 开启服务
[root@toto2 ~]# systemctl enable httpd # 设置服务开机自动启动
4 关闭内核的反向过滤功能(所有的真实服务器)
sysctl -a |grep rp_filter
# 筛选内核有关过滤功能的参数
[root@toto2 ~]# sysctl -a |grep rp_filter
net.ipv4.conf.all.arp_filter = 0
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.arp_filter = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.eth0.arp_filter = 0
net.ipv4.conf.eth0.rp_filter = 1
net.ipv4.conf.lo.arp_filter = 0
net.ipv4.conf.lo.rp_filter = 0
net.ipv4.conf.tunl0.arp_filter = 0
net.ipv4.conf.tunl0.rp_filter = 1
将以上值为1的全部修改成0:使用sysctl -w 进行修改
[root@toto2 ~]# sysctl -w net.ipv4.conf.all.rp_filter=0
net.ipv4.conf.all.rp_filter = 0
[root@toto2 ~]# sysctl -w net.ipv4.conf.default.rp_filter=0
net.ipv4.conf.default.rp_filter = 0
[root@toto2 ~]# sysctl -w net.ipv4.conf.eth0.rp_filter=0
net.ipv4.conf.eth0.rp_filter = 0
[root@toto2 ~]# sysctl -w net.ipv4.conf.tunl0.rp_filter=0
net.ipv4.conf.tunl0.rp_filter = 0
有三个值,0、1、2,具体含义:
0:不开启源地址校验。
1:开启严格的反向路径校验。对每个进来的数据包,校验其反向路径是否是最佳路径。如果反向路径不是最佳路径,则直接丢弃该数据包。
2:开启松散的反向路径校验。对每个进来的数据包,校验其源地址是否可达,即反向路径是否能通(通过任意网口),如果反向路径不同,则直接丢弃该数据包。
测试:
[root@foundation47 yum]# curl 172.25.47.100
toto3
[root@foundation47 yum]# curl 172.25.47.100
toto2
[root@foundation47 yum]# curl 172.25.47.100
toto3
[root@foundation47 yum]# curl 172.25.47.100
toto2
[root@foundation47 yum]# curl 172.25.47.100
toto3
[root@foundation47 yum]# curl 172.25.47.100
toto2
#并且调度器主机中显示:
[root@toto1 ~]# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP toto1:http rr
-> 172.25.47.120:http Tunnel 1 0 3
-> 172.25.47.130:http Tunnel 1 0 3