这个世界上总有些你不喜欢,但是不得不用的东西,SNMP就是其中之一……
简介
SNMP,Simple Network Management Protocol,简单网络管理协议,由于过于古老,以至于以今天的眼光来看,不仅不简单,而且很难用: )
虽然难用,但SNMP提供了 key-value
形式的结构化的数据,跟在实际中几乎都是以字符串来表示 key
的 json
没得比,但也强过你通过CLI去处理文本数据。
也因此,在其它的那些稀奇古怪的新玩意还没有真正变得“好用”之前,我们仍然离不开SNMP。
工具
工欲善其事,必先利其器。这话你们都听得耳朵起茧子了。
就好像你测试REST接口会用到Postman一样,测试设备的SNMP接口,我们也需要一个好用的工具来提高效率,这个工具就是ManageEngine推出的一款免费的工具——MIB Browser
P.S. Management Information Base,我的理解是,它就是网络设备上内置的一个数据,我们从厂商获取到的MIB文件,相当于这个东西的说明书,而MIB Browser实际上就是一个能解析这个说明书的工具,把它图形化的展示出来
下载连接戳这里 https://www.manageengine.com/products/mibbrowser-free-tool/
请注意,不要把它安装在C盘(系统盘),尤其是WIN10,会因为权限问题无法正常运行,这个工具的外壳做的比较粗糙……(本来就是免费的也就不能要求太高了……)
程序安装完成后的图标长这样,它实际上对应的是个bash脚本
所以运行的时候会弹出个黑框框,如果你关闭黑框框,程序也就停止了
如果你的电脑是高分屏,打开它会有些看不清字,那么只要这样操作——
在你安装程序的目录下(比如我这里是V: Protram Files
)按如下路径找到java.exe
V:Program FilesManageEngineMibBrowser Free Tooljrebin
右键属性,选择兼容性选项卡,然后选择更改高DPI设置
进一步选择系统(增强)来替代默认设置,程序的显示就会正常很多了
P.S. 因为真正运行的实际上是java.exe
,所以就必须要改它才有用
每次打开这个工具看到的都是下面这个界面,当然它其实是可以设置配置文件的,只不过……不是太好用所以还是算了
最左侧是你加载的MIB文件,如前所述,它其实是帮你把复杂的SNMP说明书给解析了,当你加载一个MIB文件,它会把所有依赖的MIB都加载一遍,如果找得到的话(优先从加载MIB文件的那个目录里找)
P.S. 把所有MIB文件放在一起就好了,我的习惯是,我会找到某个设备,比如路由器所支持的MIB列表,然后把它们都放在一个文件夹里,这样就一定不会漏了……
右侧是你要访问的目标的信息,如果你选择了SNMPv3,那么Host和Port会变成灰色,Community和Write Community实际上变得没什么意义,这些后面的例子里我们再详细介绍,现在我们以Cisco IOS-XE Router为例,看看SNMP在设备上的一些配置问题。
P.S. 不同平台,不同品牌的设备的SNMP配置都有所不同,所以,详参设备配置手册或咨询厂家……
SNMP在Cisco IOS-XE Router上的配置
SNMPv2的配置,网工们都很熟了——
snmp-server community RO RO
这条CLI后面可以挂ACL,强烈建议挂,否则一旦你的community被人知道了,或者被猜到了,后果不堪设想
R1(config)# snmp-server community RO ro ?
<1-99> Std IP accesslist allowing access with this community string
<1300-1999> Expanded IP accesslist allowing access with this community
string
WORD Access-list name
ipv6 Specify IPv6 Named Access-List
<cr> <cr>
当然,更科学地做法是配置SNMPv3,支持认证和加密。我们一般不玩加密,因为太过消耗设备的性能,加密可以在其它地方做,典型的,你可以确保经过公共网络的流量总是被IPSec加密的。
IOS-XE的SNMPv3基于视图(VIEW)来授权,你需要把一个VIEW绑定到一个Group上。
你可以基于Group来挂ACL做进一步限制,也可以基于Group下的某个USER来挂ACL做限制,都行,看你喜好,如下的例子中没挂ACL,这当然是不推荐的——
snmp-server view READ-VIEW internet included
snmp-server group network v3 auth read READ-VIEW
snmp-server user monitor network v3 auth md5 cisco
注意snmp-server group network v3 auth
,这里有三个选项——
R1(config)#snmp-server group network v3 ?
auth group using the authNoPriv Security Level
noauth group using the noAuthNoPriv Security Level
priv group using SNMPv3 authPriv security level
如果是只认证,记得选auth,而不要选priv,priv是一定要认证+加密的
关于这个,Cisco的Configuration Guide里给了一张表
只有正确对应,才不会报错,否则设备会返回一些错误,你可以根据返回的错误,来检查自己的SNMP的配置和客户端传入的设置是否一致,比如,如果你的Group配置的是priv,意味着客户端既要提供认证,也需要加密,而如果客户端选择的是authNoPriv,那么你就会收到Authorization
的错误
最后,生产环境一定记得挂ACL
R1(config)#snmp-server user monitor network v3 auth md5 cisco access ?
<1-99> Std IP accesslist allowing access with this username
WORD Access-list name
ipv6 Specify IPv6 Named Access-List
说一下视图
视图的配置,代表该Group所能读取的数据的级别,如果你希望能读取所有的数据,那么这里可以设置为internet
,虽然它不是根,但是也没有和它平级的,几乎所有的MIB在它之下,详参OID Tree (图片随便搜一下就有……)
当然,如果你的VIEW设置为其它的字符串,比如private,大概率你就只能读到private下面的东西了(我猜的,我没验证过)
P.S. 从图上可以看出,private下面都是厂家私有的一些MIB
例子——CDP
以CDP为例,首先,我们先加载CDP的MIB——CISCO-CDP-MIB
加载.my
的文件,另外两个文件实际上是MIB Browser生成的……
如果你用文本编辑器打开这个.my
的文件,实际上可以看到它的依赖关系——
嗯,反正这里这些都是它依赖的……
MIB Browser会自动加载它们,如果找不到,会给你报个错
加载完MIB,配置一下MIB Browser
界面上选择Edit-->Settings
——
默认是v1,这里我选了v3,然后选择Add添加一个主机(也就是网络设备或者其它什么支持SNMP的东东……)
P.S. 这里切一下英文输入法,否则会有些小问题影响操作
点选Apply的时候,它会自动去测试你的配置,如果有问题,是会报错的
然后我们一层层的去展开CDP那个MIB……见鬼的老长了好么
嗯,还没完,继续展开……
好了,看到绿叶图标就是展开完了,有两种,一种就是个绿叶,一种带个叉叉,带叉叉的意思是只能GET不能SET,不带叉叉的绿色是可以SET的,当然,你要有对应的权限才行,在IOS-XE Router的SNMPv3中,这个权限也是靠VIEW控制的(其它品牌和平台可不一定哦……)
我们获取一下启动了CDP的接口看看,也就是cdpInterfaceEnable
这个货色
获取到的结果会让你一脸懵逼——
通过这个接口看到的并不是真正启动了CDP的接口,而是启动了CDP的接口的……索引?好像是的。
如果你要知道cdpInterfaceEnable
到底对应了个啥,你就需要去读另一个接口——cdpInterfaceName
所以,很多时候SNMP取出来的数据都是这样很底层的数据,为了获取一些信息,常常需要读取多个SNMP接口,然后在程序中做一些处理。
一个快速找到Cisco的MIB文件和MIB文件支持的List的连接……
ftp://ftp.cisco.com/pub/mibs/supportlists/
没错,一个FTP服务器,里面存了各个系列设备的supportlists,而每个lists文件里每个支持的MIB实际上是个超链接,可以直接点击下载……
本篇就先介绍到这了,虽然不喜欢,但是不能不用。