1.工作原理:
比起NAT技术,由于请求和响应都需要通过vs(虚拟服务器–也是模型中的调度器lvs)进行地址的改写,那么当客户端的请求越来越多的时候,vs的处理能力就会成为一个瓶颈。为了解决这个问题,vs通过IP隧道,将客户端的请求(源(cip),目的(vip))通过IP隧道(此过程是对请求数据包进行封装,在原来请求数据的基础上添加头部(包括新的源(vip)和目的rip)),发送给真实的服务器,服务器打开封装(封装里边cip,vip不变),处理请求,处理完成后,直接通过网关直接返回响应给客户端,不经过vs。
拓扑结构:
2.实验环境
redhat 7.5
server1(lvs) | 172.25.60.1/24 |
---|---|
server2(apache) | 172.25.60.2/24 |
server3(apache) | 172.25.60.3/24 |
注意:调度器要有所有服务器的的解析,server1,server2,server3的vip在tunl0(隧道虚拟网卡)上边
3.配置TUN模式
(1)在所有服务器上都配置隧道(server1/2/3)
lsmod //查看是否有ipip模块
modprobe ipip //下载隧道模块,生成隧道tunl0
ipaddr addr add 172.25.1.200/24 dev tunl0 //在隧道上添加vip
ip link set up tunl0 //激活tunl0
(2)在lvs(server1)上配置规则:
ipvsadm -C
ipvsadm -A -t 172.25.60.100:80 -s rr //rr:轮询
ipvsadm -a -t 172.25.60.100:80 -r 172.25.60.2 -i //-i:隧道模式
ipvsadm -a -t 172.25.60.100:80 -r 172.25.60.3 -i
(3)在server2和server3上安装arptables,并配置规则:
server2:
arptables -F
arptables -A INPUT -d 172.25.60.100 -j DROP //目的地址是172.25.60.100 的DROP掉
arptables -A OUTPUT -s 172.25.60.100 -j mangle --mangle-ip-s 172.25.60.2
server3:
arptables -F
arptables -A INPUT -d 172.25.60.100 -j DROP
arptables -A OUTPUT -s 172.25.60.100 -j mangle --mangle-ip-s 172.25.60.3
arptables的常用命令:
arptables -nL //查看规则
arptables -F //刷新规则(其他命令与iptables相似)
/etc/sysconfig/arptables //arptables规则配置文件
arptables-save > /etc/sysconfig/arptables //将规则保存到配置文件
#不保存编写的规则只能临时生效,重启系统后就没有了
(3)在server2和server3上关闭rp_filter
rp_filter参数用于控制系统是否开启对数据包源地址的校验。
简单点说:现在为了使apach上的eth0网卡进来的数据包,可以不从eth0网卡出去,而使用tunl0出去,就不许关掉rp_filter
sysctl -a | grep rp_filter //查看
sysctl -w net.ipv4.conf.all.rp_filter=0 //更改
...... //把rp_filter=1的全改为0
(4)测试:
curl 172.25.60.100 //访问