![SNMP - 이 에이전트에는 이 OID에 사용 가능한 개체가 없습니다.](https://linux55.com/image/138995/SNMP%20-%20%EC%9D%B4%20%EC%97%90%EC%9D%B4%EC%A0%84%ED%8A%B8%EC%97%90%EB%8A%94%20%EC%9D%B4%20OID%EC%97%90%20%EC%82%AC%EC%9A%A9%20%EA%B0%80%EB%8A%A5%ED%95%9C%20%EA%B0%9C%EC%B2%B4%EA%B0%80%20%EC%97%86%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
시스템 매개변수 검색을 위해 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
검색된 mibdir(디렉터리) 및 MIB(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가 에이전트에 존재하지 않는 이유는 무엇입니까? 이 권한이 관련되어 있나요? 운영 체제와 관련이 있나요?
답변1
보안상의 이유로 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 트리입니다.루오커뮤니티는 또한 읽기 쿼리만 수행할 수 있으며 이는 더 안전하다는 것을 증명합니다.
파일을 구성한 후 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 파일을 설치한다는 것은 숫자를 사람과 스크립트/네트워크 모니터링 소프트웨어 모두가 읽을 수 있는 텍스트로 변환하는 사전을 설치한다는 것입니다. MIB 설치 실패로 인해 특정 MIB 하위 트리의 숫자 쿼리가 방지되지 않습니다.보안 컨텍스트에서 이 SNMP 커뮤니티에 대한 액세스를 허용하는 경우
답변2
아래 snmpwalk를 사용해 보세요.
snmpwalk -v 2c -c public 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: eth2
IF-MIB::ifDescr.3 = STRING: eth3
IF-MIB::ifDescr.4 = STRING: eth4
IF-MIB::ifDescr.5 = STRING: eth5
IF-MIB::ifDescr.6 = STRING: eth0
IF-MIB::ifDescr.7 = STRING: eth1
IF-MIB::ifDescr.8 = STRING: eth6
IF-MIB::ifDescr.9 = STRING: eth7
IF-MIB::ifDescr.10 = STRING: bond0
따라서 결과를 얻으려면 다른 노드를 추가해야 합니다.
snmpget -v 2c -c public 127.0.0.1 .1.3.6.1.2.1.2.2.1.2.1