ARP
ARP协议是网络层(IP层)和链路层(MAC层)之间的桥梁,它使得网络层可以只关心IP地址,而不需要关心底层的硬件地址。
- 广播ARP请求:当一台设备(例如,PC A)想要与另一台设备(例如,PC B)通信时,它首先会发送一个ARP请求。这个请求是一个广播,意味着它会发送到局域网中的所有设备。请求中包含PC A的IP地址和MAC地址,以及它想要查询的PC B的IP地址。
- 接收并响应:局域网中的所有设备都会接收到这个ARP请求,但只有PC B会响应。PC B检查请求中的目标IP地址是否与其自己的IP地址匹配。如果匹配,它会发送一个ARP响应给PC A。这个响应包含PC B的IP地址和MAC地址。
- 更新ARP缓存:当PC A收到PC B的ARP响应后,它会将PC B的IP地址和MAC地址存储在其ARP缓存中。这样,下次当PC A想要与PC B通信时,它可以直接从ARP缓存中获取MAC地址,而不需要再次发送ARP请求。
- 超时机制:ARP缓存中的条目有一个超时时间。如果在这个时间内没有再次使用某个条目,那么它会被从缓存中删除。这是为了确保缓存中的信息是最新的
下图是PC1访问PC2的过程:源ip不变,mac地址在变
DR模式是什么
直接路由(Direct Routing):简称 DR 模式,采用半开放式的网络结构,与 TUN
模式的结构类似,但各节点并不是分散在各地,而是与调度器位于同一个物理网络。
DR模式只是针对源和目标MAC地址做出修改,源和目标IP还是不变,当请求报文由LVS服务器处理后发送到后端服务器RS上,RS拆封报文时会发现目标MAC是自己的MAC地址.
服务器配置
问题1客户端拒绝接收请求
目标IP是VIP,与本地IP地址不符合,那么RS就会认为不是发给自己的报文,所以此时需要在RS上配置VIP,这样RS就可以接受目标地址为VIP的请求报文了。
如果将VIP设置在RS的网卡上,假设有多台RS并且每台RS上都配置了VIP,在这个网络中发出VIP的ARP请求,就有多个RS响应,因此就把VIP配置到回环地址lo网卡上,然后让lo网卡忽略所有ARP请求,eth33网卡正常响应ARP请求,这样网络中就不会收到RS关于VIP的响应
问题2地址冲突
如果设置多个VIP那么地址会冲突,客户端发送请求,在这个网络中发出VIP的ARP请求,就有多个RS响应
那么就要关闭rs vip的响应,就是rs 收到客户端请求时不回应
搭建LVS DR模式实验
实验架构 环境简介 DR 服务器:192.168.10.10
web 服务器1:192.168.10.20
web 服务器2:192.168.91.30
vip(虚拟回环):192.168.10.188
客户端:192.168.10.1
配置负载调度器
systemctl stop firewalld.service
setenforce 0
[root@localhost ~]#yum install ipvsadm.x86_64 -y
#安装服务
#配置虚拟IP地址(VIP:192.168.91.188)
[root@localhost network-scripts]#cp ifcfg-ens33 ifcfg-ens33:0
#配置虚拟网卡,若为隧道模式ifcfg-tunl0
[root@localhost network-scripts]#vim ifcfg-ens33:0
#删除dns与网关,注意子网
[root@localhost network-scripts]#systemctl restart network
[root@localhost network-scripts]#ifup ifcfg-ens33:0
#启动网卡
[root@localhost network-scripts]#ifconfig ifcfg-ens33:0
#调整/proc响应参数
[root@localhost network-scripts]# vi /etc/sysctl.conf
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
[root@localhost network-scripts]#sysctl -p
#刷新配置
#调整/proc响应参数 对于 DR 群集模式来说,由于 LVS 负载调度器和各节点需要共用 VIP 地址,应该关闭 Linux 内核的重定向参数响应服务器不是一台路由器,那么它不会发送重定向,所以可以关闭该功能
#配置负载分配策略
[root@localhost ~]#modprobe ip_vs
[root@localhost ~]#cat /proc/net/ip_vs
#加载模块
[root@localhost network-scripts]#ipvsadm-save >/etc/sysconfig/ipvsadm
[root@localhost network-scripts]#systemctl start ipvsadm.service
[root@localhost network-scripts]#ipvsadm -C
[root@localhost ~]#ipvsadm -A -t 192.168.10.188:80 -s rr
ipvsadm -a -t 192.168.10.188:80 -r 192.168.10.20:80 -g
ipvsadm -a -t 192.168.10.188:80 -r 192.168.10.30:80 -g
#添加真实服务器-a 指定VIP地址及TCP端口-t 指定RIP地址及TCP端口 -r 指定DR模式-g
ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.10.188:80 rr
-> 192.168.10.20:80 Route 1 0 0
-> 192.168.10.30:80 Route 1 0 0
[root@localhost network-scripts]#ipvsadm-save >/etc/sysconfig/ipvsadm
#保存设置
sr1配置
[root@localhost ~]#systemctl stop firewalld.service
[root@localhost ~]#setenforce 0
[root@localhost ~]#yum install httpd -y
[root@localhost ~]#systemctl start httpd
[root@localhost ~]#cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]#cp ifcfg-lo ifcfg-lo:0
[root@localhost ~]#ifconfig lo:0 192.168.91.188/32
[root@localhost ~]#ifconfig lo:0 192.168.91.188 255.255.255.255
[root@localhost network-scripts]#vim ifcfg-lo:0
#修改回环网卡名,IP地址,子网掩码
DEVICE=lo:0
IPADDR=192.168.91.188
NETMASK=255.255.255.255
NETWORK=127.0.0.0
[root@localhost network-scripts]#route add -host 192.168.91.188 dev lo:0
#设置路由
[root@localhost network-scripts]#route -n
#开机执行命令,或者写入 /etc/profile 文件
[root@localhost network-scripts]#vim /etc/rc.d/rc.local
/usr/sbin/route add -host 192.168.91.188 dev lo:0
[root@localhost network-scripts]#chmod +x /etc/rc.d/rc.local
[root@localhost network-scripts]#ll /etc/rc.d/rc.local
-rwxr-xr-x. 1 root root 484 11月 17 16:56 /etc/rc.d/rc.local
[root@localhost network-scripts]#vim /etc/sysctl.conf
#添加系统只响应目的IP为本地IP的ARP请求
#系统不使用原地址来设置ARP请求的源地址,而是物理mac地址上的IP
[root@localhost network-scripts]#sysctl -p
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
-
net.ipv4.conf.all.arp_ignore = 1
all表示这些设置应用于所有网络接口。arp_ignore = 1表示只回应目标IP地址是本地接收接口上的IP地址的ARP请求。
这个设置通常用于防止网络接口响应不属于其IP地址的ARP请求,从而增强网络安全性。
-
net.ipv4.conf.all.arp_announce = 2
arp_announce = 2表示总是使用最佳的本地IP地址作为ARP请求的源IP地址,即使这个IP地址不是绑定在接收ARP请求的网络接口上。
这个设置通常用于避免在具有多个网络接口的系统上发送错误的ARP公告。
-
net.ipv4.conf.default.arp_ignore = 1
default表示这些设置应用于没有明确配置的其他网络接口。- 与
all设置相同,这表示只回应目标IP地址是本地接收接口上的IP地址的ARP请求。
-
net.ipv4.conf.default.arp_announce = 2
- 与
all设置相同,这表示总是使用最佳的本地IP地址作为ARP请求的源IP地址。
- 与
-
net.ipv4.conf.lo.arp_ignore = 1
lo表示这些设置应用于本地回环接口(loopback interface)。- 由于本地回环接口通常不用于与其他机器通信,所以这个设置可能不是必需的,但在这里设置通常是为了保持一致性。
-
net.ipv4.conf.lo.arp_announce = 2
- 与
lo接口的arp_ignore设置相同,这通常是为了保持配置的一致性。然而,由于本地回环接口通常不参与ARP过程,所以这个设置的实际效果可能很小。
- 与
rs2配置
[root@localhost ~]#systemctl stop firewalld.service
[root@localhost ~]#setenforce 0
[root@localhost ~]#yum install httpd -y
[root@localhost ~]#systemctl start httpd
[root@localhost ~]#cd /etc/sysconfig/network-scripts/
#修改回环网卡名,IP地址,子网掩码
DEVICE=lo:0
IPADDR=192.168.91.188
NETMASK=255.255.255.255
NETWORK=127.0.0.0
[root@localhost network-scripts]#route add -host 192.168.91.188 dev lo:0
#设置路由
[root@localhost network-scripts]#route -n
#开机执行命令,或者写入 /etc/profile 文件
[root@localhost network-scripts]#vim /etc/rc.d/rc.local
/usr/sbin/route add -host 192.168.91.188 dev lo:0
[root@localhost network-scripts]#chmod +x /etc/rc.d/rc.local
[root@localhost network-scripts]#ll /etc/rc.d/rc.local
-rwxr-xr-x. 1 root root 484 11月 17 16:56 /etc/rc.d/rc.local
[root@localhost network-scripts]#vim /etc/sysctl.conf
#添加系统只响应目的IP为本地IP的ARP请求
#系统不使用原地址来设置ARP请求的源地址,而是物理mac地址上的IP
[root@localhost network-scripts]#sysctl -p
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
然后在rs上写页面验证
调度器无法调度自己
总结
DR模式的特点:
不支持端口映射 RS和DS必须在同一网络(不是同一网段)
DR工作在数据链路层使用的是MAC地址,还没有牵扯到IP地址
IP地址始终不变,变的是MAC地址
lo是回环接口(和自己进行交流的时候用,使用起来快),系统里服务和服务之间使用的回环接口,效率高,快
它工作在4层,不支持7层规则修改
调度器无法调度自己