Linux rp_filter、arp_filter、arp_ignore、arp_announce参数说明

news2024/11/26 2:40:23

Linux rp_filter、arp_filter、arp_ignore、arp_announce参数说明。我查看了参考资料,又去查阅了官方文档,凭着我的理解整理了以下文档。各位大神的文档写的很好,但都不喜欢断句啊,读的我这叫一个累。

参考

1.网络编程之网络丢包故障怎样定位怎样处理
2.linux参数arp_filter,arp_ignoe,arp_announce,rp_filter详解
3.Linux rp_filter和arp_filter参数浅析
4.【linux】修改arp_ignore、arp_announce、rp_filter、accept_local |内核调优
5.Linux内核参数之arp_ignore和arp_announce
6.LVS负载均衡(LVS简介、三种工作模式、十种调度算法)
7.官方文档:kernel IP Sysctl

概念

在这里插入图片描述

rp_filter

rp_filter全称reverse path filter用于控制系统是否开启对数据包源地址的校验。这是一个网卡级别的参数也就是说每张网卡可以设置不同的值。此参数有三个值0、1、2具体含义。

详见:kernel IP Sysctl
在这里插入图片描述

0:不开启源地址校验,默认值。

1:开启严格的反向路由校验。对每个进来的数据包校验其反向路由是否是最佳路由,即接收报文的网卡和响应数据的网卡是否是同一张网卡。如果反向路由不是最佳路由,则直接丢弃该数据包。

2:开启松散的反向路由校验。对每个进来的数据包校验其源地址是否可达,即反向路由是否能通过任意网卡到达,如果反向路由不通,则直接丢弃该数据包。

什么是反向路由校验
所谓反向路由校验,就是在一个网卡收到数据包后,把源地址和目标地址对调后查找路由出口,从而得到反转后路由出口。然后根据反向路由出口进行过滤。

当rp_filter的值为1时,要求反向路由的出口必须与数据包的入口网卡是同一块,否则就会丢弃数据包。
当rp_filter的值为2时,要求反向路由必须是可达的,如果反路由不可达,则会丢弃数据包。

arp_filter

arp_filter和rp_filter类似都是进行反向路由检验,不过是专门针对arp协议的。而且行为也有所不同。

详见:kernel IP Sysctl
在这里插入图片描述

当arp_filter设置为0时,如果从某张网卡上收到了一个arp请求,同时目标ip在此主机上,不论目标ip是否在接收到此arp请求的网卡上,那么主机都会进行响应,响应的mac地址为接收到此请求的网卡的mac地址(注意此mac地址不一定是目标ip所在网卡的mac地址,目标IP网卡与接收请求的网卡不是同一个)。
0是默认值,表示回应arp请求的时候不检查网卡情况

当arp_filter设置为1时,如果从某张网卡上收到了一个arp请求,同时目标ip在此主机上,且不要求目标ip一定在接收到此arp请求的网卡上(arp_ignore优先于arp_filter。不要求目标ip一定在接收到此arp请求的网卡,即不适用arp_ignore 1-2的情况),那么主机便会查询到此请求的源ip的路由是通过哪张网卡,如果是接收到此arp请求的网卡则发送arp响应,响应的mac地址为接收到此请求的网卡的mac地址。
1表示回应arp请求时会检查网卡是否和接收arp请求的网卡一致,不一致就不回应

arp_ignore

定义对目标地址为本机IP的ARP查询的不同应答模式。

在这里插入图片描述
详见:kernel IP Sysctl

整型值的范围为0-8常用的只有0 1 2,默认为0。

0(默认值)回应任何网络接口上对任何本地IP地址的arp查询请求,比如eth0=192.168.0.1/24, eth1=10.1.1.1/24,那么即使eth0收到来自10.1.1.2这样地址发起的对10.1.1.1的arp查询也会回应——而原本这个请求该是出现在eth1上也该由eth1回应的响应的mac自然是eth0的mac。
0是响应任意网卡上接收到的对本机IP地址的arp请求(包括环回网卡上的地址),而不管该目标IP是否在接收网卡上。

1 只回应目标IP地址是来访网络接口本地地址的ARP查询请求。
比如:eth0=192.168.0.1/24, eth1=10.1.1.1/24,那么当eth0收到对192.168.0.1的查询请求时会进行回复(不论arp请求源地址是啥),而对待查询的ip为10.1.1.1的arp查询不会进行回复
1 只响应目标IP地址为接收网卡上的本地地址的arp请求。

