[Gelöst] SNMP Status PPoE-Verbindung abfragen

Allgemeine Fragen zu Problemen. Keine Fehlerberichte oder Feature-Anfragen

Moderator: Securepoint

Antworten
monstermania
Beiträge: 40
Registriert: Do 27.03.2014, 12:44
Wohnort: Hamburg

[Gelöst] SNMP Status PPoE-Verbindung abfragen

Beitrag von monstermania »

Moin,
wir setzen eine SP UTM HA Umgebung ein (Master-Spare).
Da wir immer mal wieder Probleme mit unserem Provider bzw. der PPoE-Verbindung haben wollen wir den Status der PPoE-Verbindung (ppp0) in unser Monitoring aufnehmen.
Ich habe dafür ein kleines Script geschrieben, dass auf unserem Monitoringserver läuft:
 

Code: Alles auswählen

#!/bin/sh
HOME=/etc
PATH=/bin:/sbin:/usr/bin:/usr/sbin
# Anzahl der Interfaces der UTM ermitteln
AnzahlInterfaces=$(snmpget -v2c -c public 192.168.XXX.XXX .1.3.6.1.2.1.2.1.0 -Oqve)

# Interfaces der UTM durchgehen und prüfen ob Name = ppp0
# Ermittlung der Nr. des Interface mit Name = ppp0
for ((i=1;i<=$AnzahlInterfaces;i++))
do 
     Status=$(snmpgetnext -v2c -c public 192.168.XXX.XXX .1.3.6.1.2.1.31.1.1.1.1.$i -Oqve)
     if [ "$Status" == "ppp0" ] 
        then
           InterfaceNo=$(snmpgetnext -v2c -c public 192.168.XXX.XXX .1.3.6.1.2.1.31.1.1.1.1.$i | awk '{print $1}')
           InterfaceNo=${InterfaceNo#'IF-MIB::ifName.'}
           break
     fi
done

if [ "$Status" == "ppp0" ]
   then
      Status=$(snmpget -v2c -c public 192.168.XXX.XXX .1.3.6.1.2.1.2.2.1.8.$InterfaceNo -Oqve)
   else
      Status=2
fi
Das Script funktioniert einwandfrei so lange unsere Master-UTM aktiv läuft. So Bald jedoch die Spare UTM läuft, funktioniert das Script nicht mehr. Die Spare UTM liefert auf die Abfrage nach der Anzahl der Interfaces die gleiche Anzahl Interfaces wie bei der Master UTM. 
Allerdings hat die ppp0-Verbindung eine Interfacenr. > als die tatsächliche Anzahl der vorhandenen Intercaces!?

Wieso funktioniert das Script nur auf der Master UTM?
Wie kann man den Status der ppp0 so abfragen, dass die Statusabfrage immer auf der aktiven UTM funktioniert (egal ob Master/Spare UTM aktiv)?
Gruß
Dirk

Kenneth
Beiträge: 348
Registriert: Mi 19.10.2011, 15:21
Wohnort: Lüneburg

Beitrag von Kenneth »

Hallo, 

ist es möglich dass Sie das Script einmal manuell mit -x ausführen und den Output hier posten oder mir per PM zusenden?

Gruß

Kenneth

monstermania
Beiträge: 40
Registriert: Do 27.03.2014, 12:44
Wohnort: Hamburg

Beitrag von monstermania »

Hallo Kenneth,
muss wohl der Vorführeffekt sein...
Dieses mal hat es bei der Aktiv-Schaltung der Slave-UTM geklappt. Das Script hat also funktioniert!   :/
Ich habe trotzdem die Ausgabeergebnisse mitgepostet.

Ausgabe des Scripts auf der Master UTM (aktiv):

Code: Alles auswählen

+ HOME=/etc
+ PATH=/bin:/sbin:/usr/bin:/usr/sbin
++ snmpget -v2c -c public 192.168.XXX.XXX .1.3.6.1.2.1.2.1.0 -Oqve
+ AnzahlInterfaces=11
+ (( i=1 ))
+ (( i<=11 ))
++ snmpgetnext -v2c -c public 192.168.XXX.XXX .1.3.6.1.2.1.31.1.1.1.1.1 -Oqve
+ Status=eth0
+ '[' eth0 == ppp0 ']'
+ (( i++ ))
+ (( i<=11 ))
++ snmpgetnext -v2c -c public 192.168.XXX.XXX .1.3.6.1.2.1.31.1.1.1.1.2 -Oqve
+ Status=eth1
+ '[' eth1 == ppp0 ']'
+ (( i++ ))
+ (( i<=11 ))
++ snmpgetnext -v2c -c public 192.168.XXX.XXX .1.3.6.1.2.1.31.1.1.1.1.3 -Oqve
+ Status=eth2
+ '[' eth2 == ppp0 ']'
+ (( i++ ))
+ (( i<=11 ))
++ snmpgetnext -v2c -c public 192.168.XXX.XXX .1.3.6.1.2.1.31.1.1.1.1.4 -Oqve
+ Status=eth3
+ '[' eth3 == ppp0 ']'
+ (( i++ ))
+ (( i<=11 ))
++ snmpgetnext -v2c -c public 192.168.XXX.XXX .1.3.6.1.2.1.31.1.1.1.1.5 -Oqve
+ Status=eth4
+ '[' eth4 == ppp0 ']'
+ (( i++ ))
+ (( i<=11 ))
++ snmpgetnext -v2c -c public 192.168.XXX.XXX .1.3.6.1.2.1.31.1.1.1.1.6 -Oqve
+ Status=tunl0
+ '[' tunl0 == ppp0 ']'
+ (( i++ ))
+ (( i<=11 ))
++ snmpgetnext -v2c -c public 192.168.XXX.XXX .1.3.6.1.2.1.31.1.1.1.1.7 -Oqve
+ Status=gre0
+ '[' gre0 == ppp0 ']'
+ (( i++ ))
+ (( i<=11 ))
++ snmpgetnext -v2c -c public 192.168.XXX.XXX .1.3.6.1.2.1.31.1.1.1.1.8 -Oqve
+ Status=gretap0
+ '[' gretap0 == ppp0 ']'
+ (( i++ ))
+ (( i<=11 ))
++ snmpgetnext -v2c -c public 192.168.XXX.XXX .1.3.6.1.2.1.31.1.1.1.1.9 -Oqve
+ Status=tun0
+ '[' tun0 == ppp0 ']'
+ (( i++ ))
+ (( i<=11 ))
++ snmpgetnext -v2c -c public 192.168.XXX.XXX .1.3.6.1.2.1.31.1.1.1.1.10 -Oqve
+ Status=ppp0
+ '[' ppp0 == ppp0 ']'
++ snmpgetnext -v2c -c public 192.168.XXX.XXX .1.3.6.1.2.1.31.1.1.1.1.10
++ awk '{print $1}'
+ InterfaceNo=IF-MIB::ifName.25
+ InterfaceNo=25
+ break
+ '[' ppp0 == ppp0 ']'
++ snmpget -v2c -c public 192.168.XXX.XXX .1.3.6.1.2.1.2.2.1.8.25 -Oqve
+ Status=1
+ echo 1
1

Hier die Ausgabe der Slave UTM nach dem umschalten (Slave aktiv):

Code: Alles auswählen

+ HOME=/etc
+ PATH=/bin:/sbin:/usr/bin:/usr/sbin
++ snmpget -v2c -c public 192.168.XXX.XXX .1.3.6.1.2.1.2.1.0 -Oqve
+ AnzahlInterfaces=11
+ (( i=1 ))
+ (( i<=11 ))
++ snmpgetnext -v2c -c public 192.168.XXX.XXX .1.3.6.1.2.1.31.1.1.1.1.1 -Oqve
+ Status=eth0
+ '[' eth0 == ppp0 ']'
+ (( i++ ))
+ (( i<=11 ))
++ snmpgetnext -v2c -c public 192.168.XXX.XXX .1.3.6.1.2.1.31.1.1.1.1.2 -Oqve
+ Status=eth1
+ '[' eth1 == ppp0 ']'
+ (( i++ ))
+ (( i<=11 ))
++ snmpgetnext -v2c -c public 192.168.XXX.XXX .1.3.6.1.2.1.31.1.1.1.1.3 -Oqve
+ Status=eth2
+ '[' eth2 == ppp0 ']'
+ (( i++ ))
+ (( i<=11 ))
++ snmpgetnext -v2c -c public 192.168.XXX.XXX .1.3.6.1.2.1.31.1.1.1.1.4 -Oqve
+ Status=eth3
+ '[' eth3 == ppp0 ']'
+ (( i++ ))
+ (( i<=11 ))
++ snmpgetnext -v2c -c public 192.168.XXX.XXX .1.3.6.1.2.1.31.1.1.1.1.5 -Oqve
+ Status=eth4
+ '[' eth4 == ppp0 ']'
+ (( i++ ))
+ (( i<=11 ))
++ snmpgetnext -v2c -c public 192.168.XXX.XXX .1.3.6.1.2.1.31.1.1.1.1.6 -Oqve
+ Status=tunl0
+ '[' tunl0 == ppp0 ']'
+ (( i++ ))
+ (( i<=11 ))
++ snmpgetnext -v2c -c public 192.168.XXX.XXX .1.3.6.1.2.1.31.1.1.1.1.7 -Oqve
+ Status=gre0
+ '[' gre0 == ppp0 ']'
+ (( i++ ))
+ (( i<=11 ))
++ snmpgetnext -v2c -c public 192.168.XXX.XXX .1.3.6.1.2.1.31.1.1.1.1.8 -Oqve
+ Status=gretap0
+ '[' gretap0 == ppp0 ']'
+ (( i++ ))
+ (( i<=11 ))
++ snmpgetnext -v2c -c public 192.168.XXX.XXX .1.3.6.1.2.1.31.1.1.1.1.9 -Oqve
+ Status=ppp0
+ '[' ppp0 == ppp0 ']'
++ snmpgetnext -v2c -c public 192.168.XXX.XXX .1.3.6.1.2.1.31.1.1.1.1.9
++ awk '{print $1}'
+ InterfaceNo=IF-MIB::ifName.12
+ InterfaceNo=12
+ break
+ '[' ppp0 == ppp0 ']'
++ snmpget -v2c -c public 192.168.XXX.XXX .1.3.6.1.2.1.2.2.1.8.12 -Oqve
+ Status=1
+ echo 1
1

Oder, kann es sein, dass seit der FW 11.6.8 hier eine Änderung im Verhalten der UTM gibt!?
Bei den letzten beiden planmäßigen FW-Updates (am 10.07. und 25.07.) hat es definitiv nicht funktioniert. Beide mal konnte der Status des ppp0-Interfaces auf der dann aktiven Slave-UTM nicht abgefragt werden!

Gruß
Dirk

PS: Es wäre toll, wenn bei einem FW-Update die Master UTM die Slave UTM automatisch mit einem FW-Update versorgen könnte. Ist immer blöd für uns, ein Wartungsfenster für ein FW Update zu finden, ohne dass nicht nicht irgendein VPN Benutzer vom System getrennt wird!

Kenneth
Beiträge: 348
Registriert: Mi 19.10.2011, 15:21
Wohnort: Lüneburg

Beitrag von Kenneth »

Hallo Dirk,

Änderungen wäre mir da jetzt nicht bekannt. Ich schau mir den Debug Output trotzdem mal an.

Bezpglich der Updates:
Es ist geplannt den Cluster Sync zu erweitern. (Virrenpattern, Mail Datenbanken etc.) Ein Release gibt es aber dafür noch nicht.

Gruß

Kenneth 

monstermania
Beiträge: 40
Registriert: Do 27.03.2014, 12:44
Wohnort: Hamburg

Beitrag von monstermania »

Moin,
um ein FW Update machen zu können, ist z.zt. jetzt wieder die Slave UTM aktiv.
Und diesmal tritt das Problem mit der Status-Abfrage der ppp0-Verbindung wieder auf.

Ich habe hier mal die Ausgabe des Scripts gepostet. Die Anzahl der vorhandenen Interfaces wird von der UTM mit 11 angegeben (wie auch bei der Master UTM)
Und nur für diese Interfaces wird auch der Name/Status abgefragt. Leider gibt es unter den 11 durch die UTM gemeldeten Interfaces keines mit dem Namen ppp0!
Ich hab es mal händisch durchprobiert. Diesmal liegt das ppp0-Interface der Slave UTM auf der OID '.1.3.6.1.2.1.31.1.1.1.1.16'

Die Frage bleibt: Wie können wir den Status der ppp0-Verbindung abfragen, unabhängig davon ob die Master oder Slave-UTM aktiv ist!?

Gruß
Dirk

Code: Alles auswählen

+ HOME=/etc
+ PATH=/bin:/sbin:/usr/bin:/usr/sbin
++ snmpget -v2c -c public 192.168.XXX.XXX .1.3.6.1.2.1.2.1.0 -Oqve
+ AnzahlInterfaces=11
+ (( i=1 ))
+ (( i<=11 ))
++ snmpgetnext -v2c -c public 192.168.XXX.XXX .1.3.6.1.2.1.31.1.1.1.1.1 -Oqve
+ Status=eth0
+ '[' eth0 == ppp0 ']'
+ (( i++ ))
+ (( i<=11 ))
++ snmpgetnext -v2c -c public 192.168.XXX.XXX .1.3.6.1.2.1.31.1.1.1.1.2 -Oqve
+ Status=eth1
+ '[' eth1 == ppp0 ']'
+ (( i++ ))
+ (( i<=11 ))
++ snmpgetnext -v2c -c public 192.168.XXX.XXX .1.3.6.1.2.1.31.1.1.1.1.3 -Oqve
+ Status=eth2
+ '[' eth2 == ppp0 ']'
+ (( i++ ))
+ (( i<=11 ))
++ snmpgetnext -v2c -c public 192.168.XXX.XXX .1.3.6.1.2.1.31.1.1.1.1.4 -Oqve
+ Status=eth3
+ '[' eth3 == ppp0 ']'
+ (( i++ ))
+ (( i<=11 ))
++ snmpgetnext -v2c -c public 192.168.XXX.XXX .1.3.6.1.2.1.31.1.1.1.1.5 -Oqve
+ Status=eth4
+ '[' eth4 == ppp0 ']'
+ (( i++ ))
+ (( i<=11 ))
++ snmpgetnext -v2c -c public 192.168.XXX.XXX .1.3.6.1.2.1.31.1.1.1.1.6 -Oqve
+ Status=tunl0
+ '[' tunl0 == ppp0 ']'
+ (( i++ ))
+ (( i<=11 ))
++ snmpgetnext -v2c -c public 192.168.XXX.XXX .1.3.6.1.2.1.31.1.1.1.1.7 -Oqve
+ Status=gre0
+ '[' gre0 == ppp0 ']'
+ (( i++ ))
+ (( i<=11 ))
++ snmpgetnext -v2c -c public 192.168.XXX.XXX .1.3.6.1.2.1.31.1.1.1.1.8 -Oqve
+ Status=gretap0
+ '[' gretap0 == ppp0 ']'
+ (( i++ ))
+ (( i<=11 ))
++ snmpgetnext -v2c -c public 192.168.XXX.XXX .1.3.6.1.2.1.31.1.1.1.1.9 -Oqve
+ Status=tun0
+ '[' tun0 == ppp0 ']'
+ (( i++ ))
+ (( i<=11 ))
++ snmpgetnext -v2c -c public 192.168.XXX.XXX .1.3.6.1.2.1.31.1.1.1.1.10 -Oqve
+ Status=tun0
+ '[' tun0 == ppp0 ']'
+ (( i++ ))
+ (( i<=11 ))
++ snmpgetnext -v2c -c public 192.168.XXX.XXX .1.3.6.1.2.1.31.1.1.1.1.11 -Oqve
+ Status=tun0
+ '[' tun0 == ppp0 ']'
+ (( i++ ))
+ (( i<=11 ))
+ '[' tun0 == ppp0 ']'
+ Status=2
+ echo 2
2

Benutzeravatar
Erik
Securepoint
Beiträge: 1480
Registriert: Fr 07.11.2008, 11:50

Beitrag von Erik »

Der Fehler ist, dass Sie erst die Anzahl der Interfaces ausgeben und dann von 0..x über die OIDs laufen. Die letzte Zahl in der OID wird aber nicht fortlaufend vergeben, sondern kann auch Lücken aufweisen. In kompakt geht es so:

Code: Alles auswählen

IP=192.0.2.1
COMMUNITY=public
INTERFACE=ppp0
snmpget -v 2c -c ${COMMUNITY} ${IP} -Oqve .1.3.6.1.2.1.2.2.1.8.$(snmpwalk -v 2c -c ${COMMUNITY} ${IP} -On .1.3.6.1.2.1.31.1.1.1.1 | grep ${INTERFACE} | awk '{print $1}' | awk -F. '{print $13}')

monstermania
Beiträge: 40
Registriert: Do 27.03.2014, 12:44
Wohnort: Hamburg

Beitrag von monstermania »

Danke!
Hat geklappt

monstermania
Beiträge: 40
Registriert: Do 27.03.2014, 12:44
Wohnort: Hamburg

Beitrag von monstermania »

Hallo Erik,
klappt leider doch nicht (immer).
Heute hatten wir wieder mal einen Ausfall unserer Internetanbindung.
Das Script brachte aber nur folgende Fehlermeldung:

Code: Alles auswählen

snmp_build: unknown failuresnmpget: Error building ASN.1 representation (Can't build OID for variable)

Benutzeravatar
Erik
Securepoint
Beiträge: 1480
Registriert: Fr 07.11.2008, 11:50

Beitrag von Erik »

Das ist nicht weiter verwunderlich. In meinem Einzeiler ist keinerlei Fehlerbehandlung enthalten. Wenn ppp0 nicht da ist, gibt das innere Command nichts zurück und somit bekommt das äußere keine korrekte OID. Splitten Sie die beiden Befehle einfach auf und prüfen, ob der erste eine Rückgabe liefert.

Antworten