SNMP 是如何工作的?了解 MIB、OID、陷阱、轮询、代理 …

SNMP在很长一段时间内都是监控的支柱。即使在今天,它仍然被大量用于监控,但问题是持续多长时间?让我们一起通过各种示例了解 SNMP 的工作原理。了解 SNMP 轮询和陷阱之间的区别?SNMP 中 MIB 和 OID 的用途是什么?什么是代理和经理?还有更多!

SNMP 定义

什么是 SNMP?

SNMP (Simple Network Management Protocol):简单网络管理协议,是一种通信协议,允许发现、监视和配置连接到网络的兼容 SNMP 的设备,包括路由器、交换机、服务器、打印机等。

从思科,Juniper,华为到微软以及Linux、Unix以及介于两者之间的几乎所有制造商,SNMP 几乎都被支持,SNMP 是网络和系统监控的事实标准(但这种趋势正在发生变化,稍后会详细介绍)

简单网络管理协议受欢迎的原因是其名称中的第一个词 – 它配置起来非常简单。SNMP 只需要两个组件即可工作:管理器(NMS)和代理(AGENT)。

SNMP 代理:安装或嵌入在设备上,其主要工作是响应 NMS 查询。换句话说,代理任务是收集有关安装它的系统的状态和统计信息,以便在出现查询时可以立即响应管理器。

SNMP 管理器:也称为 NMS(网络管理系统),是一个应用程序,用于收集和存储来自代理的有关终端设备的信息。除了收集信息外,管理器还具有图形界面(GUI),您可以在其中检查受监控设备的问题,统计信息和记录。

SNMP 是如何工作的?了解 MIB、OID、陷阱、轮询、代理 ...
Grafana 基于 SNMP 出图

管理器(NMS)可以通过多种方式使用收集到的信息,如:

  • 设备发现;
  • 设备识别;
  • 设备监控;
  • 性能分析;
  • 设备管理;
  • 智能通知或可自定义的警报

SNMP 的作用是什么?

认识一下 Eric,一位初级系统管理员,他刚刚从老板那里得到了一项任务,要找出为什么公司的应用程序经常很慢。Boss对他说:“检查网络上每台服务器、路由器和交换机上的CPU、内存和带宽利用率!

Erik 卷起袖子,检查了网络上的每台设备,持续了几个小时。他对 Windows 服务器使用“任务管理器”而 Linux使用“Top command”来查看系统性能。

SNMP 是如何工作的?了解 MIB、OID、陷阱、轮询、代理 ...
在 Windows 上使用任务管理器进行系统性能监控

由于进展缓慢以及他缺乏计算机网络知识的事实,Eric 只能向互联网上的资源寻求帮助。

他所有的搜索结果都说了同样的解决方案:“使用 SNMP 管理器,也称为NMS(网络管理系统),系统地检查服务器,路由器和交换机的运行状况和性能”!

Eric 意识到他试图手动检查网络上的每台设备是多么愚蠢。

他安装了 Manager,并配置了对应的监控项来检查网络中每台设备上的 CPU、内存和带宽利用率。之后,Eric 在每个设备上都启用了 SNMP,以便他们可以响应管理器。

管理器比人工快得多,因为它可以每分钟检查数百台设备的状态,而且从不间断。最后,Eric 可以登录到管理器并检查图表,就像任务管理器上的图表一样,很直观的看到每台设备的状态。

他还可以配置管理器,如果某些设备的CPU利用率超过90%,或者当任何网络接口的使用率为100%时,它会通过电子邮件向他发送警报!

SNMP 是如何工作的?了解 MIB、OID、陷阱、轮询、代理 ...

在上图中,Manager 收集网络中的每个网络设备、服务器的状态信息,最后筛选出 CPU 利用率的状态。当 Windows 服务器的 CPU 利用率达到 100%,管理器会立即向管理员发送有关此问题的电子邮件。管理员连接到管理器以查看历史记录和趋势,并了解有关该问题的更多信息。

SNMP 是如何工作的?了解 MIB、OID、陷阱、轮询、代理 ...
LibreNMS

SNMP 不仅用于监视设备,还可以将其用于其他用途。例如,Eric 从他的老板那里收到了另一个任务。他必须统计出网络上所有设备的序列号。

现在,Eric 知道得更多了,他肯定不会手动登录设备并将每个序列号写在纸上。相反,他将配置监控软件为他执行此操作,然后整理相关输出,输出对应的结果就可以了。

