LVS负载均衡之TUN隧道模式

LVS负载均衡之TUN隧道模式

1.TUN简介

1.TUN是IP Tunneling,IP隧道的简称,它将调度器收到的IP数据包封装在一个新的IP数据包中,转交给应用服务器, 然后实际服务器的返回数据会直接返回给用户。

2.IP隧道(IP tunneling)是将一个IP报文封装在另一个IP报文的技术,这可以使得目标为一个IP地址的数据报文能被封装和转发到另一个IP地址。IP隧道技术亦称为IP封装技术(IP encapsulation)。IP隧道主要用于移动主机和虚拟私有网络(Virtual Private Network),在其中隧道都是静态建立的,隧道一端有一个IP地址,另一端也有唯一的IP地址

3.封包:数据要在通讯系统中必须要先经过某些处理,才能在网络当中传递,例如将数据切割为数个区块之后,才能在网络上依照某种通讯协议来传送,这种过程就好像将包裹打包一样,称为分封。

4.IP隧道技术:是路由器把一种网络层协议封装到另一个协议中以跨过网络传送到另一个路由器的处理过程。隧道技术是一种数据包封装技术,它是将原始IP包(其报头包含原始发送者和最终目的地)封装在另一个数据包(称为封装的IP包)的数据净荷中进行传输。
隧道,实际上是路由器把一种网络层协议封装到另一个协议中以跨过网络传送到另一个路由器的处理过程。发送路由器将被传送的协议包进行封装,经过网络传送,接受路由器解开收到的包,取出原始协议;而在传输过程中的中间路由器并不在意封装的协议是什么。这里的封装协议,称之为传输协议,是跨过网络传输被封装协议的一种协议,IP协议是IOS唯一选择的传输协议。而被封装的协议在此为IPX协议或者AppleTAlk协议,通常可以称之为乘客协议。需要特别注意的是:隧道技术是一种点对点的链接,因而必须在链接的两端配置隧道协议。

5.Linux系统内核实现的IP隧道技术主要有三种(PPP、PPTP和L2TP等协议或软件不是基于内核模块的)

6.ipip、gre、sit 。这三种隧道技术都需要内核模块 tunnel4.ko 的支持。
ipip 需要内核模块 ipip.ko ,该方式最为简单!但是你不能通过IP-in-IP隧道转发广播或者IPv6数据包。你只是连接了两个一般情况下无法直接通讯的IPv4网络而已。至于兼容性,这部分代码已经有很长一段历史了,它的兼容性可以上溯到1.3版的内核。据网上查到信息,Linux的IP-in-IP隧道不能与其他操作系统或路由器互相通讯。它很简单,也很有效。

2.LVS-TUN的拓扑图

在这里插入图片描述

tun配置

lvs:192.168.73.100  vip:192.168.73.120
web1:192.168.73.110  vip:192.168.73.120
web2:192.168.73.111  vip:192.168.73.120 

3.服务器的配置

1.在lvs调度器上面配置

//更改主机名
[root@localhost ~]# hostnamectl set-hostname lvs
[root@localhost ~]# su
[root@lvs ~]# yum -y install ipvsadm 
//清空ipvsadm的策略
[root@lvs ~]# ipvsadm -C
//添加tun隧道
//添加模块(删除模块:modprobe -r ipip)
[root@lvs ~]# modprobe ipip
//给隧道添加Virtual IP
[root@lvs ~]# ip addr add 192.168.73.120/24 dev tunl0
//激活隧道
[root@lvs ~]# ip link set up tunl0
//添加新的策略并保存
[root@lvs ~]# ipvsadm -A -t 192.168.73.120:80 -s rr
[root@lvs ~]# ipvsadm -a -t 192.168.73.120:80 -r 192.168.73.110:80 -i //-i:指明为隧道模式
[root@lvs ~]# ipvsadm -a -t 192.168.73.120:80 -r 192.168.73.111:80 -i
//保存lvs的调度规则
[root@lvs ~]# /etc/init.d/ipvsadm save
[root@lvs ~]# systemctl start ipvsadm
[root@lvs ~]# systemctl stop firewalld
[root@lvs ~]# setenforce 0
[root@lvs ~]# echo "
net.ipv4.ip_forward=1
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0" >> /etc/conf
[root@lvs ~]# sysctl -p

2.在web1上面配置

[root@localhost ~]# hostnamectl set-hostname web1
[root@localhost ~]# su
[root@web1 ~]# systemctl stop firewalld
[root@web1 ~]# setenforce 0
[root@web1 ~]# yum -y install httpd
[root@web1 ~]# echo "this is web1" >> /var/www/html/index.html
[root@web1 ~]# modprobe ipip
[root@web1 ~]# ip addr add 192.168.73.120/24 dev tunl0
[root@web1 ~]# ip link set up tunl0
[root@web1 ~]# echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@web1 ~]# echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
[root@web1 ~]# echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@web1 ~]# echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
[root@web1 ~]# sysctl -p
[root@web1 ~]# systemctl start httpd

3.在web2上面配置

[root@localhost ~]# hostnamectl set-hostname web2
[root@localhost ~]# su
[root@web2 ~]# systemctl stopfirewalld
[root@web2 ~]# setenforce 0
[root@web2 ~]# yum -y install httpd
[root@web2 ~]# echo "this is web2" >> /var/www/html/index.html
[root@web2 ~]# modprobe ipip
[root@web2 ~]# ip addr add 192.168.73.120/24 dev tunl0
[root@web2 ~]# ip link set up tunl0
[root@web2 ~]# echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@web2 ~]# echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
[root@web2 ~]# echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@web2 ~]# echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
[root@web2 ~]# sysctl -p
[root@web2 ~]# systemctl start httpd

4.测试

[root@localhost ~]# hostnamectl set-hostname client
[root@localhost ~]# su
[root@client ~]# systemctl stop firewalld
[root@client ~]# setenforce 0
[root@client ~]# curl 192.168.73.120
this is web1
[root@client ~]# curl 192.168.73.120
this is web2
发布了129 篇原创文章 · 获赞 47 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/double_happy111/article/details/104004372