fbpx

Descrição de interfaces de rede usando SNMP (debian/ubuntu)

A falta da descrição das interfaces em roteadores Linux foi algo que sempre me incomodou. Ter que editar cada gráfico no cacti para que o gráfico tivesse o nome correto era trabalhoso.

Um dia desses esbarrei num script que extende o snmpd para que ele passe a ter o OID ifAlias e assim termos o nome das interfaces disponíveis para qualquer ferramenta que utilize o protocolo SNMP. O caminho para o script deverá ser /usr/local/lib/ifAlias. O script tinha alguns bugs, e após as correções ficou assim:

[bash]
#!/bin/bash
# ifAlias for Debian GNU/Linux
# (c) 2010-2013, Tom Laermans, www.observium.org
# Small fixes by: Renato Ornelas <renato_at_openx.com.br>
#
BASE='.1.3.6.1.2.1.31.1.1.1.18'
REQ=$2
ID=$(echo ${REQ##${BASE}.} |cut -d: -f1)
if [ "X${REQ}" = "X${BASE}" ]; then
  ID=0
fi
if [ "$1" = "-n" ]; then
  # getnext
  INDEX=0
  IFS="
"
  for INT in $(ip l|grep mtu)
  do
    PREVINDEX=$INDEX
    INDEX=$(echo $INT|cut -d: -f1)
    if [ $PREVINDEX == $ID ];
    then
      INTERFACE=$(echo $INT| cut -d ":" -f 2 | sed 's/ //g' | cut -d@ -f1)
      ID=$INDEX
      break
    fi
  done
else
  # get
  INTERFACE=$((ip l | grep "^${ID}: " | cut -d " " -f 2 | sed 's/://g' | cut -d@ -f1) 2> /dev/null)
fi
if [ "X$ID" = "X" ] || [ "X$ID" = "X0" ] || [ "X$ID" = "X-1" ]; then
  exit 0
fi
if [ "$INTERFACE" ]; then
  INTERFACE=$((ip l | grep "^${ID}: " | cut -d " " -f 2 | sed 's/://g' | cut -d@ -f1) 2> /dev/null)
fi
echo ${BASE}.${ID}
if [ "X${INTERFACE}" = "X" ]; then
  echo noSuchName
  exit 0
fi
echo "string"
echo $(grep "^# $INTERFACE:" /etc/network/interfaces|sed s/^# $INTERFACE: //)
exit 0
[/bash]

Precimos instruir o snmpd a usar este novo script para caminhar pela arvore ifAlias. Basta adicionar a seguinte linha ao final do arquivo /etc/snmp/snmpd.conf:

[text]
 pass .1.3.6.1.2.1.31.1.1.1.18 /usr/local/lib/ifAlias
[/text]

Para usar, precisaremos de adicionar a descrição da interface no arquivo /etc/network/interfaces, usando a sintaxe # INTERFACE: DESCRIÇÃO, como no exemplo abaixo:

[bash]
# vlan10: DMZ
auto vlan10
iface vlan10 inet static
address XX.XX.XX.XX
netmask 255.255.255.0
vlan_raw_device eth0
# vlan2: LAN
auto vlan2
iface vlan2 inet static
address XX.XX.XX.XX
netmask 255.255.255.192
vlan_raw_device eth0
[/bash]

Agora basta recarregar a query no cacti (bolinha verde) para ver as descrições das interfaces:

Cacti ifalias

Veja os posts com as verões compatíveis com: SuSE  e Red Hat/CentOS.

Ideia Original: http://www.observium.org/wiki/IfAlias_descriptions_on_Debian/Ubuntu