Linux

SNMP - 此 OID 的此代理上沒有可用的此類對象

  • August 22, 2018

我在 CentOS 7 最小安裝中安裝了一個 snmpd 用於系統參數搜尋,例如:

snmpget -v 2c -c public 127.0.0.1 .1.3.6.1.2.1.2.2.1.2

對於上述命令,我得到以下結果:

IF-MIB::ifDescr = No Such Object available on this agent at this OID

當我執行:

snmpwalk -v 2c -c public 127.0.0.1

檢查 IF-MIB 是否由 snmpd 載入,我得到以下結果:

    SNMPv2-MIB::sysDescr.0 = STRING: Linux vm_test.whatever.com 3.10.0-862.6.3.el7.x86_64 #1 SMP Tue Jun 26 16:32:21 UTC 2018 x86_64
    SNMPv2-MIB::sysObjectID.0 = OID: NET-SNMP-MIB::netSnmpAgentOIDs.10
    DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (90641) 0:15:06.41
    SNMPv2-MIB::sysContact.0 = STRING: Root <root@localhost> (configure /etc/snmp/snmp.local.conf)
    SNMPv2-MIB::sysName.0 = STRING: vm_test.whatever.com
    SNMPv2-MIB::sysLocation.0 = STRING: Unknown (edit /etc/snmp/snmpd.conf)
    SNMPv2-MIB::sysORLastChange.0 = Timeticks: (4) 0:00:00.04
    SNMPv2-MIB::sysORID.1 = OID: SNMP-MPD-MIB::snmpMPDCompliance
    SNMPv2-MIB::sysORID.2 = OID: SNMP-USER-BASED-SM-MIB::usmMIBCompliance
    SNMPv2-MIB::sysORID.3 = OID: SNMP-FRAMEWORK- MIB::snmpFrameworkMIBCompliance
    SNMPv2-MIB::sysORID.4 = OID: SNMPv2-MIB::snmpMIB
    SNMPv2-MIB::sysORID.5 = OID: TCP-MIB::tcpMIB
    SNMPv2-MIB::sysORID.6 = OID: IP-MIB::ip
    SNMPv2-MIB::sysORID.7 = OID: UDP-MIB::udpMIB
    SNMPv2-MIB::sysORID.8 = OID: SNMP-VIEW-BASED-ACM-MIB::vacmBasicGroup
    SNMPv2-MIB::sysORID.9 = OID: SNMP-NOTIFICATION-MIB::snmpNotifyFullCompliance
    SNMPv2-MIB::sysORID.10 = OID: NOTIFICATION-LOG-MIB::notificationLogMIB
    SNMPv2-MIB::sysORDescr.1 = STRING: The MIB for Message Processing and Dispatching.
    SNMPv2-MIB::sysORDescr.2 = STRING: The management information definitions for the SNMP User-based Security Model.
    SNMPv2-MIB::sysORDescr.3 = STRING: The SNMP Management Architecture MIB.
    SNMPv2-MIB::sysORDescr.4 = STRING: The MIB module for SNMPv2 entities
    SNMPv2-MIB::sysORDescr.5 = STRING: The MIB module for managing TCP implementations
    SNMPv2-MIB::sysORDescr.6 = STRING: The MIB module for managing IP and ICMP implementations
    SNMPv2-MIB::sysORDescr.7 = STRING: The MIB module for managing UDP implementations
    SNMPv2-MIB::sysORDescr.8 = STRING: View-based Access Control Model for SNMP.
    SNMPv2-MIB::sysORDescr.9 = STRING: The MIB modules for managing SNMP Notification, plus filtering.
    SNMPv2-MIB::sysORDescr.10 = STRING: The MIB module for logging SNMP Notifications.
    SNMPv2-MIB::sysORUpTime.1 = Timeticks: (4) 0:00:00.04
    SNMPv2-MIB::sysORUpTime.2 = Timeticks: (4) 0:00:00.04
    SNMPv2-MIB::sysORUpTime.3 = Timeticks: (4) 0:00:00.04
    SNMPv2-MIB::sysORUpTime.4 = Timeticks: (4) 0:00:00.04
    SNMPv2-MIB::sysORUpTime.5 = Timeticks: (4) 0:00:00.04
    SNMPv2-MIB::sysORUpTime.6 = Timeticks: (4) 0:00:00.04
    SNMPv2-MIB::sysORUpTime.7 = Timeticks: (4) 0:00:00.04
    SNMPv2-MIB::sysORUpTime.8 = Timeticks: (4) 0:00:00.04
    SNMPv2-MIB::sysORUpTime.9 = Timeticks: (4) 0:00:00.04
    SNMPv2-MIB::sysORUpTime.10 = Timeticks: (4) 0:00:00.04
    HOST-RESOURCES-MIB::hrSystemUptime.0 = Timeticks: (872972) 2:25:29.72
    HOST-RESOURCES-MIB::hrSystemUptime.0 = No more variables left in this MIB View (It is past the end of the MIB tree)

