lvs-VS/TUN模式的配置与防踩坑

之前只做过lvs的DR模式,简单易上手。今天配置ip隧道模式遇到了一个问题,在查找资料中终于将这货给搞好了,分享出来以供一起学习。

原理图:


1.ip隧道模式的基本配置:

lvm服务器:172.25.90.1

ifconfig tunl0 172.25.90.100 netmask 255.255.255.255 up    ##添加VIP

route add -host 172.25.90.100 dev tunl0                                   ##把网段添加到路由表 防止走 172.25.90.0网段

ipvsadm -A -t 172.25.90.100:80 -s rr                                         ##添加规则

ipvsadm -a -t 172.25.90.100:80 -r 172.25.90.2:80 -i

ipvsadm -a -t 172.25.90.100:80 -r 172.25.90.3:80 -i

应用服务器:

route del default                                                                         ##ip隧道模式实际中使用的都是公网IP,所以不需要网关删除默认网关

ifconfig tunl0 172.25.90.100 netmask 255.255.255.255 up

route add -host 172.25.90.100 dev tunl0

vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2

sysctl -p

客户端测试:curl  172.25.90.100 ,但总是出现连接超时,不能访问到rs的apache

后来查到是rp_filter的问题:当IP隧道数据包到达172.25.90.2服务器后,首先进行拆包,发现目标IP为172.25.90.100(配置在TUN10这个网卡上),但是这个数据包是由172.25.90.2这个网卡接收的,那么系统默认认为这是一个不合法的数据包,故而拒绝之,所以要配置rp_filter 接收这种包。

系统配置文件
1. /etc/sysctl.conf
把 net.ipv4.conf.all.rp_filter和 net.ipv4.conf.default.rp_filter设为0即可
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.all.rp_filter = 0

系统启动后,会自动加载这个配置文件,内核会使用这个变量

更改过后,测试成功。

补充: arp_ignore=1 表示对于网络上发来的arp广播包,realserver的lo端口将会丢弃,因为如果做出应答,根据arp协议,相当于通告网络上其它主机VIP对应的Mac地址是realserver的Mac地址,而不是LB的Mac地址,这样客户端上就会绕过lvs,直接与后端的realserver通信,负载调度就失去了意义;

arp_announce: 

realserver 一般至少两个端口 两个ip,eth0 有ip,lo:0也绑定了一个vip,根据arp协议,

arp请求包中必须包含源主机的IP地址和Mac地址,对方收到请求包后,记录下该源地址和Mac地址,建立一对一的映射,那么对于这种多IP的情况,realserver发送arp请求报的时候该如何取舍,将哪个ip作为源地址?

参数arp_anonunce 正好是用来解决这个问题的,arp_announce=2 官方表述为使用最适当的本地地址,其实就是将eth0上的ip作为源地址如果将vip作为源地址,对方就会将vip与realserver的mac地址映射起来,导致请求包都发给realserver,而不经过lvs.









猜你喜欢

转载自blog.csdn.net/weixin_40555670/article/details/79474743