火山引擎云服务器实践教程-在Linux操作系统中调整arp_announce、arp_ignore参数

axin 2025-04-08 20人围观 ,发现0个评论 火山引擎云服务器云服务器云服务器教程

👉点击这里申请火山引擎VIP帐号,立即体验火山引擎产品>>>

通过修改arp_announce、arp_ignore参数,您可以控制内核对于ARP请求的发送及响应策略,优化网络通信、降低遭遇ARP欺骗的可能性。
注意
除面对特定的复杂网络场景,尤其是多网卡处于同一网段引发ARP异常的场景外,一般不需要额外配置arp_announce、arp_ignore参数。

术语解释

关于ARP

ARP(Address Resolution Protocol)即地址解析协议,是一种用于将网络层(IP层)的IP地址解析为数据链路层的物理(MAC)地址的协议。在TCP/IP网络中,每个设备都有一个唯一的IP地址用于标识其在网络中的位置,而MAC地址则用于标识设备的网络接口,ARP协议允许计算机在发送数据之前确定目标设备的MAC地址。如果在发送IP数据包时,计算机不知道目标IP设备对应的MAC地址,就会通过广播ARP请求包来获取。

关于arp_announce参数

arp_announce参数是Linux系统中的一个网络参数,主要用于控制ARP请求包的源IP地址选择策略。取值:
  • 0:内核将使用任意可用的本地IP地址,作为进行ARP请求的源IP地址。

  • 1:内核会尽量避免使用不在发出请求数据包的网卡(接口)子网段内的IP地址,作为进行ARP请求的源IP地址。若无合适IP地址,则按照arp_announce=2规则进行ARP请求。

  • 2:内核将优先选择与目的IP地址所在子网段相同的本地IP地址作为进行ARP请求的源IP地址,若无合适的IP地址,则选择其它能接收ARP响应的网卡接口IP地址。

关于arp_ignore参数

arp_ignore参数是Linux系统中的一个网络参数,主要用于控制网卡(接口)在接收到的目标地址为本机IP地址的ARP请求时响应该请求的策略。取值:
  • 0: 目标地址为本机任意网卡配置的IP地址时,都会响应ARP请求。

  • 1: 目标地址为本网卡上的IP地址时,可以响应ARP请求。

  • 2: 目标地址为为本网卡上的地址,且ARP请求的源地址与目标地址是同一子网时,可以响应ARP请求。

  • 3: 如果目标地址对应的本地地址其作用域为主机,则不响应ARP请求;如果其作用域为全局和链路,则响应ARP请求。

  • 4 - 7: 保留参数,未使用。

  • 8: 不响应所有的ARP请求。

操作场景

  • 防止ARP欺骗

当arp_announce设置为0时,发送的ARP包里源IP地址是IP数据包的源地址,攻击者可以伪造ARP数据包来声称自己就是ARP请求或响应的设备,造成ARP欺骗,形成中间人攻击。此时,可以调整arp_announce参数,确保服务器发送的ARP请求来源清晰,不易被攻击者利用。同时,还可以调整arp_ignore参数值,限制服务器对ARP请求的响应,降低ARP欺骗成功的可能性。
  • 在LVS-DR模式中应用

LVS - DR(Linux Virtual Server - Direct Routing) 模式是一种基于IP层的负载均衡技术。这种模式下,每个真实服务器节点都会在环回网卡上绑定虚拟服务IP。
    • 当网卡在发送ARP请求时,如果ARP请求包中的源IP地址不是该网卡自身的IP地址,会导致收到此请求的其他节点的ARP表记录下错误的IP地址与MAC地址对应关系,可能会引发一些未知的网络问题,存在安全隐患。此时,需要将服务器arp_announce参数配置为2。

    • 当对虚拟服务IP的ARP请求广播到各个真实服务器节点时,如果真实服务器随意响应这些请求,可能会导致网络流量混乱,进而导致业务一直在单节点运行,负载均衡能力没有生效。此时,需要将服务器的arp_ignore参数设置为1。

操作步骤

