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

一、LVS-Tun模式的工作原理

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

过程:

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

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

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

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

要求:

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

2.不会成为瓶颈。

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

二、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

1、在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情况

2、在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、1、2,具体含义:
0:不开启源地址校验。
1:开启严格的反向路径校验。对每个进来的数据包,校验其反向路径是否是最佳路径。如果反向路径不是最佳路径,则直接丢弃该数据包。
2:开启松散的反向路径校验。对每个进来的数据包,校验其源地址是否可达,即反向路径是否能通(通过任意网口),如果反向路径不同,则直接丢弃该数据包。

3、在server3中执行和server2同样的操作

4、测试:

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

调度器处的情况

三、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

1、在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

2、在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 ,出现轮询即配置生效

猜你喜欢

转载自blog.csdn.net/qq_42711214/article/details/82873261