linux运维—LVS(tun隧道模式)

本文介绍了LVS/Tun的原理,包括用户请求从到达Director Server到RS处理响应的流程。阐述了LVS - Tun模型特性,如RIP、VIP、DIP全为公网地址等。还说明了LVS(隧道模式tun)的搭建步骤,涵盖负载均衡调度器和真实服务器设置,以及修改rp_filter参数的目的。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

LVS/Tun原理和特点

在这里插入图片描述

原理说明:
  • 1、 当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。此时报文的源IP为CIP,目标IP为VIP 。
  • 2、 PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链
  • 3、IPVS比对数据包请求的服务是否为集群服务,若是,在请求报文的首部再次封装一层IP报文,封装源IP为为DIP,目标IP为RIP。然后发至POSTROUTING链。此时源IP为DIP,目标IP为RIP
  • 4、 POSTROUTING链根据最新封装的IP报文,将数据包发至RS(因为在外层封装多了一层IP首部,所以可以理解为此时通过隧道传输)。此时源IP为DIP,目标IP为RIP
  • 5、RS接收到报文后发现是自己的IP地址,就将报文接收下来,拆除掉最外层的IP后,会发现里面还有一层IP首部,而且目标是自己的lo接口VIP,那么此时RS开始处理此请求,处理完成之后,通过lo接口送给eth0网卡,然后向外传递。此时的源IP地址为VIP,目标IP为CIP
  • 6、 响应报文最终送达至客户端
LVS-Tun模型特性
  • RIP、VIP、DIP全是公网地址
  • RS的网关不会也不可能指向DIP
  • 所有的请求报文经由Director Server,但响应报文必须不能进过Director Server
  • 不支持端口映射
  • RS的系统必须支持隧道

LVS(隧道模式tun) 模式搭建

注意:在实际生产中 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: <LOOPBACK,UP,LOWER_UP> 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: <BROADCAST,MULTICAST,UP,LOWER_UP> 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: <NOARP> 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: <NOARP,UP,LOWER_UP> 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: <NOARP,UP,LOWER_UP> 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
修改rp_filter参数的目的

有三个值,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         
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值