arp_announce、arp_ignore参数支持全局(all)、按网卡两种方式进行配置。
注意
各网卡上实际生效值为全局(all)配置与该网卡配置的最大值。例如:配置全局arp_announce参数值为1,配置eth0网卡arp_announce参数值为2。此时,eth0网卡上arp_announce参数实际生效值为2。

配置全局参数

本方式配置的全局参数可以将相同的ARP策略应用到所有网卡,实现批量管理。

通过proc接口配置

本方式可在操作系统运行过程中临时更改参数,每次重启实例后都需要重新配置。
  1. 登录目标实例。操作详情可查看登录Linux实例。

  1. 执行如下命令,查看全局arp_announce、arp_ignore参数值。

cat /proc/sys/net/ipv4/conf/all/arp_announce
cat /proc/sys/net/ipv4/conf/all/arp_ignore
回显示例:

  1. 执行如下命令,配置全局arp_announce、arp_ignore参数值。

echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
说明
请将1、2替换为业务所需的实际值,详情可参考关于arp_announce参数关于arp_ignore参数。


通过arp.conf文件配置

本方式可在操作系统运行过程中永久修改参数值,重启实例后无需再次配置。
  1. 登录目标实例。操作详情可查看登录Linux实例。

  1. 执行如下命令,查看全局arp_announce、arp_ignore参数值。

sysctl net.ipv4.conf.all.arp_announce
sysctl net.ipv4.conf.all.arp_ignore
回显示例:

  1. 修改arp_announce、arp_ignore参数值。

    1. 执行如下命令,新建arp.conf文件。

vim /etc/sysctl.d/arp.conf
    1. 按i键进入编辑模式,在文末添加如下内容。

net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
说明
请将1、2替换为业务所需的实际值,详情可参考关于arp_announce参数关于arp_ignore参数。
    1. 按Esc键退出编辑模式,输入:wq按回车键,保存并退出文件。

  1. 执行如下命令,使配置生效。

sysctl -p /etc/sysctl.d/arp.conf
回显示例:

为特定网卡配置

本方式可以为指定的网卡配置参数值,不影响其他网卡对于ARP请求的发送及响应策略。

通过proc接口配置

本方式可在操作系统运行过程中临时更改参数,每次重启实例后都需要重新配置。
  1. 登录目标实例。操作详情可查看登录Linux实例。

  1. 执行如下命令,查看eth0网卡的参数值。

cat /proc/sys/net/ipv4/conf/eth0/arp_announce
cat /proc/sys/net/ipv4/conf/eth0/arp_ignore
说明
请将eth0替换为实际网卡名。
回显示例:

  1. 执行如下命令,配置arp_announce、arp_ignore参数值。

echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
说明
  • 请将1、2替换为业务所需的实际值,详情可参考关于arp_announce参数关于arp_ignore参数。

  • 请将eth0替换为实际网卡名。


通过arp.conf文件配置

本方式可在操作系统运行过程中永久修改参数值,重启实例后无需再次配置。
  1. 登录目标实例。操作详情可查看登录Linux实例。

  1. 执行如下命令,查看eth0网卡的参数值。

sysctl net.ipv4.conf.eth0.arp_announce
sysctl net.ipv4.conf.eth0.arp_ignore
说明
请将eth0替换为实际网卡名。
回显示例:

  1. 修改arp_announce、arp_ignore参数值。

    1. 执行如下命令,新建arp.conf文件。

vim /etc/sysctl.d/arp.conf
    1. 按i键进入编辑模式,在文末添加如下内容。

net.ipv4.conf.eth0.arp_announce = 2
net.ipv4.conf.eth0.arp_ignore = 1
说明
  • 请将1、2替换为业务所需的实际值,详情可参考关于arp_announce参数关于arp_ignore参数。

  • 请将eth0替换为实际网卡名。

    1. 按Esc键退出编辑模式,输入:wq按回车键,保存并退出文件。

  1. 执行如下命令,使配置生效。

sysctl -p /etc/sysctl.d/arp.conf
回显示例:


请关注微信公众号
微信二维码
不容错过
Powered By TOPYUN 云产品资讯