LVS-TUN隧道模式

一.TUN简介
  • TUN是IP Tunneling ,IP隧道的简称,它将调度器收到的IP数据包封装在一个新的IP数据包中,转交给应用服务器,然后实际服务器的返回数据会直接返回给用户。
  • IP隧道(IP tunneling)是将一个IP报文封装在另一个IP报文的技术,这可以使得目标为一个IP地址的数据报文能被封装和转发到另一个IP地址。IP隧道技术亦称为IP封装技术(IP encapsulation)。IP隧道主要用于移动主机和虚拟私有网络(Virtual Private Network),在其中隧道都是静态建立的,隧道一端有一个IP地址,另一端也有唯一的IP地址
二.实验环境
主机名 IP
server1(调度器) 172.25.4.1
server2(后端服务器) 172.25.4.2
server3(后端服务器) 172.25.4.3
三.TUN隧道模式的部署
配置调度器server1:

1.删除之前DR模式添加的策略
2.添加隧道
3.给隧道添加Virtual IP
4.**隧道

[[email protected] html]# ipvsadm -C   ##删除之前DR模式添加的策略
[[email protected] html]# modprobe ipip     ##添加模块
[[email protected] html]# ip addr show
3: tunl0: <NOARP> mtu 1480 qdisc noop state DOWN 
    link/ipip 0.0.0.0 brd 0.0.0.0
[[email protected] html]# ip addr del 172.25.4.100/24 dev eth0   ##删除DR模式下绑定的Virtual IP
[[email protected]rver1 html]# ip addr add 172.25.4.100/24 dev tunl0  ##给隧道添加Virtual IP
[[email protected] html]# ip addr show
3: tunl0: <NOARP> mtu 1480 qdisc noop state DOWN 
    link/ipip 0.0.0.0 brd 0.0.0.0
    inet 172.25.4.100/24 scope global tunl0
[[email protected] html]#  ip link set up tunl0   ##**隧道
[[email protected] html]# ip addr show
3: tunl0: <NOARP,UP,LOWER_UP> mtu 1480 qdisc noqueue state UNKNOWN 
    link/ipip 0.0.0.0 brd 0.0.0.0
    inet 172.25.4.100/24 scope global tunl0

LVS-TUN隧道模式
LVS-TUN隧道模式
LVS-TUN隧道模式
5.添加新的策略

[[email protected] html]# ipvsadm -A -t 172.25.4.100:80 -s rr
[[email protected] html]# ipvsadm -a -t 172.25.4.100:80 -r 172.25.4.2:80 -i  ##-i:指明为隧道模式
[[email protected] html]#  ipvsadm -a -t 172.25.4.100:80 -r 172.25.4.3:80 -i
[[email protected] html]# ipvsadm -L   ##查看
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.25.4.100:http rr
  -> server2:http                 Tunnel  1      0          0         
  -> server3:http                 Tunnel  1      0          0

LVS-TUN隧道模式
6.保存策略:/etc/init.d/ipvsadm save
LVS-TUN隧道模式

配置后端服务器server2:

1.添加隧道
2.给隧道添加Virtual IP
3.**隧道

[[email protected] ~]# modprobe ipip
[[email protected] ~]# ip addr del 172.25.4.100/32 dev eth0
[[email protected] ~]# ip addr add 172.25.4.100/32 dev tunl0
[[email protected] ~]# ip link set up tunl0

LVS-TUN隧道模式
4.修改rp_filter参数

[[email protected] ~]# sysctl -a | grep rp_filter   ##关掉反向路径检测(反向路径检验:当以100访问进来的包要符合内核的某种规则,你出去的应该还是100,如果不关掉的话,出去的路径为4.2,客户端不会接收)
[[email protected] ~]# sysctl -w net.ipv4.conf.default.rp_filter=0
net.ipv4.conf.default.rp_filter = 0
[[email protected] ~]# sysctl -w net.ipv4.conf.lo.rp_filter=0
net.ipv4.conf.lo.rp_filter = 0
[[email protected] ~]# sysctl -w net.ipv4.conf.eth0.rp_filter=0
net.ipv4.conf.eth0.rp_filter = 0
[[email protected] ~]# sysctl -w net.ipv4.conf.tunl0.rp_filter=0
net.ipv4.conf.tunl0.rp_filter = 0
[[email protected] ~]# sysctl -p   ##重新加载
[[email protected] ~]# sysctl -a | grep rp_filter   ##查看后发现仍有一个参数为1,此参数必须要从文件爱你中修改
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 = 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
[[email protected] ~]# vim /etc/sysctl.conf    ##编辑文件,将参数改为0 
net.ipv4.conf.default.rp_filter = 0
[[email protected] ~]# sysctl -p  ##在重新加载

LVS-TUN隧道模式
LVS-TUN隧道模式

配置后端服务器server3:与server2一样的配置步骤
为什么要修改rp_filter参数?
  • rp_filter参数用于控制系统是否开启对数据包源地址的校验。
    有三个值,0、1、2,具体含义:
    0:不开启源地址校验。
    1:开启严格的反向路径校验。对每个进来的数据包,校验其反向路径是否是最佳路径。如果反向路径不是最佳路径,则直接丢弃该数据包。
    2:开启松散的反向路径校验。对每个进来的数据包,校验其源地址是否可达,即反向路径是否能通(通过任意网口),如果反向路径不同,则直接丢弃该数据包。
客户端(真机)测试:

LVS-TUN隧道模式