SNMP
本页介绍 MikroTik RouterOS 中的 SNMP 配置,涵盖启用该服务、联系人信息和 trap 配置等常规设置、SNMPv1/2c/3 的 community 访问权限,以及监控缓慢服务或 OID 时关于超时的警告。
SNMP
Simple Network Management Protocol (SNMP) 是一种互联网标准协议,用于监控和管理 IP 网络上的设备。它可以与 Cacti、MRTG 或 The Dude 等监控工具一起使用,以收集、可视化系统数据并绘制图表。
SNMP 写访问仅对选定的 OID 可用。对于支持的 OID,可使用 SNMP v1、v2c 或 v3 进行写操作。SNMP 回复通过接收请求的同一接口发送,确保响应使用与向路由器发送的原始请求中目的地址相同的源地址。

警告
SNMP 服务从系统上运行的各种服务收集数据。如果 SNMP 与这些服务之一的通信耗时超过预期,系统可能会记录诸如 timeout while waiting for program 或 SNMP did not get OID data within the expected time, ignoring OID 之类的警告。每个服务的超时为 30 秒,路由服务最长可达 5 分钟。在此类超时之后,受影响的服务可能会暂时停止响应 SNMP 数据请求,然后再尝试再次检索所请求的信息。
这些警告并不表示 SNMP 服务本身存在问题。在大多数情况下,它们发生在使用 SNMP 监控缓慢或负载过重的服务时。当监控不适合通过 SNMP 轮询的 OID 时,也可能出现这些警告。在这种情况下,推荐的解决方案是将这些 OID 从监控工具配置中排除。
快速配置
要在 RouterOS 中启用 SNMP:
[admin@MikroTik] /snmp> print
enabled: no
contact:
location:
engine-id:
trap-community: (unknown)
trap-version: 1
[admin@MikroTik] /snmp> set enabled yes
您还可以在上述设置中指定管理联系人信息。所有 SNMP 数据将对在 community 菜单中配置的 community 可用。
通用属性
Sub-menu: /snmp
此子菜单允许启用 SNMP 并配置常规设置。
| Property | Description |
|---|---|
| contact (string; Default: "") | 联系人信息 |
| enabled (yes | no; Default: no) | 用于禁用/启用 SNMP 服务 |
| engine-id (string; Default: "") | 对于 SNMP v3,用作标识符的一部分。您可以手动配置它,否则将分配一个随机值 |
| location (string; Default: "") | 位置信息 |
| trap-community (string; Default: public) | 在 community 菜单中配置的、发送 trap 时使用的 community。 |
| trap-generators (interfaces | start-trap; Default: ) | 什么操作将生成 trap:interfaces - 接口变化;start-trap - SNMP 服务器在路由器上启动temp-exception - 当温度达到 100c 时发送 trap(或 /system/health 中为 cpu-overtemp-threshold 配置的值) |
| trap-interfaces (string | all; Default: ) | trap 将发送出去的接口列表。 |
| trap-target (list of IP/IPv6; Default: 0.0.0.0) | 必须接收 trap 的 SNMP 数据收集器的 IP(IPv4 或 IPv6)地址 |
| trap-version (1|2|3; Default: 1) | 用于 trap 的 SNMP 协议版本 |
| src-address (IPv4 or IPv6 address; Default: ::) | 强制路由器对所有 SNMP 消息始终使用相同的 IP 源地址 |
| vrf (VRF name; default value: main) | 设置服务用于监听传入连接的 VRF |
说明
engine-id 字段保存 engine-id 的后缀值,通常 SNMP 客户端应该能够像从路由器读取的 SNMP 值那样检测到该值。然而,也可能并非如此。在这种情况下,engine-ID 值必须按此规则设置:<engine-id prefix> + <hex-dump suffix>,例如,如果您将 1234 设置为后缀值,则必须提供 80003a8c04 + 31323334,合并后的十六进制(结果)为 80003a8c0431323334
Community 属性
Sub-menu: /snmp/community
此子菜单允许为 SNMP 数据设置访问权限。
v1 和 v2c 几乎没有安全性,仅有明文 community 字符串("username")以及按 IP 地址限制访问的能力。
在生产环境中,应使用 SNMP v3,因为它提供安全性 - 使用 MD5/SHA1 的授权(用户 + 密码),以及使用 DES 和 AES 的加密。
[admin@MikroTik] /snmp/community> print value-list
name: public
address: 0.0.0.0/0
security: none
read-access: yes
write-access: no
authentication-protocol: MD5
encryption-protocol: DES
authentication-password: *****
encryption-password: *****
危险
默认设置只有一个名为 public 的 community,且没有任何额外的安全设置。这些设置应视为不安全,应根据所需的安全配置文件进行调整。
属性
| Property | Description |
|---|---|
| address (IP/IPv6 address; Default: 0.0.0.0/0) | 允许连接到 SNMP 服务器的地址 |
| authentication-password (string; Default: "") sensitive | 用于认证与服务器连接的密码(SNMPv3)。密码长度必须至少为 8 个字符。 |
| authentication-protocol (MD5 | SHA1; Default: MD5) | 用于认证的协议(SNMPv3) |
| encryption-password (string; Default: "") sensitive | 用于加密的密码(SNMPv3)。密码长度必须至少为 8 个字符。 |
| encryption-protocol (DES | AES; Default: DES) | 用于加密通信的加密协议(SNMPv3)。AES(参见 rfc3826)自 v6.16 起可用。 |
| name (string; Default: ) | SNMP community 的名称。 |
| read-access (yes | no; Default: yes) | 是否为该 community 启用读访问 |
| security (authorized | none | private; Default: none) | 安全级别:none - 不需要加密或认证(noAuthNoPriv)authorized - 不需要加密,但需要认证(authNoPriv)private - 同时需要加密和认证(authPriv) |
| write-access (yes | no; Default: no) | 是否为该 community 启用写访问 |
管理信息库 (MIB)
Management Information Base (MIB) 是由 agent 维护、manager 可以查询的信息数据库。您可以从这里下载最新的 MikroTik RouterOS MIB 文件:https://mikrotik.com/download/tools
RouterOS 中使用的 MIB:
- MIKROTIK-MIB
- MIB-2
- HOST-RESOURCES-MIB
- IF-MIB
- IP-MIB
- IP-FORWARD-MIB
- IPV6-MIB
- BRIDGE-MIB
- DHCP-SERVER-MIB
- CISCO-AAA-SESSION-MIB
- ENTITY-MIB
- UPS-MIB
- SQUID-MIB
对象标识符 (OID)
每个 OID 标识一个可通过 SNMP 读取的变量。尽管 MIB 文件包含所有需要的 OID 值,您也可以在任意菜单级别使用 print oid 命令在控制台中打印单个 OID 信息:
[admin@MikroTik] /interface> print oid
Flags: D - dynamic, X - disabled, R - running, S - slave
0 R name=.1.3.6.1.2.1.2.2.1.2.1 mtu=.1.3.6.1.2.1.2.2.1.4.1
mac-address=.1.3.6.1.2.1.2.2.1.6.1 admin-status=.1.3.6.1.2.1.2.2.1.7.1
oper-status=.1.3.6.1.2.1.2.2.1.8.1 bytes-in=.1.3.6.1.2.1.2.2.1.10.1
packets-in=.1.3.6.1.2.1.2.2.1.11.1 discards-in=.1.3.6.1.2.1.2.2.1.13.1
errors-in=.1.3.6.1.2.1.2.2.1.14.1 bytes-out=.1.3.6.1.2.1.2.2.1.16.1
packets-out=.1.3.6.1.2.1.2.2.1.17.1 discards-out=.1.3.6.1.2.1.2.2.1.19.1
errors-out=.1.3.6.1.2.1.2.2.1.20.1
Traps
SNMP trap 使路由器能够通过发送 trap 来通知数据收集器接口变化和 SNMP 服务状态变化。可以发送带有安全功能的 trap,以支持 SNMPv1(无安全)、SNMPv2 变体,以及带加密和授权的 SNMPv3。
对于 SNMPv2 和 v3,您必须将一个适当配置的 community 设置为 trap-community,以启用所需功能(密码或加密/授权)。
SNMP 写
SNMP 写允许通过 SNMP 请求更改路由器配置。当启用 SNMP 和写访问时,请考虑保护对路由器或路由器 SNMP 的访问。
要通过 SNMP 请求更改设置,请使用以下命令允许 SNMP 为所选 community 进行写操作。
/snmp/community/set <number> write-access=yes
系统身份
可以通过 SNMP set 命令更改路由器系统身份。
snmpset -c public -v 1 192.168.88.1 1.3.6.1.2.1.1.5.0 s New_Identity
- snmpset - 用于发送 SNMP SET 请求以在网络实体上设置信息的 SNMP 应用程序;
- public - 路由器的 community 名称;
- 192.168.88.1 - 路由器的 IP 地址;
- 1.3.6.1.2.1.1.5.0 - 路由器身份的 SNMP 值;
上面的 SNMPset 命令等同于以下 RouterOS 命令:
/system/identity/set identity=New_Identity
重启
可以通过 SNMP set 命令重启路由器。您需要为 reboot SNMP 设置设置一个不等于 0 的值。
snmpset -c public -v 1 192.168.88.1 1.3.6.1.4.1.14988.1.1.7.1.0 s 1
- 1.3.6.1.4.1.14988.1.1.7.1.0,路由器重启的 SNMP 值。
- s 1,用于设置值的 snmpset 命令,该值不应等于 0。
Reboot SNMPset 命令等同于以下 RouterOS 命令:
/system/reboot
运行脚本
当您需要为脚本的 SNMP 设置设置值时,SNMP 写允许从 system script 菜单在路由器上运行脚本。
snmpset -c public -v 1 192.168.88.1 1.3.6.1.4.1.14988.1.1.8.1.1.3.X s 1
- X,脚本编号,编号从 1 开始。
- s 1,用于设置值的 snmpset 命令,该值不应等于 0。
RouterOS 上的相同命令:
/system/script> print
Flags: I - invalid
0 name="test" owner="admin" policy=ftp,reboot,read,write,policy,
test,winbox,password,sniff last-started=1970-01-01
01:31:57 run-count=23 source=:beep
/system/script/run 0
危险
SNMP 限于 *ftp,reboot,*read,write,test,romon 脚本策略。如果脚本具有超出 *ftp,reboot,*read,write,test,romon 的策略 - 那么该脚本将不会被执行。请确保您的脚本不超过上述策略。
使用 GET 运行脚本
可以通过脚本 OID 的 SNMP GET 请求运行 /system/scripts(自 6.37 起)。为此,需要一个具有写权限的 SNMP community。由于该表是动态的,脚本的 OID 可以通过 SNMPWALK 命令获取。
添加脚本
/system/script
add name=script1 owner=admin policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="/sy reboot "
add name=script2 owner=admin policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="[:put output]"
获取脚本 OID 表
$ snmpwalk -v2c -cpublic 192.168.88.1 1.3.6.1.4.1.14988.1.1.8
iso.3.6.1.4.1.14988.1.1.8.1.1.2.1 = STRING: "script1"
iso.3.6.1.4.1.14988.1.1.8.1.1.2.2 = STRING: "script2"
iso.3.6.1.4.1.14988.1.1.8.1.1.3.1 = INTEGER: 0
iso.3.6.1.4.1.14988.1.1.8.1.1.3.2 = INTEGER: 0
运行脚本使用表 18
$ snmpget -v2c -cpublic 192.168.88.1 1.3.6.1.4.1.14988.1.1.18.1.1.2.2
iso.3.6 .1.4.1.14988.1.1.18.1.1.2.2 = STRING: "output"
危险
SNMP 限于 *ftp,reboot,*read,write,test,romon 脚本策略。如果脚本具有超出 *ftp,reboot,*read,write,test,romon 的策略 - 那么该脚本将不会被执行。请确保您的脚本不超过上述策略。