Ошибка snmpget: "Такой агент недоступен для этого агента с этим OID"

Я хочу создать свой собственный MIB. Я борюсь за это с пары недель. Я следовал этому руководству и использовал net-snmp 5.7.3. Что я делаю, это:

Моя установка: у меня есть две виртуальные машины, обе Ubuntu 16 один - snmp-сервер с IP:192.168.5.20, а другой - snmp-агент с IP:192.168.5.21. Я написал MIB, который хорошо компилируется без ошибок (эта компиляция выполняется только на агентской системе, а не на сервере). Я уже сделал это:

root@snmp-agent:# MIBS=+MAJOR-MIB    
root@snmp-agent:# MIBS=+DEPENDENT-MIB    
root@snmp-agent:# export MIBS    
root@snmp-agent:# MIBS=ALL

Мои MIB файлы находятся по этому пути: /usr/share/snmp/mibs который является путем поиска по умолчанию. Я уже скомпилировал его и успешно сгенерировал файлы.c и.h с помощью команды: mib2c -c mib2c.int_watch.conf objectName, И чем настроил snmp вот так:

root@snmp-agent:# ./configure --with-mib-modules="objectName"
root@snmp-agent:# make
root@snmp-agent:# make install    

Все работало нормально После этого, когда я делаю (на агента) snmptranslate Я получаю вывод как:

root@snmp-agent:snmptranslate -IR objectName.0
MAJOR-MIB::objectName.0

И с командой snmptranslate -On objectName.0 Я получаю вывод как:

root@snmp-agent:# snmptranslate -On MAJOR-MIB::objectName.0
.1.3.6.1.4.1.4331.2.1.0

Итак, я получаю ожидаемые результаты в агентской системе. Теперь моя проблема в том, что я не знаю, как получить те же значения с моего сервера!

Когда я бегу snmpget с сервера я получаю эту ошибку:

root@snmp-server:# snmpget -v2c -c public 192.168.5.21 MAJOR-MIB::objectName.0
MAJOR-MIB::objectName.0 = No Such Instance currently exists at this OID

Выведите, когда указан OID:

root@snmp-server:# snmpget -v2c -c public 192.168.5.21 .1.3.6.1.4.1.4331.2.1
SNMPv2-SMI::enterprises.4331.2.1 = No Such Instance currently exists at this OID

Вывод, когда я делаю это:

root@snmp-server:# snmpget -v2c -c public 192.168.5.21 sysDescr.0
SNMPv2-MIB::sysDescr.0 = STRING: Linux snmp-agent 4.10.0-33-generic #37~16.04.1-Ubuntu SMP Fri Aug 11 14:07:24 UTC 2017 x86_64

root@snmp-server:# snmpwalk -v2c -c public 192.168.5.21 .1.3.6.1.4.1.4331.2.1
SNMPv2-SMI::enterprises.4331.2.1 = No more variables left in this MIB View (It is past the end of the MIB tree)

Я искал это и все еще ищу, но не удача. Что я должен делать? Как я должен использовать snmpget с моего сервера на моих собственных MIB? Я имею в виду то, что я делаю с sysDescr.0 с моего сервера.

Я хочу сделать это: snmpget 192.168.5.21 myObjectName.0 и получить значения.

РЕДАКТИРОВАТЬ: я уже видел эти ответы, но не работает. snmp extension не работает и snmp нет такого объекта...

ОБНОВЛЕНИЕ 2:

Когда я делаю snmpwalk на сервере:

snmp-server:# snmpwalk -v 2c -c ncs -m DISMAN-PING-MIB 192.168.5.21 .1.3.6.1.2.1.80
DISMAN-PING-MIB::pingObjects.0 = INTEGER: 1
DISMAN-PING-MIB::pingFullCompliance.15.46.49.46.51.46.54.46.49.46.50.46.49.46.56.48 = STRING: "/bin/echo"
DISMAN-PING-MIB::pingMinimumCompliance.15.46.49.46.51.46.54.46.49.46.50.46.49.46.56.48 = ""
DISMAN-PING-MIB::pingCompliances.4.15.46.49.46.51.46.54.46.49.46.50.46.49.46.56.48 = ""
DISMAN-PING-MIB::pingCompliances.5.15.46.49.46.51.46.54.46.49.46.50.46.49.46.56.48 = INTEGER: 5
DISMAN-PING-MIB::pingCompliances.6.15.46.49.46.51.46.54.46.49.46.50.46.49.46.56.48 = INTEGER: 1
DISMAN-PING-MIB::pingCompliances.7.15.46.49.46.51.46.54.46.49.46.50.46.49.46.56.48 = INTEGER: 1
DISMAN-PING-MIB::pingCompliances.20.15.46.49.46.51.46.54.46.49.46.50.46.49.46.56.48 = INTEGER: 4
DISMAN-PING-MIB::pingCompliances.21.15.46.49.46.51.46.54.46.49.46.50.46.49.46.56.48 = INTEGER: 1
DISMAN-PING-MIB::pingIcmpEcho.1.15.46.49.46.51.46.54.46.49.46.50.46.49.46.56.48 = ""
DISMAN-PING-MIB::pingIcmpEcho.2.15.46.49.46.51.46.54.46.49.46.50.46.49.46.56.48 = ""
DISMAN-PING-MIB::pingIcmpEcho.3.15.46.49.46.51.46.54.46.49.46.50.46.49.46.56.48 = INTEGER: 1
DISMAN-PING-MIB::pingIcmpEcho.4.15.46.49.46.51.46.54.46.49.46.50.46.49.46.56.48 = INTEGER: 0
DISMAN-PING-MIB::pingMIB.4.1.2.15.46.49.46.51.46.54.46.49.46.50.46.49.46.56.48.1 = ""

