1、前言

SNMP,即简单网络管理协议,是目前广泛采用的一种,实现对IT基础设施进行统一监控、管理的一种网络协议。随着诸如机房、数据中心等建设日益复杂,对IT设备的统一管理成为必须所具备的一个模块,因此为解决这个需求,SNMP出现在大家的视野中。本文将从Linux+SNMP+zabbix这样的一个简单实验来阐述SNMP的一些基础知识。

2、SNMP基本概念

2.1、SNMP分类

2.1.1、按照版本划分

SNMP分为v1、v2c和v3三个版本,这三个版本主要是管理的粗细程度和SNMP客户端与服务端之间验证方式的区别,可以用以下列表概括:

  • SNMPv1:适用于较小规模网络,基于团体字进行明文验证,安全性较低,支持错误码少;
  • SNMPv2c:适用于较大规模网络,基于团体字进行明文验证,安全性较低,在v1基础上扩充更多错误码;
  • SNMPv3:适用于不同规模网络,基于安全用户名或安全上下文进行加密验证,安全性较高,错误码支持较多。

目前在实际环境内,考虑到运维难度等方面的原因,使用v2c版本的情况是最多的。

2.1.2、按照SNMP模块类型划分

  • agent:运行在被管理设备上的一个SNMP代理模块;
  • NMS:管理IT设备的网络管理系统,如:zabbix、weAdmin和华为eSight等。

2.2、SNMP协议中PDU报文的交互

【本小节内容来源:华为AR接入路由器产品文档】

zabbix手动添加snmp主机 zabbix snmp v3配置_网络

  • get-request:从代理进程处提取一个或多个参数值。
  • get-next-request:从代理进程处提取紧跟当前参数值的下一个参数值。
  • set-request:设置代理进程的一个或多个参数值。
  • get-response:返回的一个或多个参数值。这个操作是由代理进程发出的,它是对前面3种操作的响应。
  • trap:代理进程主动发出的报文,通知管理进程有某些事件发生

前面3种操作由NMS向Agent发出,后面2种操作由Agent向NMS发出。

2.3、MIB基本介绍

MIB,即管理信息数据库,是由agent维护的,用于被NMS读取的一些数据对象。通常情况下,NMS所展现出的,例如CPU、内存占用率等数值都是读取自MIB。

MIB是一种树状的数据结构,它包含不同标准组织所定义数据对象,较为完整的树状图如下所示:

zabbix手动添加snmp主机 zabbix snmp v3配置_zabbix手动添加snmp主机_02


通常情况下,我们以对象后面的数字来定义某一个数据对象,这被称为OID。SNMP协议所管理的对象,是图中internet节点(表示为1.3.6.1或iso.3.6.1)的下面所有部分(图中阴影部分),这一点可以在运行SNMP的Linux设备中,通过snmpwalk命令体现出来,而对于其他设备,例如运行SNMP的路由交换设备,则可以用wireshark工具查看SNMP协议交互的PDU报文体现,如下图所示:

zabbix手动添加snmp主机 zabbix snmp v3配置_网络_03


zabbix手动添加snmp主机 zabbix snmp v3配置_zabbix手动添加snmp主机_04

站在SNMP运维的角度,MIB可分为公有MIB和私有MIB两大部分,公有MIB是绝大多数IT设备都必须支持的标准,而私有MIB则定位在MIB树状结构的private(1.3.6.1.4)部分,如1.3.6.1.4.1.2代表的是IBM公司的私有节点,1.3.6.1.4.1.9代表的是思科公司的私有节点。

2.4、带外管理和带内管理

在对IT设备进行管理的方式上,大体上分为带外管理和带内管理两种。其中带外管理指的是管理流量业务流量物理隔离,走不同的网络链路;而带内管理指的是管理流量和业务流量共同使用同一条网络链路。
绝大多数情况下,采用的方式都是带外管理,带外管理的优点在于管理流量不会占用业务的网络带宽资源,另外在业务网络中断的情况下,独立的带外管理链路可以作为远程维护的一个“逃生通道”。

3、实验

3.1、实验拓扑与zabbix官方安装方法链接

本文将采用三台Linux服务器来进行实验,其中一台Linux服务器已经部署了zabbix,另外两台是被zabbix管理的Linux服务器,具体的部署步骤可以参阅zabbix官网,并根据实际的Linux发行版进行安装步骤,相关链接为:https://www.zabbix.com/cn/download

zabbix手动添加snmp主机 zabbix snmp v3配置_运维_05

3.2、配置SNMPv2c(以UOS企业版/Ubuntu/debian为例)

(1)输入“sudo apt install snmpd”命令,在debian系Linux上安装snmpd;
(2)输入“sudo vim /etc/snmp/snmpd.conf”命令编辑配置文件,进行下列修改:
找到agentaddress字段,将IP地址从127.0.0.1修改为0.0.0.0

zabbix手动添加snmp主机 zabbix snmp v3配置_运维_06