2 只回应目标IP地址是来访网络接口本地地址,并且请求源IP必须在该网络接口的子网段内的ARP查询请求。
比如:eth0=192.168.0.1/24, eth1=10.1.1.1/24, eth0收到对192.168.0.1的查询请求源地址为 10.1.1.2(不同网段)不会回答,而会回答192.168.0.2发起的对192.168.0.1的arp查询请求
2 只响应目标IP地址为接收网卡上的本地地址的arp请求,并且arp请求的源IP必须和接收网卡同网段。

3 不回应配置为scope host的的本地地址。只回应配置为scope global和scope link的本地地址

4~7 保留未使用

8 不回应所有的arp请求

IP 的SCOPE-ID的说明

// 查看man ip address手册
root@ubuntu22-25:~# man ip address
IP-ADDRESS(8)                                                              Linux                                                              IP-ADDRESS(8)

NAME
       ip-address - protocol address management

SYNOPSIS
       ip [ OPTIONS ] address  { COMMAND | help }

       ip address { add | change | replace } IFADDR dev IFNAME [ LIFETIME ] [ CONFFLAG-LIST ]

       ip address del IFADDR dev IFNAME [ mngtmpaddr ]

       ip address { save | flush } [ dev IFNAME ] [ scope SCOPE-ID ] [ metric METRIC ] [ to PREFIX ] [ FLAG-LIST ] [ label PATTERN ] [ up ]

       ip address [ show [ dev IFNAME ] [ scope SCOPE-ID ] [ to PREFIX ] [ FLAG-LIST ] [ label PATTERN ] [ master DEVICE ] [ type TYPE ] [ vrf NAME ] [ up
               ] ]

       ip address { showdump | restore }

       IFADDR := PREFIX | ADDR peer PREFIX [ broadcast ADDR ] [ anycast ADDR ] [ label LABEL ] [ scope SCOPE-ID ]

       SCOPE-ID := [ host | link | global | NUMBER ]
       
......

       scope SCOPE_VALUE
              the scope of the area where this address is valid.  The available scopes are listed in file /etc/iproute2/rt_scopes.  Predefined scope values
              are:

                      global - the address is globally valid.

                      site - (IPv6 only, deprecated) the address is site local, i.e. it is valid inside this site.

                      link - the address is link local, i.e. it is valid only on this device.

                      host - the address is valid only inside this host.

arp_announce

arp_announce的作用是控制系统在对外发送arp请求时,如何选择arp请求数据包的源IP地址。

详见:kernel IP Sysctl
在这里插入图片描述

0:默认值,允许使用任意网卡上的IP地址作为arp请求的源IP。通常就是使用数据包的源IP(注意源IP可能不是发送网卡的IP,源IP与发送网卡mac不对应)。
比如:eth0=192.168.1.1/24,eth1=10.1.1.1/24,要发送的数据包源IP=192.168.1.1,目标IP=10.1.1.200/24,那么发送arp请求会使用源IP=192.168.1.1(eth0的IP)和mac地址=eth1(10.1.1.1/24)的mac。

1:尽量避免使用不属于该发送网卡子网的本地地址作为发送arp请求的源IP地址。当发送arp请求时,会先检查所有子网,查看是否存在包含目标ip的子网(同网段)。如果存在,那么使用该子网IP发送;如果不存在,使用参数2的方式发送。(我理解如果两块网卡配置同段IP,其中一块作为发送网卡的情况下,会与参数2有所区别。)

2:忽略数据包的源IP地址,选择该发送网卡上最合适的本地地址作为arp请求的源IP地址。当发送arp请求时,会先检查所有子网,优先选择包含目标IP的子网所对应的IP。如果不存在包含目标IP的子网,那么会使用外发网卡或所有网卡的第一个IP。
比如:eth0=192.168.1.1/24,eth1=10.1.1.1/24,要发送的数据包源IP=192.168.1.1,目标IP=10.1.1.200/24,那么发送arp请求会使用源IP=10.1.1.1(eth1的IP)和mac地址=eth1(10.1.1.1/24)的mac。

补充:arp_ignore和arp_announce参数在DR模式下的作用

什么是DR

详见:LVS负载均衡(LVS简介、三种工作模式、十种调度算法)

配置arp_ignore为1

因为DR模式下,每个真实服务器节点都要在环回网卡上绑定虚拟服务IP。这时候,如果客户端对于虚拟服务IP的arp请求广播到了各个真实服务器节点,如果arp_ignore参数配置为0,则各个真实服务器节点都会响应该arp请求,此时客户端就无法正确获取LVS节点上正确的虚拟服务IP所在网卡的MAC地址。假如某个真实服务器节点A的网卡eth1响应了该arp请求,客户端把A节点的eth1网卡的MAC地址误认为是LVS节点的虚拟服务IP所在网卡的MAC,从而将业务请求消息直接发到了A节点的eth1网卡。这时候虽然因为A节点在环回网卡上也绑定了虚拟服务IP,所以A节点也能正常处理请求,业务暂时不会受到影响。但时此时由于客户端请求没有发到LVS的虚拟服务IP上,所以LVS的负载均衡能力没有生效。造成的后果就是,A节点一直在单节点运行,业务量过大时可能会出现性能瓶颈。

