LVS-TUN(ip tunneling)IP隧道

1.TUN(ip tunneling)工作原理

lvs-tun(ip tunneling)(在原有的IP报文外再次封装多一层IP首部,内部IP首部(源地址为CIP,目标IP为VIP),外层IP首部(源地址为DIP,目标IP为RIP))
不修改请求报文的ip首部(cip—vip),而是通过在原有的ip首部(dip–rip),再封装一个ip首部
1.rip dip vip 全是公网地址
2.rs的网关不能指向dip
3.请求报文必须经由director调度,但响应报文必须不能经由director
4.rs的os必须支持隧道功能

工作流程:
在这里插入图片描述

(a) 当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP 。
(b) PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链
© IPVS比对数据包请求的服务是否为集群服务,若是,在请求报文的首部再次封装一层IP报文,封装源IP为为DIP,目标IP为RIP。然后发至POSTROUTING链。 此时源IP为DIP,目标IP为RIP
(d) POSTROUTING链根据最新封装的IP报文,将数据包发至RS(因为在外层封装多了一层IP首部,所以可以理解为此时通过隧道传输)。 此时源IP为DIP,目标IP为RIP
(e) RS接收到报文后发现是自己的IP地址,就将报文接收下来,拆除掉最外层的IP后,会发现里面还有一层IP首部,而且目标是自己的lo接口VIP,那么此时RS开始处理此请求,处理完成之后,通过lo接口送给eth0网卡,然后向外传递。 此时的源IP地址为VIP,目标IP为CIP
(f) 响应报文最终送达至客户端

TUN模式负载均衡搭建

准备工作:
准备三台虚拟机server1,2,3,并配置好yum源,并且安装好ipvsadm套件
将server1作为lvs调度器,server2,3作为后台服务器

在LVS调度器server1上:
1)引入ip隧道模块

[root@server1 ~]# modprobe ipip
[root@server1 ~]# ip addr show  ##查看模块是否成功导入,如果有tunl0,说明导入成功
[root@server1 ~]# ip link set up tunl0

在这里插入图片描述

2)绑定vip

[root@server1 ~]# ip addr add 172.25.24.100/24 dev tunl0

在这里插入图片描述

3)加载rule

[root@server1 ~]# ipvsadm -C  ##清除原有rule
[root@server1 ~]# ipvsadm -A -t 172.25.24.100:80 -s rr
[root@server1 ~]# ipvsadm -a -t 172.25.24.100:80 -r 172.25.24.2:80 -i
[root@server1 ~]# ipvsadm -a -t 172.25.24.100:80 -r 172.25.24.3:80 -i
[root@server1 ~]# 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.24.100:http rr
  -> server2:http                 Tunnel  1      0          0         
  -> server3:http                 Tunnel  1      0          0         
[root@server1 ~]# service ipvsadm save  ##保存rule
ipvsadm: Saving IPVS table to /etc/sysconfig/ipvsadm:      [  OK  ]

在这里插入图片描述

在后台服务器server2,3上
1)导入ip隧道模块并绑定vip

[root@server2 ~]# modprobe ipip
[root@server2 ~]# ip addr add 172.25.24.100/32 dev tunl0
[root@server2 ~]# ip link set up tunl0
[root@server2 ~]# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    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:a7:2b brd ff:ff:ff:ff:ff:ff
    inet 172.25.24.2/24 brd 172.25.24.255 scope global eth0
    inet6 fe80::5054:ff:fe9e:a72b/64 scope link 
       valid_lft forever preferred_lft forever
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.24.100/32 scope global tunl0

2)查看内核参数关闭反向过滤

sysctl -a | grep rp_filter   ##查看内核参数,关闭反向过滤
sysctl -w net.ipv4.conf.tunl0.rp_filter=0
sysctl -w net.ipv4.conf.default.rp_filter=0
sysctl -w net.ipv4.conf.lo.rp_filter=0
sysctl -w net.ipv4.conf.eth0.rp_filter=0

sysctl -p  ##立即生效

在这里插入图片描述在这里插入图片描述

测试:
在这里插入图片描述

##ip隧道模块的删除

ip addr del 172.25.24.100/24 dev tunl0
ip link set down tunl0
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章