找到“view systemonly included”字段,根据实际情况添加所需要监控的OID数值,通常情况下,为方便配置,都是在该位置添加view systemonly included .1这样的配置”

zabbix手动添加snmp主机 zabbix snmp v3配置_IT_07


(3)SNMP的配置文件修改完成后,输入命令“systemctl restart snmpd”重启SNMP服务,重启完成后,配置生效;

zabbix手动添加snmp主机 zabbix snmp v3配置_IT_08


(4)通过命令”snmpwalk -v 2c -c public 192.168.68.139 .1”测试SNMP的MIB能否通过192.168.68.139这个地址读取到,如果读取到,则说明SNMP配置无误;

zabbix手动添加snmp主机 zabbix snmp v3配置_运维_09


(5)登录zabbix,选择“配置—>主机”,然后选择“创建主机”;

zabbix手动添加snmp主机 zabbix snmp v3配置_运维_10


(6)随后,在弹出的对话框的“主机”选项卡中,根据实际情况填入如下信息

zabbix手动添加snmp主机 zabbix snmp v3配置_运维_11


(7)在对话框的模板选项卡中添加Linux的SNMP模板,并保存;

zabbix手动添加snmp主机 zabbix snmp v3配置_linux_12


(8)等待一段时间后,发现“SNMP”标志变为绿色后,则表示SNMP所有配置完成并对接成功;

zabbix手动添加snmp主机 zabbix snmp v3配置_linux_13

3.3、配置SNMPv3(以UOS欧拉版、龙晰版/openEuler/CentOS为例)

(1)输入命令“sudo yum install net-snmp-utils net-snmp”安装SNMP服务;

(2)输入命令“systemctl stop snmpd”确保SNMP的服务处于停止的状态;

(3)输入命令“net-snmp-create-v3-user -ro -A authpasswd -a MD5 -X privpasswd -x DES yanmuhuan”设置SNMPv3的密码、完整性校验方式、加密密钥、加密方式和安全用户名等(需注意的是,debian系Linux的SNMP并不带有net-snmp-create-v3-user命令,如要使用,则需要通过命令“sudo apt install libsnmp-dev”额外安装libsnmp-dev);

zabbix手动添加snmp主机 zabbix snmp v3配置_网络_14


(4)”net-snmp-create-v3-user”命令配置成功的反馈如下:

zabbix手动添加snmp主机 zabbix snmp v3配置_运维_15

(5)输入命令“systemctl start snmpd”重新启动SNMP服务;

(6)输入命令“snmpwalk -v 3 -u yanmuhuan -a MD5 -A authpasswd -x DES -X privpasswd -l authPriv 192.168.68.136”,验证SNMP是否配置成功,如果配置成功,则会表现如下:

zabbix手动添加snmp主机 zabbix snmp v3配置_IT_16


(7)配置zabbix的部分和配置SNMPv2c的部分大体相同,只不过在添加主机时,弹出的对话框应选择SNMPv3,并做如下配置,注意模板仍旧选择Linux的SNMP模板:

zabbix手动添加snmp主机 zabbix snmp v3配置_运维_17


zabbix手动添加snmp主机 zabbix snmp v3配置_zabbix手动添加snmp主机_18


上图中,zabbix面板出现了安全级别这样的一个选项,该项有三个选项可供选择,分别为noAuthNoPriv(不认证不加密)、authNoPriv(认证但不加密)和authPriv(既认证又加密),此处我们选择authPriv。

(8)所有配置完成后,等待一段时间,直到SNMP标志变为绿色。

zabbix手动添加snmp主机 zabbix snmp v3配置_运维_19

4、注意事项

4.1、通用环境下

(1)在根据zabbix官方网站安装zabbix时,应该尽可能使用新的普通版本或新的LTS版本,否则将很可能出现zabbix和数据库版本不一致的情况,从而安装失败。这是因为所有Linux公网上的软件仓库都是该Linux发行版的最新版本,此时如果使用旧版zabbix,就会因为数据库版本过新而不兼容;

(2)配置SNMPv3的密码时,位数默认不要少于8位数,否则将出现以下错误:

zabbix手动添加snmp主机 zabbix snmp v3配置_运维_20


(3)要保证被管理设备的161端口可以正常访问。

4.2、针对部分最小化安装的Linux发行版(如UOS企业版)在内网环境且没有软件仓库的情况下

针对这样的情况,通行的做法是,使用另一台同CPU架构且可以连接互联网的主机,安装同版本操作系统后,来拉取SNMP的安装包和依赖。需要注意的是,部分Linux发行版(如UOS企业版)在选择最小化安装和基本安装两种方式下,系统所自带的依赖是不同的,因此,如果需要在最小化安装的Linux系统上离线安装SNMP,那么用于在线拉取的Linux也应该是最小化安装,否则在最小化系统上进行离线安装时,将出现依赖不全的情况。