所以DR模式下要求arp_ignore参数要求配置为1。

配置arp_announce为2

每个机器或者交换机中都有一张arp表,该表用于存储对端通信节点IP地址和MAC地址的对应关系。当收到一个未知IP地址的arp请求,就会再本机的arp表中新增对端的IP和MAC记录;当收到一个已知IP地址(arp表中已有记录的地址)的arp请求,则会根据arp请求中的源MAC刷新自己的arp表。

如果arp_announce参数配置为0,则网卡在发送arp请求时,可能选择的源IP地址并不是该网卡自身的IP地址,这时候收到该arp请求的其他节点或者交换机上的arp表中记录的该网卡IP和MAC的对应关系就不正确,可能会引发一些未知的网络问题,存在安全隐患。

所以DR模式下要求arp_announce参数要求配置为2。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1451354.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PPT导出PDF时保持图像高清的方法

问题: 我们经常会发现,在PPT中插入的图片非常高清,但是通过PPT转换为PDF之后,图片就会出现不同程度的失真。 问题产生的原因: 这是因为Acrobat的PDF Maker在将PPT转换为PDF的时候,对PPT中的图片进行了压缩 Solution: 在PPT的…

c++ Qt 数据库操作

1、准备工作 Qt本身并没有数据库功能,但是Qt支持调用其他主流的数据库产品,并且这些数据库产品统一了Qt的接口,实际上是一种数据库的中间件。 Qt支持以下数据库类型: 嵌入式常用的数据库是sqlite3,本体只有几兆大小。非…

win7自带截图工具保存失效解决办法

今日发现一台远航技术的win7中自带的截图工具使用时正常,保存图片时没有弹出保存位置的对话窗口,无法正常保存图片。解决方案如下: 1、进入注册表编辑器。开始-搜索程序和文件-输入 regedit 按下回车键,打开注册表; 2、…

auto关键字详讲

目录 1.问题思考 2.auto关键字介绍 3. 早期auto的缺陷: 4.什么叫自动存储器? 5. c标准auto关键字 5.1auto的使用细节 5.2 auto什么时候不能推导变量的类型呢? 5.3基于范围的for循环 5.3.1范围for的用法 5.3.2 范围for的使用条件 6.…

家庭动态网络怎么在公网访问主机数据?--DDNS配置(动态域名解析配置)

前言 Dynamic DNS是一个DNS服务。当您的设备IP地址被互联网服务提供商动态变更时,它提供选项来自动变更一个或多个DNS记录的IP地址。 此服务在技术术语上也被称作DDNS或是Dyn DNS 如果您没有一个静态IP,那么每次您重新连接到互联网是IP都会改变。为了避免每次IP变化时手动更…

14. 推荐系统之矩阵分解

本文为 「茶桁的 AI 秘籍 - BI 篇 第 14 篇」 文章目录 矩阵分解 ALS常用推荐算法什么是矩阵分解矩阵分解的目标函数 Hi,你好。我是茶桁。 新年过后,咱们要开始学一些新内容了。从今天开始,要给大家去讲解的是关于推荐系统的内容。推荐系统的…

「递归算法」:两两交换链表中的节点

一、题目 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。 示例 1: 输入:head [1,2,3,4] 输出&#xf…

【sgCreatePinyin】自定义小工具:敏捷开发→自动化生成拼音字段名称(字段名生成工具)

源码 <template><!-- 前往https://blog.csdn.net/qq_37860634/article/details/136126311 查看使用说明 --><div :class"$options.name"><div class"sg-head">拼音字段生成工具</div><div class"sg-container&qu…

C#,计算几何,贝塞耳插值(Bessel‘s interpolation)的算法与源代码

Friedrich Wilhelm Bessel 1 贝塞耳插值&#xff08;Bessels interpolation&#xff09; 首先要区别于另外一个读音接近的插值算法&#xff1a;贝塞尔插值&#xff08;Bzier&#xff09;。 &#xff08;1&#xff09;读音接近&#xff0c;但不是一个人&#xff1b; &#x…

《剑指 Offer》专项突破版 - 面试题 47 : 二叉树剪枝(C++ 实现)

