LVS模式三:TUN(Tunneling)隧道模式

1、LVS-Tun模式的工做原理

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

过程:apache

1.客户端将访问vip报文发送给LVS服务器;vim

2.LVS服务器将请求报文从新封装,发送给后端真实服务器;后端

3.后端真实服务器将请求报文解封,在确认自身有vip以后进行请求处理;服务器

4.后端真实服务器在处理完数据请求后,直接响应客户端。网络

要求: 负载均衡

1.lvs和后端真实服务器上都要有vip。curl

2.不会成为瓶颈。tcp

3.请求的报文不能太大。工具

2、LVS-TUN模式下的负载均衡

实验环境:

Load Balance:172.25.45.1
Virtual IP: 172.25.45.100
server2(RS): 172.25.45.2
server3(RS): 172.25.45.3

一、在server1上:

1).配置网络

modprobe ipip                         #添加隧道

ip link set up tunl0                   #激活隧道

ip addr add 172.25.45.100 dev tunl0  #添加虚拟IP

ip addr  #查看IP

2).配置yum仓库

vim /etc/yum.repos.d/rhel-source.repo

[LoadBalancer]
name=LoadBalancer
baseurl=http://172.25.45.250/rhel6.5/LoadBalancer
gpgcheck=0

3).添加规则:

yum install ipvsadm -y

/etc/init.d/ipvsadm start   #开启服务

ipvsadm -C

ipvsadm -A -t 172.25.45.100:80 -s rr

ipvsadm -a -t 172.25.45.100:80 -r 172.25.45.2:80 -i     #给vip添加rip,使用TUN模式

ipvsadm -a -t 172.25.45.100:80 -r 172.25.45.3:80 -i

/etc/init.d/ipvsadm save   #保存策略

ipvsadm -ln    #查看策略

ipvsadm -lnc  #查看调度IP状况

二、在server2上:

1).安装apache

yum install httpd -y

vim /var/www/html/index.html
<h1>server2</h1>

/etc/init.d/httpd start

2).配置网络

modprobe ipip    #加载模块

ip link set up tunl0

ip addr add 172.25.45.100/32 dev tunl0  #添加虚拟IP

ip addr   #查看ip

3).安装arptables_jf工具

由于设置172.25.45.100/32做为vip,不能够和外部通讯,因此设用arptables将其的访问所有DROP,出去的包所有为转为本机的ip

yum install arptables_jf -y

arptables -F      #清空策略

arptables -A IN -d 172.25.45.100 -j DROP      拒绝172.25.4.100的访问

arptables -A OUT -s 172.25.45.100 -j mangle --mangle-ip-s 172.25.45.2     #因为tcp三次握手缘由,因此出去的时候仍要以vip地址出去才会实现握手,而真正将数据传输给客户端的就是realserver,  mangle参数就是这个功能

/etc/init.d/arptables_jf save    #保存策略

arptables -L     #查看策略

4).关闭rp_filter

rp_filter参数的做用:
1. 减小DDoS攻击
校验数据包的反向路径,若是反向路径不合适,则直接丢弃数据包,避免过多的无效链接消耗系统资源。
2. 防止IP Spoofing
校验数据包的反向路径,若是客户端伪造的源IP地址对应的反向路径不在路由表中,或者反向路径不是最佳路径,则直接丢弃数据包,不会向伪造IP的客户端回复响应。

sysctl -a|grep .rp_filter  #将过滤出的打开着的.rp_filter所有关闭

sysctl -w net.ipv4.conf.default.rp_filter=0

sysctl -w net.ipv4.conf.tunl0.rp_filter=0

sysctl -w net.ipv4.conf.eth0.rp_filter=0

sysctl -w net.ipv4.conf.lo.rp_filter=0

为何要修改这个参数呢?是由于:
rp_filter参数用于控制系统是否开启对数据包源地址的校验。
有三个值,0、一、2,具体含义:
0:不开启源地址校验。
1:开启严格的反向路径校验。对每一个进来的数据包,校验其反向路径是不是最佳路径。若是反向路径不是最佳路径,则直接丢弃该数据包。
2:开启松散的反向路径校验。对每一个进来的数据包,校验其源地址是否可达,即反向路径是否能通(经过任意网口),若是反向路径不一样,则直接丢弃该数据包。

三、在server3中执行和server2一样的操做

四、测试:

在物理机中执行 for i in {1..10};do curl 172.25.45.100;done ,出现轮询即配置生效

调度器处的状况

3、RS处于不一样网段下的TUN模式的负载平衡

实验环境:

继续使用以前的环境,将server3的ip更改成172.25.254.3

Load Balance:172.25.45.1  172.25.254.45
Virtual IP: 172.25.45.100
server2(RS): 172.25.45.2
server3(RS): 172.25.254.3

一、在server3中:

1).配置网络

ip addr add 172.25.254.3/24 dev eth0

ip addr del 172.25.45.3/24 dev eth0

ip addr

2).配置arptables_jf

vim /etc/sysconfig/arptables

更改假装策略,将172.25.45.3更改成172.25.254.3

/etc/init.d/arptables_jf restart

arptables -L

3).配置网关

route add default gw 172.25.254.45    #将RS网关指向物理机的ip地址

route -n

二、在server1中:

1).添加网络

ip addr add 172.25.254.45/24 dev eth0

2).更改规则

ipvsadm -ln

ipvsadm -d -t 172.25.45.100:80 -r 172.25.45.3:80

ipvsadm -a -t 172.25.45.100:80 -r 172.25.254.3:80 -i

ipvsadm -ln

3)、测试:

在物理机中执行 for i in {1..10};do curl 172.25.45.100;done ,出现轮询即配置生效