首页/系统/Linux 内核与性能调优速查/arp_ignore 与 arp_announce 场景配置
网络栈调优98 条

arp_ignore 与 arp_announce 场景配置

多网卡与浮动 IP 场景控制 ARP 应答与宣告行为, 不当配置会造成地址漂移冲突或 VIP 不可达。

什么是 arp_ignore 与 arp_announce

一台主机有多块网卡且地址不属于同一子网时,内核对 ARP 请求的应答与自身地址的宣告行为需要约束,否则会出现两块网卡抢答同一个地址、或者用错误的源地址宣告导致对端 ARP 表混乱。arp_ignore 控制“收到 ARP 请求时是否应答”,arp_announce 控制“发出 ARP 请求时如何选择源地址”,两者按接口生效,并可与 all 一起配置。浮动 IP、VIP 与 LVS/keepalived 场景是它们最主要的使用者。

基本信息

参数路径net.ipv4.conf.<iface>.arp_ignore / arp_announce,另有 all
arp_ignore 取值0 任意本地地址都答;1 仅当目标地址是本接口配置的地址才答;2 满足条件且请求源在本地可达
arp_announce 取值0 任意地址;1 尽量用同子网地址;2 严格使用与目标同子网的最佳地址
覆盖关系具体接口的值优先于 all
生效范围按接口,新连接或新宣告生效
典型场景keepalived VIP、LVS 后端、多网卡同机部署

典型使用场景

  • VIP 漂移场景:避免备机抢占应答,导致流量被错误引导
  • LVS 真实服务器:抑制后端主机的 ARP 应答与宣告
  • 多网卡主机:防止不同网卡对同一地址重复应答
  • 运维变更后发现地址冲突:核对是不是这两个参数配置不当
  • 容器与虚拟网络:评估宿主参数对虚拟接口行为的影响

查看与配置

查看与配置
sysctl net.ipv4.conf.all.arp_ignore net.ipv4.conf.all.arp_announce
sysctl net.ipv4.conf.eth0.arp_ignore net.ipv4.conf.eth0.arp_announce
ip -4 addr show                          # 确认地址与接口对应关系
ip neigh show                            # 观测邻居表状态
# VIP 场景的常见取向(按具体接口评估后使用):
# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

取值速查

参数取值行为
arp_ignore0对任意本地地址都应答(最宽松)
arp_ignore1只有目标地址配置在本接口才应答
arp_announce0宣告时使用任意本地地址
arp_announce1尽量使用同子网地址宣告
arp_announce2严格使用与目标最匹配的地址
按接口生效的参数优先于 all:只改 all 而接口上已有明确值时可能看不到变化,配置后要用 sysctl 逐接口确认实际生效值。
这两个参数直接影响二层寻址行为,配错会导致同网段地址冲突、VIP 不可达或流量被引到错误主机,变更前必须梳理地址与网卡的对应关系。

易错点

  • 全字段盲目套用模板,造成同网段地址冲突,表现为网络时通时断且难以定位
  • 忽略 all 与具体接口的覆盖关系,生效范围与预期不符,改了等于没改
  • 在地址与网卡对应关系没梳理清楚时就做变更,出现故障后无法判断哪一步引入的问题
  • 把这类二层参数改动当成可随时回滚的小操作,实际可能影响整个子网的可达性

数据来源与参考

  • Linux Documentation/networking/ip-sysctl.txt
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