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