輸出告訴我沒有檢查 IF-MIB,但如果執行命令:

snmptranslate -Dinit_mib .1.3.2>&1 | grep MIBDIR

檢查 mibdirs (目錄) 和 MIB 的找到 (Seen MIBS) 我得到以下結果:

 registered debug token init_mib, 1
 init_mib: Seen MIBDIRS: Looking in '/root/.snmp/mibs:/usr/share/snmp/mibs' for mib dirs ...
 init_mib: Seen MIBS: Looking in ':HOST-RESOURCES-MIB:HOST-RESOURCES- 
 TYPES:UCD-DISKIO-MIB:TCP-MIB:UDP-MIB:MTA-MIB:NETWORK-SERVICES-MIB:SCTP- 
 MIB:RMON-MIB:EtherLike-MIB:LM-SENSORS-MIB:SNMPv2-MIB:IF-MIB:IP- 
 MIB:NOTIFICATION-LOG-MIB:DISMAN-EVENT-MIB:DISMAN-SCHEDULE-MIB:UCD-SNMP- 
 MIB:UCD-DEMO-MIB:SNMP-TARGET-MIB:NET-SNMP-AGENT-MIB:SNMP-MPD-MIB:SNMP- 
 USER-BASED-SM-MIB:SNMP-FRAMEWORK-MIB:SNMP-VIEW-BASED-ACM-MIB:SNMP- 
 COMMUNITY-MIB:IPV6-ICMP-MIB:IPV6-MIB:IPV6-TCP-MIB:IPV6-UDP-MIB:IP-FORWARD- 
 MIB:NET-SNMP-PASS-MIB:NET-SNMP-EXTEND-MIB:UCD-DLMOD-MIB:SNMP-NOTIFICATION- 
 MIB:SNMPv2-TM:NET-SNMP-VACM-MIB' for mib files ...
 init_mib: Seen PREFIX: Looking in '.1.3.6.1.2.1' for prefix ..

如果你仔細看,IF-MIB 在那裡被標記為 Seen Mibs。為什麼它沒有出現在 snmpwalk 命令中?為什麼該代理中不存在與 IF-MIB 相關的 OID?這與許可有關嗎?作業系統相關?

出於安全原因,安裝在 CentOS 中的 SNMP 守護程序預設配置為使用“公共”社區回答受限 MIB 樹視圖的查詢。

按照預設配置,預設的“公共”MIB(子)樹允許視圖只有 .1.3.6.1.2.1.1 和 .1.3.6.1.2.1.25.1.1 ;如果仔細觀察,IF-MIB 地址空間是 .1.3.6.1.2.1.2。因此,預設情況下不允許查詢該 MIB 地址空間上的對象。它還解釋了為什麼snmpwalk您的命令只顯示非常有限的視圖。

因此,要讓 SNMP 守護程序/服務回答您的查詢,您必須首先在配置文件上配置一個新視圖(出於安全原因,最好還有一個新社區)/etc/snmp/snmpd.conf

然後,出於安全原因,我們將配置一個“私有”社區,並擴大可以查詢的 MIB 樹空間。

因此,添加到/etc/snmp/snmpd.conf

rocommunity private 127.0.0.1 .1

其中 127.0.0.1 是可以進行查詢的 IP 地址,而 .1 是整個 MIB 樹。ro社區還證明您只能進行讀取查詢,這樣更安全。

配置snmpd.conf文件後,必須重啟 SNMP 服務,如下:

sudo service snmpd restart

或者

sudo systemctl restart snmpd

現在進行查詢。如果您不要求 MIB 葉節點,則不能使用snmpget. 您必須使用snmpwalk它來遍歷 MIB 樹,如下所示:

$ snmpwalk -v 2c -c private 127.0.0.1 .1.3.6.1.2.1.2.2.1.2
IF-MIB::ifDescr.1 = STRING: lo
IF-MIB::ifDescr.2 = STRING: eth0
IF-MIB::ifDescr.3 = STRING: eth1
IF-MIB::ifDescr.4 = STRING: eth2

另一方面,如果您需要查詢 MIB 樹的葉節點,例如,您在系統中的第二個介面,您可以:

$ snmpget -v 2c -c private 127.0.0.1 .1.3.6.1.2.1.2.2.1.2.2
IF-MIB::ifDescr.2 = STRING: eth0

PS 顯然,在生產系統中,您將社區名稱稱為私有名稱。

PS2。您安裝 MIB 文件的事實是,您正在安裝將數字轉換為人類和腳本/網路監控軟體等可讀文本的字典。如果訪問該 SNMP 社區的安全上下文允許,則未安裝 MIB 不會阻止以數字形式查詢特定 MIB 子樹

引用自:https://unix.stackexchange.com/questions/463969