Openwrt安装snmp用于远程监测 参考资料: SNMP原理
https://zhuanlan.zhihu.com/p/514433038
https://support.huawei.com/view/contentview!getFileStream.action?mid=SUPE_DOC&viewNid=EDOC1000154667&nid=EDOC1000154667&partNo=j004&type=htm
SNMP学习笔记之SNMPWALK 安装与使用详解
https://cloud.tencent.com/developer/article/1366179
SNMP介绍及使用
https://www.cnblogs.com/chegxy/p/14020233.html
Openwrt安装snmpd 2023.08.21为止,Openwrt的snmpd只支持snmp v1和v2c
在源中关于snmp的包
snmp-mibs
5.8-2
Simple Network Management Protocol (SNMP) is a widely used protocol for monitoring the health and welfare of network equipment (eg. routers), computer equipment and even devices like UPSs. Net-SNMP is a suite of applications used to implement SNMP v1, SNMP v2c and SNMP v3 using both IPv4 and IPv6. . This package contains SNMP MIB-Files.
snmp-utils
5.8-2
Simple Network Management Protocol (SNMP) is a widely used protocol for monitoring the health and welfare of network equipment (eg. routers), computer equipment and even devices like UPSs. Net-SNMP is a suite of applications used to implement SNMP v1, SNMP v2c and SNMP v3 using both IPv4 and IPv6. . This package contains SNMP client utilities: - snmpget - snmpset - snmpstatus - snmptest - snmptrap - snmpwalk
snmpd
5.8-2
Simple Network Management Protocol (SNMP) is a widely used protocol for monitoring the health and welfare of network equipment (eg. routers), computer equipment and even devices like UPSs. Net-SNMP is a suite of applications used to implement SNMP v1, SNMP v2c and SNMP v3 using both IPv4 and IPv6. . This package contains the SNMP agent, dynamically linked.
snmptrapd
5.8-2
Simple Network Management Protocol (SNMP) is a widely used protocol for monitoring the health and welfare of network equipment (eg. routers), computer equipment and even devices like UPSs. Net-SNMP is a suite of applications used to implement SNMP v1, SNMP v2c and SNMP v3 using both IPv4 and IPv6. . This package contains the SNMP notification receiver.
有关snmp的资料 snmp-mibs: 管理信息库MIB(Management Information Base)MIB是一个被管理对象的集合,是NMS同Agent进行沟通的桥梁,可以使网管软件和设备进行标准对接。每一个Agent都维护这样一个MIB库,NMS可以对MIB库中对象的值进行读取或设置。
snmp-utils: snmpwalk是SNMP的一个工具,它使用SNMP的GETNEXT请求查询指定OID(SNMP协议中的对象标识)入口的所有OID树信息,并显示给用户。通过snmpwalk也可以查看支持SNMP协议(可网管)的设备的一些其他信息,比如cisco交换机或路由器IP地址、内存使用率等,也可用来协助开发SNMP功能。包含的命令有 snmpset snmptest snmpwalk snmpget snmpstatus snmptrap
snmpd: 是一个SNMP的守护进程,用于部署在客户机端,可以通过修改/etc/snmp/snmpd.conf文件来配置community(通俗点说就是密码),监听IP及端口及其他内容,你可以使用 sudo /etc/init.d/snmpd restart/start/stop
重启/开启/关闭该进程。
snmptrapd: 用于接收trap的信息,部署在管理端,可以通过修改/etc/snmp/snmptrapd.conf来配置其认证方式,一般使用命令sudo snmptrapd -df -Lo
启动该服务,可以通过检查162端口确认其启动。
安装snmpd openwrt只需要监测的话安装snmpd即可,如果要snmptrap主动通知snmp管理器需要安装snmp-utils。
1 2 opkg update opkg install snmpd
如果出现依赖错误,可以尝试在web里进行安装。 我这里opkg install会出现依赖冲突,但是web安装没有问题。然后问了大雕,以下是大雕的回复. Lean: web 安装默认忽略缺少的依赖 由于web安装过后,opkg install也可以直接安装了,所以当时的报错的依赖忘记贴下来了。那些只是因为需要的依赖版本不同而报错,但web安装完是可以正常使用。
安装完成后,默认配置就可以使用了,默认开启snmp v1和v2c两个版本,可以运行代码获取数据了。
配置snmpd 配置文件在/etc/config/snmpd
原配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 # 配置定义共同体 config com2sec public option secname ro option source default option community public config com2sec private option secname rw option source localhost option community private ······ # 配置定义访问策略 # public_access 对应上面的public,private_access 对应上面的private config access public_access option group public option context none option version any option level noauth option prefix exact option read all option write none option notify none config access private_access option group private option context none option version any option level noauth option prefix exact option read all option write all option notify all
config com2sec
下的参数
1 2 3 4 5 6 7 8 <code>option secname</code> 是访问权限,ro是只读,rw是可读写。 <code>option source</code> 是指定 SNMP 访问策略的来源,default表示你允许来自默认源的 SNMP 请求,即所有网络请求。localhost表示限制 SNMP 访问仅来自本地主机。也可以设置为一个网段,<code>option source 192.168.1.0/24</code>,只允许这个网段内的请求。 <code>option community</code> 是用于指定 SNMP 共同体字符串的设置。SNMP 共同体字符串实际上就是一个密码或标识符,用于在 SNMP 请求中进行基本的身份验证。可以修改,我一般直接看作密码。public与private是两种访问权限角色。 后面还有<code>config com2sec6 public6</code>我没有贴上去,这是用于 IPv6 的 SNMP 共同体字符串,不需要可以直接注释掉。
config access
下的参数
1 2 3 4 5 6 7 8 9 10 #以下解释来自ChatGPT3.5 config access private_access: 这个配置块是用于定义SNMP访问控制的配置部分。 option group private: 这个选项指定了组的名称,通常与组的访问权限相关。 option context none: 这个选项设置了SNMP上下文,通常用于区分不同的SNMP命名空间。 option version any: 这个选项指定了允许的SNMP版本。在这个例子中,允许任何版本的SNMP访问。 option level noauth: 这个选项指定了安全级别。在这个例子中,安全级别被设置为"noauth",表示没有认证和加密。 option prefix exact: 这个选项设置了OID前缀匹配方式。在这个例子中,前缀匹配方式被设置为"exact",表示精确匹配。 option read all: 这个选项指定了读取权限,允许访问所有的SNMP信息。 option write all: 这个选项指定了写入权限,允许修改所有的SNMP信息。 option notify all: 这个选项指定了通知权限,允许发送所有类型的SNMP通知。
网上关于openwrt的snmpd配置文件信息很少,经过我的一些尝试发现option version
我设置为any或者v1没有问题。但设置v2或者v2c则无法正常获取参数。但是这样就会导致snmpv1和snmpv2c同时存在,两种版本都可以获取到信息,虽然本来v2c安全性也一般。
1 2 3 4 5 6 7 8 # snmp系统配置 config system option sysLocation 'office' #用于设置设备所在的位置或位置描述,可以获取设备位置信息。 option sysContact 'bofh@example.com' #用于设置设备管理员或联系人的联系信息,可以获取设备联系人信息。 option sysName 'HeartOfGold' #设备的名称,可以获取设备名称 # option sysServices 72 # option sysDescr 'adult playground' # option sysObjectID '1.2.3.4'
给snmp增加CPU温度 1 2 3 4 config exec option name CPUtemp option prog /bin/cat option args /sys/class/thermal/thermal_zone0/temp
测试snmp v2c版本 snmpwalk -v2c -c public -v 1 10.10.0.1v1版本 snmpwalk -c public -v 1 10.10.0.1
反馈
1 2 3 4 5 6 7 8 iso.3.6.1.2.1.1.1.0 = STRING: "Linux D2550 5.15.58 #0 SMP Mon Aug 1 02:46:32 2022 x86_64" iso.3.6.1.2.1.1.2.0 = OID: iso.3.6.1.4.1.8072.3.2.10 iso.3.6.1.2.1.1.3.0 = Timeticks: (16020) 0:02:40.20 iso.3.6.1.2.1.1.4.0 = STRING: "bofh@example.com" iso.3.6.1.2.1.1.5.0 = STRING: "HeartOfGold" iso.3.6.1.2.1.1.6.0 = STRING: "office" iso.3.6.1.2.1.1.8.0 = Timeticks: (0) 0:00:00.00 ······
最后的snmpd配置文件 一些不重要的默认注释就删除了
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 config agent option agentaddress UDP:161,UDP6:161 config agentx option agentxsocket /var/run/agentx.sock config com2sec public option secname ro option source default option community public config com2sec private option secname rw option source default option community private # config com2sec6 public6 # option secname ro # option source default # option community public # config com2sec6 private6 # option secname rw # option source localhost # option community private config group public_v1 option group public option version v1 option secname ro config group public_v2c option group public option version v2c option secname ro config group public_usm option group public option version usm option secname ro config group private_v1 option group private option version v1 option secname rw config group private_v2c option group private option version v2c option secname rw config group private_usm option group private option version usm option secname rw config view all option viewname all option type included option oid .1 config access public_access option group public option context none option version any option level noauth option prefix exact option read all option write none option notify none config access private_access option group private option context none option version any option level noauth option prefix exact option read all option write all option notify all config system option sysLocation 'office' option sysContact 'NaZawsze' option sysName 'd2550-op' # option sysServices 72 # option sysDescr 'adult playground' # option sysObjectID '1.2.3.4' config exec option name filedescriptors option prog /bin/cat option args /proc/sys/fs/file-nr # option miboid 1.2.3.4 config engineid # option engineid 'LEDE' option engineidtype '3' option engineidnic 'eth0' # config trapsess 'trapsess' # option trapsess '-v 3 -e 0x80001f88808c18d3f7b0000 -u trapuser -a MD5 -A admi config snmpd general option enabled '1' # list network ' wan' # CPUtemp config exec option name CPUtemp option prog /bin/cat option args /sys/class/thermal/thermal_zone0/temp
最后的CPUtemp 为.1.3.6.1.4.1
iso.3.6.1.4.1.2021.8.1.3.2 = STRING: “/bin/cat /sys/class/thermal/thermal_zone0/temp” iso.3.6.1.4.1.2021.8.1.101.2 = STRING: “44288”
注意 : 有些软路由显示的是硬盘温度而不是CPU温度,而硬路由Openwrt基本上都是CPU温度。 另外使用cat
命令获取出来的是string类型,而cat /sys/class/thermal/thermal_zone0/temp | grep -Eo '[0- 9]+'
通过正则表达式输出的是数值型,但遗憾的是我把这条命令加入CPUtemp的option args不起作用。可能需要写一下脚本,然后通过option args调用脚本可能获取到的是数值类型,我这里没有尝试过。但是接入Zabbix可以在模板的监控项目下的预处理实现转换为数值型,下一篇会说明。
部署完成