part_70:lvs---Tunnel(隧道)模式

1、Tunnel 模式基础知识

IP隧道(IP tunneling)IP隧道技术亦称为IP封装技术(IP encapsulation),是将一个IP报文封装在另一个IP报文的技术,这可以使得目标为一个IP地址的数据报文能被封装和转发到另一个IP地址。IP 隧道主要用于移动主机和虚拟私有网络(Virtual Private Network),在其中隧道都是静态建立的,隧道一端有一个IP地址,另一端也有唯一的IP地址
数据流向客户端请求 VIP 时,通过因特网到达调度器,调度器收到数据包后进行封
装,即在原有的包头加上 IP Tunnel 的包头,然后通过调度算法发送给真实服务器,真实服务器再进行拆包,并且与调度器达成协议,从而对请求做出响应,直接由公网达到客户端,此时的源 IP 是 VIP,原理同 DR 模式。
优点:相对 NET 模式来说,可以支持更大的访问量
缺点:需要隧道协议

2、实验环境

主机名 IP
server1 172.25.60.1
server2 172.25.60.2
server3 172.25.60.3

3、tun模式lvs配置

  • server1
  • 添加隧道,并添加对外暴露的VIP,激活隧道
[root@server1 yum.repos.d]# modprobe ipip   ##加载模块
[root@server1 yum.repos.d]# ip addr del 172.25.60.100/24 dev eth0   ##删除上一个实验绑定的VIP
[root@server1 yum.repos.d]# ip addr add 172.25.60.100/24 dev tunl0  ##添加VIP
[root@server1 yum.repos.d]# ip link set up tunl0  ##激活隧道
  • 清除之前的策略后,重新配置
[root@server1 yum.repos.d]# ipvsadm -C  ##清除ipvsadm策略
[root@server1 yum.repos.d]# ipvsadm -A -t 172.25.60.100:80 -s rr
[root@server1 yum.repos.d]# ipvsadm -a -t 172.25.60.100:80 -r 172.25.60.2:80 -i   ##-i代表的是tun模式
[root@server1 yum.repos.d]# ipvsadm -a -t 172.25.60.100:80 -r 172.25.60.3:80 -i
[root@server1 yum.repos.d]# /etc/init.d/ipvsadm save   ##保存策略
ipvsadm: Saving IPVS table to /etc/sysconfig/ipvsadm:      [  OK  ]
[root@server1 yum.repos.d]# cat /etc/sysconfig/ipvsadm    
-A -t 172.25.60.100:80 -s rr
-a -t 172.25.60.100:80 -r 172.25.60.2:80 -i -w 1
-a -t 172.25.60.100:80 -r 172.25.60.3:80 -i -w 1
  • server2和server3
  • 导入模式,并添加对外暴露的VIP,并激活
[root@server2 ~]# ip addr del 172.25.60.100/32 dev eth0
[root@server2 ~]# ip addr add 172.25.60.100/32 dev tunl0
[root@server2 ~]# ip link set up tunl0
  • 修改rp_filter参数
    反向过滤规则:反向过滤规则:要一致,才可以 sysctl -a | grep rp_filter都改成=0
    因为:rp_filter参数用于控制系统是否开启对数据包源地址的校验。有三个值,0、1、2,具体含义:

  • 0:不开启源地址校验。

  • 1:开启严格的反向路径校验。对每个进来的数据包,校验其反向路径是否是最佳路径。如果反向路径不是最佳路径,则直接丢弃该数据包。

  • 2:开启松散的反向路径校验。对每个进来的数据包,校验其源地址是否可达,即反向路径是否能通(通过任意网口),如果反向路径不同,则直接丢弃该数据包。

查看

[root@server2 ~]# sysctl -a | grep rp_filter
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.all.arp_filter = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.arp_filter = 0
net.ipv4.conf.lo.rp_filter = 1
net.ipv4.conf.lo.arp_filter = 0
net.ipv4.conf.eth0.rp_filter = 1
net.ipv4.conf.eth0.arp_filter = 0
net.ipv4.conf.tunl0.rp_filter = 1
net.ipv4.conf.tunl0.arp_filter = 0

修改

[root@server2 ~]# sysctl -w net.ipv4.conf.lo.rp_filter=0
net.ipv4.conf.lo.rp_filter = 0
[root@server2 ~]# sysctl -w net.ipv4.conf.eth0.rp_filter=0
net.ipv4.conf.eth0.rp_filter = 0
[root@server2 ~]# sysctl -w net.ipv4.conf.tunl0.rp_filter=0
net.ipv4.conf.tunl0.rp_filter = 0

对于没法修改的要从配置文加中修改

[root@server2 ~]# vim /etc/sysctl.conf 

重新加载

[root@server2 ~]# sysctl -p
net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
error: "net.bridge.bridge-nf-call-ip6tables" is an unknown key
error: "net.bridge.bridge-nf-call-iptables" is an unknown key
error: "net.bridge.bridge-nf-call-arptables" is an unknown key
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296

再次查看,修改完成

[root@server2 ~]# sysctl -a | grep rp_filter
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.all.arp_filter = 0
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.default.arp_filter = 0
net.ipv4.conf.lo.rp_filter = 0
net.ipv4.conf.lo.arp_filter = 0
net.ipv4.conf.eth0.rp_filter = 0
net.ipv4.conf.eth0.arp_filter = 0
net.ipv4.conf.tunl0.rp_filter = 0
net.ipv4.conf.tunl0.arp_filter = 0
  • 测试
    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_42311209/article/details/89341221