Feste IP-Adresse mit Cisco EEM sicherstellen

codswollop / photocase.comEin ADSL-Anschluss mit fester IP-Adresse hat den Vorteil, sowohl relativ preiswert aber dennoch sehr flexibel einsetzbar zu sein. Wenn wenig Upstream-Bandbreite benötigt wird, aber dennoch Serverdienste oder ein VPN betrieben werden soll.

Leider hat mindestens ein ADSL-Anbieter das Problem, dass gelegentlich zwar die Neueinwahl nach der Zwangstrennung funktioniert, aber nicht die korrekte feste IP-Adresse übermittelt wird. Um dieses Problem automatisch zu beheben habe ich dieses Skript für den Cisco Event Manager (EEM) entwickelt. Es prüft nach erneuter Einwahl, ob das Dialer-Interface die korrekte IP-Adresse erhalten hat. Falls nicht, wird eine neue Einwahl erzwungen.

Zuerst definiere ich ein paar Variablen, nämlich den Interfacenamen des Dialer-Interfaces sowie die zugeteilte feste IP-Adresse:

event manager environment _dialer_interface Dialer0
event manager environment _static_ip 192.0.2.47

Um den Code zu testen, habe ich folgendes EEM-Skript auf dem Router hinterlegt:

event manager applet showIP 
 event none sync yes
 action 100 cli command "enable"
 action 110 cli command "show ip interface brief | include $_dialer_interface"
 action 120 puts "CLI-Result: *$_cli_result*"
 action 130 set result "unknown"
 action 140 regexp " [0-9.]+ " "$_cli_result" result
 action 150 puts "IP address=*$result*"
!

Dieses kann man folgendermassen aufrufen, um sicherzustellen, dass das Ermitteln der IP-Adresse funktioniert:

router#event manager run showIP
CLI-Result: *Dialer0                    192.0.2.47   YES IPCP   up                    up      
router#*
IP address=* 192.0.2.47 *

Das sieht doch sehr gut aus! Nun können wir das eigentliche EEM-Skript installieren, das auf die Logzeile reagiert, die das Einwählen verkündet:

Mar 14 23:47:42.123: %DIALER-6-BIND: Interface Vi1 bound to profile Di0

Dieses Skript lautet wie folgt:

event manager applet DialerUp 
 event syslog occurs 1 pattern "%DIALER-6-BIND:"
 action 100 cli command "show ip interface brief | include $_dialer_interface"
 action 110 set ipaddress "unknown"
 action 120 regexp " ([0-9.]+) " "$_cli_result" match ipaddress
 action 130 if $ipaddress ne $_static_ip
 action 140  syslog priority errors msg "clearing $_dialer_interface because $ipaddress is not $_static_ip"
 action 150  cli command "enable"
 action 160  cli command "clear interface $_dialer_interface"
 action 170 else
 action 180  syslog priority errors msg "correct address on $_dialer_interface: $ipaddress"
 action 190 end
!

Testen lässt sich dies, indem man temporär die Variable _static_ip auf eine andere als die eigentlich zuzuteilende setzt. Wenn man dann eine Einwahl erzwingt sollte der Router sie jedes Mal wieder zurücksetzen, bis man die Variable wieder auf den korrekten Wert gesetzt hat.

Da wir auf unseren Routern Tacacs einsetzen, muss ein Benutzername gesetzt werden, unter dem die Kommandos ausgeführt werden. Dies macht man mit der folgenden Zeile:

event manager session cli username "cisco"

Leave a Reply