Когда я снимаю с pingFullCompliance.15.46.49.46.51.46.54.46.49.46.50.46.49.46.56.48:

root@snmp-server:# snmpget 192.168.5.21 DISMAN-PING-MIB::pingFullCompliance.15.46.49.46.51.46.54.46.49.46.50.46.49.46.56.48
DISMAN-PING-MIB::pingFullCompliance.15.46.49.46.51.46.54.46.49.46.50.46.49.46.56.48 = Wrong Type (should be INTEGER): STRING: "/bin/echo"

Так куда я иду не так? А что такое pingFullCompliance.15.46.49.46.51.46.54.46.49.46.50.46.49.46.56.48? Почему такой длинный OID?

Куда я иду не так? Может кто-то указать мне верное направление? Любые предложения с благодарностью.

2 ответа

У меня была точно такая же проблема, она не работала с 5.6.2.

Как я это решил:

Я обновился до 5.7.3, затем он начал работать. Вам необходимо позаботиться о следующем:

  1. сконфигурируйте пакет (в сборке) для поддержки agentx) с --with-mib-modules=agentx, это моя конфигурация:

      ./configure --prefix=/usr --build=i386-linux --host=arm-linux --target=arm-linux --with-ar=arm-arago-linux-gnueabi-ar --with-cc=arm-arago-linux-gnueabi-gcc --with-ld=arm-arago-linux-gnueabi-ld --with-cflags="-O3 -march=armv7-a -mtune=cortex-a8 -mfpu=neon -mfloat-abi=softfp" --with-endianness=big --with-ldflags=-Bstatic --enable-mini-agent --with-mib-modules="mibII ip-mib if-mib tcp-mib udp-mib ucd_snmp target agent_mibs notification-log-mib snmpv3mibs notification agentx" --without-openssl --without-perl-modules --disable-embedded-perl --disable-shared --with-default-snmp-version="2" --with-sys-contact="root" --with-sys-location="unknown" --with-logfile="/var/log/snmpd.log" --with-persistent-directory="/var/net-snmp" --disable-manuals
    
  2. добавить agentx в snmpd.conf Это мой snmpd.config

    master  agentx
    
    rocommunity public rwcommunity private
    
    com2sec readonly  default         public 
    com2sec readwrite default     private
    
  3. запустил snmpd с отладкой, чтобы дать более подробную информацию:

    snmpd -f -Lo: -Dagentx
    
  4. Затем запустите приложение agentx

Следующее руководство также помогло:

http://net-snmp.sourceforge.net/wiki/index.php/TUT:Writing_a_Subagent

Поиск имени в MIB работает нормально, запрос работает нормально, но агент отвечает, что такого объекта не существует. Значит проблема на стороне агента.

Как предполагает @ransh в другом ответе, это может быть проблема неправильной настройки агента - основной агент должен запросить у вашего субагента запрашиваемый объект, и для этого ему необходимо сопоставление OID поддерева с субагентом. .

Для скалярных значений, таких как, в таблице только одна строка и один столбец, а ключ — пустышка, но для других объектов вам необходимо обратиться к определенному столбцу и строке. Номер столбца фиксирован, как он определен в MIB, но строки не нумеруются, поскольку они не будут постоянными, и вместо этого используется уникальный первичный ключ.

Например, таблица маршрутизации IPv4 может содержать произвольное количество записей, но никакие две записи не могут иметь одинаковый адрес назначения и сетевую маску, поэтому они используются в качестве уникального индекса (и первичного ключа) для поиска в таблице, и генерируются адреса строк. из них, например

      .0.0.0.0.0.0.0.0              the default route (destination 0.0.0.0/0)
.192.168.0.0.255.255.255.0    the internal network (destination 192.168.0.0/24)

The здесь в качестве индекса используется строка, которая кодируется как длина и значение - сначала длина, чтобы более короткая строка не была случайно префиксом более длинной строки. Вы можете заметить, что первый элемент равен 15, а за ним следуют еще 15 элементов.

Чтобы просмотреть таблицу как таблицу, используйте командукоманда.

Другие вопросы по тегам