SwordArMor

Remplir la table SNMP ifAlias sous Linux

Il m’arrive encore de jouer avec des routeurs soft, et comme à chaque fois il faut bricoler pour avoir ce que l’on veut, ici avoir une table ifAlias correcte. À une époque je le faisais avec FreeBSD, et j’avais trouvé la parade en utilisant un proxy vers bsnmpd. Sauf que sous Gentoo, on a pas bsnmpd.

Il existe un script sur le repo git d’observium qui permet de récupérer une valeur depuis /etc/network/interfaces. Mais je veux un truc standard, pas un nième script spécifique à Debian…

L’idée est donc de configurer les aliases de ses interfaces avec ip-link(8) :

ip link set eno1 alias "Transit: Grifon"
Pour retrouver la config au reboot, j’utilise la fonction postup() de /etc/conf.d/net ou directement tinc-up :
regis ~ # tail -n 6 /etc/conf.d/net
postup() {
        ip link set eno1 alias "Transit: Grifon"
        ip link set eno2 alias "Core: Admin Breizh-IX"
        ip link set enp1s0f0 alias "Peering: Breizh-IX"
        ip link set enp1s0f1 alias "Core: Quarantaine Breizh-IX"
}
regis ~ # cat /etc/tinc/backbone/tinc-up
#!/bin/sh

ip link set tinc0 up
ip addr add 45.91.126.235/29 dev tinc0
ip addr add 2a0e:f42:fffe::3/64 dev tinc0

ip link set tinc0 alias "Core: Backbone"

Mais évidemment, snmpd ne va pas réussir à trouver cette valeur tout seul…

metro ~ # snmpwalk -v2c -c public regis.swordarmor.fr ifAlias
IF-MIB::ifAlias.1 = STRING: 
IF-MIB::ifAlias.2 = STRING: 
IF-MIB::ifAlias.3 = STRING: 
IF-MIB::ifAlias.4 = STRING: 
IF-MIB::ifAlias.5 = STRING: 
IF-MIB::ifAlias.6 = STRING: 
IF-MIB::ifAlias.7 = STRING: 
IF-MIB::ifAlias.8 = STRING: 
IF-MIB::ifAlias.9 = STRING: 
IF-MIB::ifAlias.10 = STRING: 
IF-MIB::ifAlias.11 = STRING: 
IF-MIB::ifAlias.14 = STRING: 
IF-MIB::ifAlias.18 = STRING: 
IF-MIB::ifAlias.23 = STRING: 
IF-MIB::ifAlias.40 = STRING: 
IF-MIB::ifAlias.41 = STRING: 
IF-MIB::ifAlias.46 = STRING: 
IF-MIB::ifAlias.47 = STRING: 
IF-MIB::ifAlias.72 = STRING: 
IF-MIB::ifAlias.73 = STRING: 
IF-MIB::ifAlias.74 = STRING: 
IF-MIB::ifAlias.75 = STRING: 
IF-MIB::ifAlias.76 = STRING: 
IF-MIB::ifAlias.77 = STRING: 
IF-MIB::ifAlias.79 = STRING: 
IF-MIB::ifAlias.80 = STRING: 
IF-MIB::ifAlias.82 = STRING: 
L’idée est donc d’utiliser un script qui va aller chercher les infos et les mettre dans la table. Le paquet dev-perl/SNMP-Extension-PassPersist se trouve dans mon mon repo Gentoo personnel.
emerge -va dev-perl/SNMP-Extension-PassPersist
wget -O /usr/local/bin/ifAlias_persist https://git.grifon.fr/alarig/snmp-ifalias/raw/branch/master/ifAlias_persist
chmod +x /usr/local/bin/ifAlias_persist
echo "pass_persist .1.3.6.1.2.1.31.1.1.1.18 /usr/local/bin/ifAlias_persist" >> /etc/snmp/snmpd.conf
rc-service snmpd restart
Et maintenant, nous avons bien les valeurs que nous voulons :
metro ~ # snmpwalk -v2c -c public regis.swordarmor.fr ifAlias
IF-MIB::ifAlias.2 = STRING: Transit: Grifon
IF-MIB::ifAlias.3 = STRING: Core: Admin Breizh-IX
IF-MIB::ifAlias.4 = STRING: Peering: Breizh-IX
IF-MIB::ifAlias.5 = STRING: Core: Quarantaine Breizh-IX
IF-MIB::ifAlias.82 = STRING: Core: Backbone

Le script est disponible sur son repo git : snmp-ifalias.