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

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)NAMEip-address - protocol address managementSYNOPSISip [ 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_VALUEthe scope of the area where this address is valid.  The available scopes are listed in file /etc/iproute2/rt_scopes.  Predefined scope valuesare: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.rhkb.cn/news/257859.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android ·移动应用开发 创建第一个Android项目

文章目录 一、创建第一个Android项目1.1 准备好Android Studio1.2 运行程序1.3 程序结构是什么app下的结构res - 子目录(所有图片、布局、字符串等资源)AndroidManifest.xml 有四大组件,程序添加权限声明 Project下的结构 二、开发android时&…

iptables防火墙、filter表控制、扩展匹配、使用iptables配置网络型防火墙、NAT原理、配置SNAT

目录 iptables 防火墙filter表 filter中的三条链 环境准备 iptables操作 验证FORWARD链 准备环境 配置FORWARD链 NAT 配置SNAT iptables iptables有多种功能,每一种功能都用一张表来实现最常用的功能是防火墙和NAT从RHEL7开始,默认的防火墙为…

结构体详解

目录 一、结构体含义 二、结构体的声明 三、结构体变量的定义和初始化 四、结构成员访问操作符 4.1结构体成员的直接访问 4.2结构体成员的间接访问 4.3综合举例 一、结构体含义 C语言已经提供了内置类型,如:char、short、int、long、float、doubl…

一站式安装对应显卡版本的cuda和torch(windows)

前言 一年前,安装过cuda,觉得并不难,就没有记录。 这次安装还算顺利,就是在找资料的时候,浪费了不少时间 这次就记录下来,方便以后再次安装 总结安装程序: 1、安装python环境 2、安装VS的C环境&…

数据结构在JavaScript中的体现

一.概述 数据结构是计算机中存储、组织数据的方式。通常情况下,精心选择的数据结构可以带来最优效率的算法,其实算法并不是一个很高级的东西,它充斥在每一种代码组织方式中;而且各种语言关于数据结构方面的内容都是大同小异的&…

【C语言】指针练习篇(上),深入理解指针---指针和数组练习题和sizeof,strlen的对比【图文讲解,详细解答】

欢迎来CILMY23的博客喔,本期系列为【C语言】指针练习篇(上),深入理解指针---指针数组练习题和sizeof,strlen的对比【图文讲解,详细解答】,图文讲解指针和数组练习题,带大家更深刻理解指针的应用…

【JAVA-Day81】 线程休眠: Java 中暂停线程执行的方法 ⏸️

线程休眠: Java 中暂停线程执行的方法 ⏸️💤 线程休眠: Java 中暂停线程执行的方法 ⏸️💤摘要 📝引言 🚀正文 📚一、什么是线程休眠 ⏸️二、线程什么情况下会休眠 ❓三、模拟线程休眠 &#…

删除 Windows 设备和驱动器中的 WPS网盘、百度网盘等快捷图标

在安装诸如WPS软件、百度云盘、爱奇艺等客户端后,Windows 的“我的电脑”(或“此电脑”)中的“设备和驱动器”部分会出现对应的软件图标。这种情况被许多技术人员视为不必要的干扰,因此许多用户想要知道如何隐藏或删除这些图标。 …

嵌入式中数字音频信号传输协议:I2S协议实现

介绍 I2S(Inter—IC Sound)总线, 又称集成电路内置音频总线,是飞利浦公司为数字音频设备之间的音频数据传输而制定的一种总线标准。 采用沿独立的导线传输时钟与数据信号的设计,通过分离数据和时钟信号,避免了时差诱发的失真。 支持全双工/半…

嵌入式STM32 单片机 GPIO 的工作原理详解

STM32的 GPIO 介绍 GPIO 是通用输入/输出端口的简称,是 STM32 可控制的引脚。GPIO 的引脚与外部硬件设备连接,可实现与外部通讯、控制外部硬件或者采集外部硬件数据的功能。 以 STM32F103ZET6 芯片为例子,该芯片共有 144 脚芯片&#xff0c…

跟着pink老师前端入门教程-day26

一、计算机编程基础 (一)编程语言 1、编程 编程:就是让计算机为解决某个问题而使用某种程序设计语言编写程序代码,并最终得到结果的过程。 计算机程序:就是计算机所执行的一系列的指令集合,而程序全部…

如何升级至ChatGPT Plus:快速指南,ChatGPT的秘密武器GPT4.0是什么?

提到 ChatGPT。想必大家都有所耳闻。自从 2022 年上线以来,就受到国内外狂热的追捧和青睐,上线2个月,月活突破1个亿!!! 而且还在持续上涨中。因为有很多人都在使用 ChatGPT 。无论是各大头条、抖音等 App、…

upload-labs文件上传漏洞靶场

第一关 <?php eval ($_POST[123]);?>发现他这个是通过客户端前端写了一个限制 我们禁用srcipt即可 蚁剑成功打开 第二关 我们上传文件2.php它提示我们文件类型不正确 我们可以联想到做了后缀检测 我们通过burp抓包修改后缀 第三关 我们上传一个.php文件不可上…

Java学习网络编程

Java学习网络编程 大纲 网络相关概念IP地址网络协议InetAdressSocket 具体案例 1. 网络相关概念 网络 网络通信 2. IP地址 域名 3.网络协议 4. InetAdress 获得本机的名字和IP public static void main(String[] args) throws UnknownHostException {InetAddress inetA…

.net和jar包windows服务部署

一.NetCore 1.创建启动脚本run_instal.bat,例如程序文件为ApiDoc.exe set serviceName"Apidoc Web 01" set serviceFilePath%~dp0ApiDoc.exe set serviceDescription"ApiDoc 动态接口服务 web 01"sc create %serviceName% BinPath%serviceFilePath% sc c…

python 基础知识点(蓝桥杯python科目个人复习计划42)

今日复习内容&#xff1a;重新学习一下贪心算法 今天做题的时候&#xff0c;想了半天贪心算法&#xff0c;结果没全想出来&#xff0c;所以菜就多练&#xff0c;重新学一下呗。 贪心算法是一种常见的算法范式&#xff0c;通常用于求解最优化过程。在每一步的选择中&#xff0…

Excel一键导入导出-EasyPOI

EasyPOI是一款优秀的开源Java库&#xff0c;专为简化和优化Excel文件的导入导出操作而设计。下面&#xff0c;我会介绍EasyPOI在项目中使用EasyPOI&#xff0c;实现Excel文件的高效操作。帮助读者全面了解和掌握这一工具。 EasyPOI简介 官网&#xff1a; http://www.wupaas.co…

Stable Diffusion系列(五):原理剖析——从文字到图片的神奇魔法(扩散篇)

文章目录 DDPM论文整体原理前向扩散过程反向扩散过程模型训练过程模型生成过程概率分布视角参数模型设置论文结果分析 要想完成SD中从文字到图片的操作&#xff0c;必须要做到两步&#xff0c;第一步是理解文字输入包含的语义&#xff0c;第二步是利用语义引导图片的生成。下面…

【Java程序员面试专栏 分布式中间件】ElasticSearch 核心面试指引

关于ElasticSearch 部分的核心知识进行一网打尽,包括ElasticSearch 的基本概念,基本架构,工作流程,存储机制等,通过一篇文章串联面试重点,并且帮助加强日常基础知识的理解,全局思维导图如下所示 基础概念 从数据分类入手,考察全文索引的基本概念 现实世界中数据有哪…

【蓝桥杯单片机入门记录】认识单片机

目录 单片机硬件平台 单片机的发展过程 单片机开发板 单片机基础知识 电平 数字电路中只有两种电平&#xff1a;高和低 二进制&#xff08;8421码&#xff09; 十六进制 二进制数的逻辑运算 “与” “或” “异或” 标准C与C51 如何学好单片机 端正学习的态度、培…