SNMP 是如何工作的?了解 MIB、OID、陷阱、轮询、代理 ...

最后让我们总结一下,并回答主要问题 – SNMP的用途是什么?

SNMP 提供了一种从网络上的设备中收集网络管理信息的方法。

以下是一些示例,可以更轻松地了解如何使用 SNMP:

  • 监控流经设备的入站和出站流量;
  • 监控 Windows 服务器上安装的软件;
  • 检测网络设备内的故障以及警报/通知;
  • 远程访问和配置设备;
  • 监控您的服务器 CPU,内存,磁盘空间使用情况,并在超过阈值时发出警报;
  • 当设备无法通过网络到达时发送电子邮件或短信。

历史

与大多数技术创新一样,一切都始于一个问题 – ARPANET的第一次重大网络中断,这是当今互联网的技术基础:

1980年10月27日,阿帕网发生了一起重大的故障事件。在几个小时的时间里,网络出现了异常,无法使用,后来被诊断为高优先级软件进程失控。在阿帕网中,网络范围的干扰并不常见(几年来没有发生过),因此,许多人表示有兴趣更多地了解这一特定事件的根因。

RFC789

这是RFC 789的一句话,早在1980年就警告我们监控和管理复杂网络的必要性。

不久之后,第一个解决方案出现了:RFC 1028 中描述的网关监控协议(SGMP),但在1988年很快被SNMPv1(RFC 1067)所取代。然后是版本2,然后是版本3(推荐版本,安全性更好)。

其实很少有人知道 SNMP 可以配置网络设备,并且他正在尝试替换每个人都用于设备配置的命令行界面(CLI)。但计划失败了。SNMP 非常适合用于监控,但很少用于配置设备。

甚至在2000年初,互联网架构委员会(IAB)也发布了文档(RFC 3535),建议使用CLI而不是通过SNMP来配置设备。之后,IAB展开了一项调查,以了解为什么没有人愿意使用SNMP来配置设备。

他们发现了什么?原因是大家都讨厌ASN.1模块数据结构

SNMP 是如何工作的?了解 MIB、OID、陷阱、轮询、代理 ...

另一个问题是安全性,而不是版本1和2中缺乏安全性。没有人希望在设备上启用写权限,而 SNMP 密码(团体字)以纯文本形式在网络上漫游。虽然 v3 版本有安全机制,但最初,并非所有设备都支持它。此外,由于复杂性和引入的网络开销,所以很少有人使用。

IAB收集了所有这些问题,并将其报告给IETF(互联网工程任务组)。

不久之后,IETF 开始为设备和配置管理技术开发新的基于 XML 的标准。

同时,Juniper 开发了一种名为 JUNOScript(基于XML) 的协议,用于管理和配置其设备。

而这正是IETF所寻找的!天作之合!

IETF采用了这个概念,并将其发展成称为NETCONF的标准

NETCONF只是试图取代SNMP的众多标准之一。但是大家很清楚,从一个标准到另一个标准的迁移速度很慢(看看IPv4与IPv6),因此它可能还会持续很长时间。

版本和 RFC

SNMP 有三个版本:v1、v2 和 v3,以及许多描述其工作原理的 RFC 文档。下面,您可以找到一个描述所有版本和RFC文档的表格。