题目链接&#xff1a;LCR 047. 二叉树剪枝 - 力扣&#xff08;LeetCode&#xff09; 题目&#xff1a; 一棵二叉树的所有节点的值要么是 0 要么是 1&#xff0c;请剪除该二叉树中所有节点的值全都是 0 的子树。例如&#xff0c;在剪除下图 (a) 中二叉树中所有节点值都为 0 的…

OpenAI又出王炸,Sora是否要开启视频AI新时代?

OpenAI又出王炸&#xff0c;Sora是否要开启视频AI新时代&#xff1f; 关注微信公众号 DeepGoAI 前几天我们还在讨论 如何让ChatGPT3.5变得更聪明 今天OpenAI就带着新王炸出现了 如同ChatGPT一般 在计算机领域掀起轩然大波 开启真正视频AI新时代 那就是 Sora 很多同学可…

MinIO 和 Apache Tika:文本提取模式

Tl;dr: 在这篇文章中&#xff0c;我们将使用 MinIO Bucket Notifications 和 Apache Tika 进行文档文本提取&#xff0c;这是大型语言模型训练和检索增强生成 LLM和RAG 等关键下游任务的核心。 前提 假设我想构建一个文本数据集&#xff0c;然后我可以用它来微调 LLM.为了做…

【实战】二、Jest难点进阶(一) —— 前端要学的测试课 从Jest入门到TDD BDD双实战(五)

文章目录 一、Jest 前端自动化测试框架基础入门二、Jest难点进阶1.snapshot 快照测试 学习内容来源&#xff1a;Jest入门到TDD/BDD双实战_前端要学的测试课 相对原教程&#xff0c;我在学习开始时&#xff08;2023.08&#xff09;采用的是当前最新版本&#xff1a; 项版本babe…

STM32F1 - 中断系统

Interrupt 1> 硬件框图2> NVIC 中断管理3> EXTI 中断管理3.1> EXTI与NVIC3.2> EXTI内部框图 4> 外部中断实验4.1> 实验概述4.2> 程序设计 5> 总结 1> 硬件框图 NVIC&#xff1a;Nested Vectored Interrupt Controller【嵌套向量中断控制器】 管理…

分布式锁redisson

文章目录 1. 分布式锁1.1 基本原理和实现方式对比synchronized锁在集群模式下的问题多jvm使用同一个锁监视器分布式锁概念分布式锁须满足的条件分布式锁的实现 1.2 基于Redis的分布式锁获取锁&释放锁操作示例 基于Redis实现分布式锁初级版本ILock接口SimpleRedisLock使用示…

OS设备管理

设备管理 操作系统作为系统资源的管理者&#xff0c;其提供的功能有&#xff1a;处理机管理、存储器管理、文件管理、设备管理。其中前三个管理都是在计算机的主机内部管理其相对应的硬件。 I/O设备 I/O即输入/输出。I/O设备即可以将数据输入到计算机&#xff0c;或者可以接收…

差分与前缀和的含义、应用及示例代码

差分与前缀和 求差分 与 求前缀和 是一组“互逆”的操作。 使用差分 可以实现&#xff1a;以时间复杂度为O(1)&#xff0c;对数组区间各元素 / 矩阵区域各元素 一个常数。 使用前缀和 可以实现&#xff1a;以时间复杂度为O(1)&#xff0c;对数组区间各元素 / 矩阵区域各元素…

C++ 图上 bfs(五十八)【第五篇】

今天我们来学习一下图上bfs。 1.图上bfs 在图上&#xff0c;我们也可以进行 BFS&#xff0c;也可以解决图上 DFS 能解决的问题&#xff0c;比如连通块。 除此以外&#xff0c;根据 BFS 的性质&#xff0c;第一次到一个点的时候记下来的步数一定是到从起点到这个点的最小步数&…

Netty Review - 直接内存的应用及源码分析

文章目录 Pre概述应用访问效率&#xff1a; 堆内存 VS 直接内存申请效率&#xff1a; 堆内存 VS 直接内存数据存储结构&#xff1a; 堆内存 VS 直接内存结论 ByteBuffer.allocateDirect 源码分析unsafe.allocateMemory(size) ---> C方法 JVM参数 -XX:MaxDirectMemorySize直接…

并发编程(1)基础篇

1 概览 1.1 这门课讲什么 这门课中的【并发】一词涵盖了在 Java 平台上的 进程线程并发并行 以及 Java 并发工具、并发问题以及解决方案&#xff0c;同时也会讲解一些其它领域的并发 1.2 为什么学这么课 我工作中用不到并发啊&#xff1f; 那你还是没有接触到复杂项目. …