"Hintertür" in den Server: Asterisk "Remote Console"
Manchmal passiert es doch, dass sich irgendwas im Netzwerk aufhängt oder die Internetverbindung vom WLAN genau dann stirbt wenn man nicht da ist. Durch die dynamische IP Adresse ist es es schon öfter passiert, dass ich gar keinen Zugriff mehr vom Internet aus hatte, weil die DNS-Server noch nicht upgedatet waren. Hier beschreibe ich ein kleines Script, das dabei helfen kann, das Netzwerk von extern wieder zum Laufen zu bekommen auch wenn das Internet nicht geht. Denn das stabile Telephonnetz fällt selten aus. So kann man sich einfach mit einem normalen Telephon am Server verbinden und die wichtigsten "Rescue"-Befehle manuell absetzen. Allerdings ist Vorraussetzung dass der Server bzw. Asterisk nicht abgestürzt ist ;-)
Im Dialplan wird beim externen Kontext auf “s@console” verwiesen:
context console {
s => {
Authenticate(secret-numbers);
jump 0;
};
0 => {
AGI(server-console.agi,0);
Playback(beep);
WaitExten(5);
jump 0;
};
_[1-9] => {
AGI(server-console.agi,${EXTEN});
jump 0;
};
};
Dort wird nach einem Passwort gefragt. Wird dieses dreimal gültig eingegeben, so wird aufgelegt. Ist es korrekt so wird das Menü der "Admin-Konsole" angesagt. Der Einfachheit halber (und da eh nur für mich bestimmt) wird der Text "on-the-fly" per TTS generiert (siehe Script). Nach der Ansage wird ganz einfach auf die Eingabe einer Ziffer gewartet (per DTMF) und der entsprechende Befehl per AGI Script gestartet (server-console.agi mit der Ziffer als Parameter).
Bis jetzt kann das Script:
- Die IP Adressen der beiden Internetzugänge ausgeben, d.h. sowohl vom ISDN zu Hause als auch vom xDSL vom WLAN. So hat man zumindest doppelte Chancen, z.B. per ssh ins System zu gelangen auch wenn die IP Adresse abhanden gekommen ist
- Den Server neu starten. Da das nicht ungefährlich ist, wird noch einmal nachgefragt. Aber auch das kann von extern sehr nützlich sein
- Netzwerkstatus ausgeben lassen. Schrittweise werden alle wichtigen Stationen sowohl im internen LAN als auch im Wireless LAN bis ins Internet überprüft und der Status ausgegeben. So kann zumindest schon einmal festgestellt werden, welches Gerät oder Service sich ggf. verabschiedet hat
- Ping starten. Ist das nicht genug, so können beliebige IP Adressen eingegeben werden und auf Verfügbarkeit geprüft werden. Zum Beispiel einzelne Accesspoints im WLAN um dann den betreffenden Haushalt anzurufen, den Accesspoint zu resetten.
- Ianus (Internetgateway WLAN) neu starten. Das könnte am nützlichsten sein. Vielleicht hat sich das verdammte Modem wieder einmal verabschiedet. Notfalls kann dann der ianus einfach neu gestartet werden.
Wirklich toll wäre es ja noch, "Notfallsbefehle" eingeben zu können, aber dadurch, dass nur Zahlen unterstützt werden ist mir das zu mühsam. Vielleicht fallen mir ja noch ein paar "Sinnlosigkeiten" ein ;-)
Für Implementierungsdetails hab ich das AGI-Script online gestellt:
Wie man dem Sourcecode entnehmen kann, spiele ich immer MusicOnHold ab, während die Scripte laufen. Das einzige was ich noch nicht geschafft habe ist DTMF Erkennung während eines AGI-Scripts.
Das Script für den Netzwerkstatus ist denkbar einfach:
Direkt erreichbare Systeme werden einfach gepingt, und zwar mit einem speziellen ping der ‘-w’ unterstützt. Vorteil ist, das maximal für die Zeit $w gewartet wird, in dieser Zeit aber alle 200ms Pakete rausgeschickt werden und ping abbricht, sobald die erste Antwort kommt.
Das Internet vom ianus wird dann über ssh über public-key kontrolliert. Verbessern könnte man noch, dass beim public key sowieso nur der ping-Befehl zugelassen wird. Aber nachdem ianus sowieso nur von dem einen Rechner aus erreichbar ist, zusätzlich als normaler Benutzer und zusätzlich geschütztem public-key sollte das nicht so ein Problem sein.
Kommentare
<comments />Diskussion:"Hintertür" in den Server: Asterisk "Remote Console"