版本RFC描述
SNMPv1从1988年开始,各种RFC被发布,描述了SNMPv1.RFC 1065和1066描述了网络管理的各个方面,RFC 1067 为“一个简单的网络管理协议”讨论了如何在网络管理协议中实现前两个RFC中的想法。上面列出的 RFC 在两年后由 RFC 1155、1156 和 1157 进行了更新。SNMPv1 安全性基于团体字符串(纯文本密码)
SNMPv21993年,RFC 1441-1452被提出。这些 RFC 修订了以前的 RFC,并成为版本 2 的基础。RFC 1901–1910 被添加到 RFC 1441–1452 中,并创建了一个名为 SNMPv2c 的基于社区的版本 2 和一个名为 SNMPv2u 的基于用户的版本。有些人认为基于社区的SNMPv2版本是事实上的标准。RFC 1902–1908 描述了基于社区的 SNMPv2 版本。此版本改进了SNMP协议的性能和通信,同时引入了GetBulkRequest和Informs等新功能。版本2的安全性确实有所改善,但由于复杂性,它被恢复到基于社区的版本2c(C代表社区。
SNMPv32002 年,发布了 RFC 3411,3412,3413,3414,3415,3416,3417,3418,这些 RFC 描述了版本 3,并构成了我们今天使用的 SNMP 的基础最安全的版本 ,使用认证和加密机制提供对设备的安全访问。

SNMP 是如何工作的?

SNMP 根据客户端-服务器体系结构使用以下三个组件工作:

  • 管理器 – 管理和轮询远程设备的中央系统
  • 代理 – 响应查询的软件,安装在或嵌入在受管设备上
  • 简单网络管理协议 – 管理器和代理之间使用的通信协议
SNMP 是如何工作的?了解 MIB、OID、陷阱、轮询、代理 ...

充当客户机的 SNMP 管理器将请求发送到一个或多个代理。代理扮演服务器角色,根据经理的请求进行响应。代理还可以根据使用 SNMP 陷阱的预定义标准,就某些事件通知管理中心。

SNMP 使用 UDP 端口 161 发送请求和响应消息类型,使用 UDP 端口 162 发送陷阱和通知

您可能已经注意到了新的术语:轮询和陷阱。让我们来看看它们是什么!

SNMP 轮询与陷阱

轮询和陷阱之间有什么区别?

管理器的主要目的是通过轮询代理收集有关网络上设备的信息。

例如,管理器可以轮询位于路由器上的代理,以获取网络接口的状态。它可以每分钟都这样做。该过程称为轮询。当管理器检测到接口利用率为 100% 时,他将触发警报,向管理员发送电子邮件通知。

除了响应管理器轮询之外,代理还可以在发生某些事件时独立发送陷阱。

如果只在代理上配置了陷阱(不进行轮询),则管理器将永远不会查询代理以获取信息,并且代理将保持安静,直到出现问题。

当问题发生时,例如网络接口利用率达到 100%,代理将使用陷阱或通知向管理器发送通知。然后,管理器可以通过电子邮件将该信息转发给管理员。

轮询和陷阱之间的关系就像父母和小学生的关系一样。

只有当问题发生时,孩子才会向家长报告学校的问题。就像只有当受管设备上出现问题时才发送陷阱一样。

但是,如果父母每周都与老师一起检查儿子的进度,他们会发现违规行为并及时预防问题,就像SNMP管理器对轮询所做的那样。在这种情况下,父母花费更多的时间和精力,但他们确切地知道他们的孩子发生了什么。

因此,管理员可以将管理器配置为每分钟轮询有关网络上设备的信息。这将使他能够配置有关网络上所有接口利用率的每周报告。使用该报告,管理员可以及时规划网络升级,并防止接口利用率出现问题。这只能通过轮询来实现!

总而言之,轮询提供了有关受监视设备的更多信息,但代价是花费更多的网络和系统资源。陷阱或陷阱缺少该信息,但效率更高,因为它只是在受监视的设备上出现问题时触发的单向通知。捕获需要在每个设备上进行配置,这会使维护变得复杂。轮询更易于维护,因为设备管理集中在管理器上。

凭据

管理中心需要凭据才能从代理程序检索信息。

SNMP 版本 1 和 2 的凭据不包括用户名,只包含密码(称为团体字符串)。

许多启用了 SNMP 的设备的默认团体字符串在用作只读时是public,而对于读写设备,默认的社区字符串是私有的。基于社区的身份验证不安全,因为没有加密;密码以纯文本格式通过网络发送。

建议使用版本 3,因为支持身份验证和加密。

SNMPv3 支持以下一组安全级别 (RFC 2574):

  • noAuthnoPriv – 无需身份验证和隐私的通信。
  • authNoPriv – 与身份验证和无隐私的通信。用于身份验证的协议是 MD5 和 SHA(安全哈希算法)。
  • authPriv – 与身份验证和隐私的通信。用于身份验证的协议是MD5和SHA;对于隐私,DES(数据加密标准)和AES(高级加密标准)。

SNMP 中 MIB 和 OID 的目的?

要从启用了 SNMP 的设备获取信息,您需要该设备的 IP 地址、团体字符串和 OID(对象标识符)。

对象标识符 (OID) 以数字格式使用,中间用句点分隔,如“1.3.6.1.2.1.1.3.0”。

设备上可能有数千个OID,每个OID都是特定信息的唯一标识符。例如,如果您使用 OID 1.3.6.1.1.2.1.1.3.0 查询设备以获取信息,您将获得系统正常运行时间作为答案。使用“1.3.6.1.2.1.1.1”(sysDescr),您将获得系统的描述。

让我们试试吧!下面是一个示例,说明如何使用 Net-SNMP 工具从任何启用了 SNMP 的设备获取系统描述:

SNMP 是如何工作的?了解 MIB、OID、陷阱、轮询、代理 ...

正如您在上面的示例中看到的那样,您可以使用某些 OID 查询启用了 SNMP 的设备,它将为您提供一些信息 — 一个数字(如 431721265)、一个字符串(如“Cisco IOS 软件,C2960C 软件”)或任何其他信息类型。

总之,OID是用于检查网络设备上组件状态的数字地址(如CPU,内存,电源,网络流量等)。

不同类型的设备(路由器、服务器、打印机等)通过 SNMP 提供不同的信息。某些设备仅提供少量信息(如名称,正常运行时间和序列号);其他人可以为您提供有关设备的任何信息(如路由表,温度,接口利用率等)。

今天有数以百万计的OID,有通用的OID,每种类型的设备都支持这些OID。此外,每种类型的设备都有自己的 OID。幸运的是,在那片OID的海洋中有一个清单!该订单称为管理信息库 (MIB)。

简而言之,MIB 是 OID 的集合,其中包含有关每个 OID 提供的信息类型及其人类可读名称的信息。

让我举个例子 – MIB称为RFC1213(MIB-2)具有OID“1.3.6.1.1.2.1.1.1”,定义为数据类型为“string”的“sysDescr”。该 OID 可以写为 1.3.6.1.2.1.1.1 或 1.3.6.1.2.1.1.sysDescr。您可以在该OID中定义其余数字,因此您可以编写“iso.org.dod.internet.mgmt.mib-2.system.sysDescr”而不是“1.3.6.1.2.1.1.1” – 它们是一回事。

SNMP 是如何工作的?了解 MIB、OID、陷阱、轮询、代理 ...

MIB 是按层次结构编写的。在下图中,您可以找到一个 MIB IF-MIB 示例,该示例定义了 OID 1.3.6.1.2.1.2(1.3.6.1.2.1.2.2.1.2 及其子项 1.3.6.1.2.1.2.2.1.3 及其子项等)下的所有 OID。

SNMP 是如何工作的?了解 MIB、OID、陷阱、轮询、代理 ...

SNMP 测试工具

Linux上用于测试SNMP的最佳工具之一是Net-SNMP。使用该工具,我将向您展示如何在Linux上使用SNMP。还有一个Windows版本的Net-SNMP工具,但我建议使用SnmpB MIB浏览器来测试SNMP并在Windows上管理MIB。

安装方法如下:

### Ubuntu
apt-get install snmp
### RHEL/CentOS
yum install net-snmp net-snmp-utils

使用Net-SNMP命令,我们将找出路由器型号,序列号以及网络接口状态和描述。之后,我们将使用 snmpset 命令关闭路由器上的一个网络接口。

要了解路由器上的系统描述,我们将使用来自 RFC1213(MIB-2)的OID 1.3.6.1.2.1.1.1,称为 sysDescr。

SNMP 是如何工作的?了解 MIB、OID、陷阱、轮询、代理 ...

在终端里输入snmpget命令,如下:

$ snmpget -v2c -c public 192.168.1.1 1.3.6.1.2.1.1.1.0 
SNMPv2-MIB::sysDescr.0 = STRING: Cisco IOS Software, C2960C Software (C2960c405ex-UNIVERSALK9-M), Version 15.2(2)E9, RELEASE SOFTWARE (fc4)
Technical Support: http://www.cisco.com/techsupport
Copyright (c) 1986-2018 by Cisco Systems, Inc.
Compiled Sat 08-Sep-18 16:49 by prod_rel_team

要查找序列号,请使用 MIB ENTITY-MIB 中的 OID 1.3.6.1.2.1.47.1.1.1.1.11.1001

$ snmpget -v2c -c public 192.168.1.1 1.3.6.1.2.1.47.1.1.1.1.11.1001
.1.3.6.1.2.1.47.1.1.1.1.11.1001 = STRING: "FCW1139B4SX"

我们将使用 snmpwalk 选项“遍历”接口状态的所有 OID:如果操作状态 (1.3.6.1.1.2.2.2.1.8) 来自 MIB IF-MIB:

$ snmpwalk -v2c -c public 192.168.1.1 1.3.6.1.2.1.2.2.1.8
 .1.3.6.1.2.1.2.2.1.8.1 = INTEGER: up(1)
 .1.3.6.1.2.1.2.2.1.8.10101 = INTEGER: down(2)
 .1.3.6.1.2.1.2.2.1.8.10102 = INTEGER: down(2)
 .1.3.6.1.2.1.2.2.1.8.10103 = INTEGER: down(2)
 .1.3.6.1.2.1.2.2.1.8.10104 = INTEGER: down(2)
 .1.3.6.1.2.1.2.2.1.8.10105 = INTEGER: up(1)
 .1.3.6.1.2.1.2.2.1.8.10106 = INTEGER: down(2)
 .1.3.6.1.2.1.2.2.1.8.10107 = INTEGER: down(2)
 .1.3.6.1.2.1.2.2.1.8.10108 = INTEGER: up(1)

这个结果有什么问题?我们有一些接口处于 UP 状态,有些接口处于 DOWN 状态,但我们只知道索引号(如“.10102”已关闭,而 10105 处于 up 状态)。我们需要找出接口描述,如GigabitEthernet0/4,Vlan100。

要获取接口描述,我们将使用 OID ifDescr (1.3.6.1.2.2.2.1.2):

$ snmpwalk -v2c -c public 192.168.1.1 1.3.6.1.2.1.2.2.1.2
 .1.3.6.1.2.1.2.2.1.2.1 = STRING: Vlan1
 .1.3.6.1.2.1.2.2.1.2.10101 = STRING: GigabitEthernet0/1
 .1.3.6.1.2.1.2.2.1.2.10102 = STRING: GigabitEthernet0/2
 .1.3.6.1.2.1.2.2.1.2.10103 = STRING: GigabitEthernet0/3
 .1.3.6.1.2.1.2.2.1.2.10104 = STRING: GigabitEthernet0/4
 .1.3.6.1.2.1.2.2.1.2.10105 = STRING: GigabitEthernet0/5
 .1.3.6.1.2.1.2.2.1.2.10106 = STRING: GigabitEthernet0/6
 .1.3.6.1.2.1.2.2.1.2.10107 = STRING: GigabitEthernet0/7
 .1.3.6.1.2.1.2.2.1.2.10108 = STRING: GigabitEthernet0/8

假设接口GigabitEthernet0/5,索引号为“.10105”,用于会议室中的设备。现在会议已经结束,出于安全原因,它应该被关闭

SNMP 是如何工作的?了解 MIB、OID、陷阱、轮询、代理 ...

为了关闭接口,我们将使用带有 snmpset 选项的 OID ifAdminStatus (1.3.6.1.2.1.2.2.7):

snmpset -v2c -c private 192.168.1.1 1.3.6.1.2.1.2.2.1.7.10105 i 2
IF-MIB::ifAdminStatus.10105 = INTEGER: down(2)

SNMP 监控软件

SNMP 管理器 (NMS) 是监控软件,用于收集和存储来自代理的有关终端设备的信息。除了收集信息外,管理器还具有图形界面(GUI),您可以在其中检查受监视设备的问题,统计信息和记录。

有很好的监控工具可以完全支持SNMP,但是选择哪一个呢?这取决于您的需求。

如果您需要一个免费且成熟的监控系统来监控整个IT基础架构和服务,那么我建议您使用Zabbix,因为他的100%开源、配置简单、图形化好以及覆盖面范围广。

SNMP 是如何工作的?了解 MIB、OID、陷阱、轮询、代理 ...

其他推荐的是Prometheus与Grafana的组合,或IcingaLibreNMSOpenNMSNagios Core

我上面提到的所有工具都是免费和开源的。我是开源软件的忠实粉丝但是,不得不承认,在商业工具中,PRTG的简单性让我感到惊讶。它实用且用户界面友好,可以在几分钟内安装在Windows上并进行配置-检查,如果开源不是您的选择,可以尝试一下。

结论

简单网络管理协议 (SNMP) 通过实现对网络上的设备(路由器、交换机、打印机等)的集中发现、监视和配置,简化了设备管理。

SNMP是一种几乎普遍支持的,简单,众所周知的免费协议,它帮助我们管理网络设备超过30年。

尽管如此,趋势表明snmp正在远去!

原创文章,作者:运维社区

如若转载,请注明出处:https://blog.kasarit.cn/?p=1040

(0)
上一篇 2022年8月29日 上午10:49
下一篇 2022年8月30日 下午4:22

相关推荐

发表回复

您的电子邮箱地址不会被公开。