Es geht um redundante Internetanbindungen. Bekommt man diese von seinem Provider installiert, so hat man zwei Router in seinem Rechenzentrum stehen. Beide Router haben eine IP Addresse und halten eine weitere, virtuelle Addresse dei das Gateway darstellt.

Unterschiedliche Bandbreiten

Nun ist es so, dass man nur selten zweimal mit der identischen Bandbreite angebunden wird. Beispielsweise – auch je nach Standort – kann es sein, dass man nur 10% der normalen Leistung auf dem Backupmedium hat. So ist es natürlich wichtig zu wissen wenn die Hauptleitung ausfällt um einerseits das Problem zu melden und auch andererseits vielleicht diverse Dienste abzuschalten. Nur wie kann man erkennen welcher Router gerade aktiv ist? SNMP Zugriff ist meist auf Providerrouter nicht möglich – warum auch immer.

Welcher ist aktiv?

Wir hatten dann zuerst geplant die MAC Addresse über ARP zu prüfen – wenn sie sich ändert wäre der Router umgeschaltet worden. Leider nimmt HSRP (Hot-Standby-Routing-Protocoll) die MAC Addresse mit. Also ging das auch nicht. Was dann ging ist das ganze per traceroute zu machen. Traceroute zeigt als einen Hop eine der festen IPs der Router. Auf diese Weise kann man also bestimmen welcher Router gerade aktiv ist.

Das Script dazu

 

#!/bin/bash

# Dieses Script prueft per traceroute welcher
# Router gerade aktiv ist.
#
# Da wir keinen Zugriff auf die Router haben
# (snmp oder anders) musste das so gemacht werden.
#
# Ronny Becker, 03.2011

# Gateway IPs
PRI_GW=""
SEC_GW=""

# HOPs to GW
GW_HOPCOUNT="2"

# Check Target(s)
TEST_TARGET="www.heise.de www.google.de"

# Do your job
for TARGET in $TEST_TARGET
do
 # run trace
 TRACE=$(traceroute -m $GW_HOPCOUNT $TARGET 2>&1)
 if [ $? != 0 ]
 then
  continue
 fi
 # check if primary matches
 if [[ $TRACE =~ $PRI_GW ]]
 then
  echo "Primary Gateway active"
  exit 0
 fi
 # check if secondary matches
 if [[ $TRACE =~ $SEC_GW ]]
 then
  echo "Seconday Gateway active"
  exit 1
 fi
done

echo "Unknown Gateway status"
exit 2

Das Script ist so gemacht, dass es von Nagios genutzt werden muss. Wer das ganze auf Mail umstellen möchte muss halt ein paar Änderungen vornehmen.