什么是arp_ignore arp_announce

为什么要抑制arp

因为必须要确保vip所映射的mac是负载均衡器的mac而不是后端服务器的mac 。

LVS的DR模型中,调度器和所有的Real Server都配置了VIP,且都在同一网段内,那为了保证客户端的arp广播请求只被调度器所响应,必须更改Real Server的arp默认响应规则,这就是修改内核参数arp_ignore。

arp_ignore含义

Linux接受到ARP数据包后,发送响应数据包的级别(0~8)
0 只要ARP请求数据包的IP在本机上,都发送响应数据包,即使请求的IP不在接受ARP请求的网卡上面也要发送响应
1 只有ARP响应数据包中的IP在接受请求的网卡上才进行响应
2 1的基础上还要求发送放的IP地址属于当前网卡的子网
设置为1就是只有ARP请求中的IP在当前接受响应的网卡上才进行响应
echo “1” > /proc/sys/net/ipv4/conf/lo/arp_ignore

arp_announce含义

主机要发送一个数据包之前,数据包的源IP,目的IP,以及源mac都是确定的,但是目标mac不是确定的。
这就需要主机发送ARP协议去寻找目标mac,但是当主机上面存在多个网卡和多个IP时,
Linux系统默认的ARP请求的源IP是数据包的源IP,也就是虚拟IP,
这样的话下一跳路由的arp缓存就会建立虚拟IP和后端某一个服务器的mac映射关系,
客户端再次发送请求就会只系欸发送到后端服务器从而绕过负载均衡器。
那该怎么办?
这个由arp_announce来决定
0 默认可以使用任意网络接口的IP地址
2 首先不使用IP数据包的源地址作为arp请求的源地址
选择主机中的其他能够做出回应ARP请求的网络接口来作为arp源IP

临时修改arp_announce和arp_ignore:

echo 1 >/proc/sys/net/ipv4/conf/eth0/arp_ignore

echo 2 >/proc/sys/net/ipv4/conf/eth0/arp_announce

永久修改: 编辑sysctl配置文件即可:

if /etc/sysctl.conf is used inthe system, we have this config in /etc/sysctl.conf

net.ipv4.conf.eth0.arp_ignore= 1

net.ipv4.conf.eth0.arp_announce= 2

lvs环境dr模式中,需要设定以下的参数

echo”1″>/proc/sys/net/ipv4/conf/all/arp_ignore

echo”1″>/proc/sys/net/ipv4/conf/lo/arp_ignore

echo”2″>/proc/sys/net/ipv4/conf/lo/arp_announce

echo”2″>/proc/sys/net/ipv4/conf/all/arp_announce

赞(2) 打赏
特别声明:除特殊标注,本站文章均为原创,遵循CC BY-NC 3.0,转载请注明出处。三伏磨 » 什么是arp_ignore arp_announce

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