Ein 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"