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