Konsolenserver unter Linux im Eigenbau
Wozu das Ganze?
In jedem Rechnerraum und Rechenzentrum finden sich viele Geräte die sich
über einen seriellen Port bedienen lassen. So haben beispielsweise alle Router und Switche
von Cisco einen seriellen Anschluss. Viele Servermodelle von SUN lassen sich ebenfalls
seriell administrieren.
Um auf diese seriellen Schnittstellen über das Netzwerk zuzugreifen gibt es eine Reihe
von kommerziellen Lösungen.
Marktführer auf diesem Gebiet ist die Firma Cyclades.
Für viele Anwendungsfälle reicht aber eine PC-Lösung auf Basis von freier Software aus.
Konsolenserver im Eigenbau
Für die Eigenbaulösung benötigen wir lediglich einen einfachen Linux-PC mit der entsprechenden
Anzahl serieller Schnittstellen und einem Netzwerkinterface.
Die Software ser2net von Corey Minyard erledigt den Rest.
Prinzipdarstellung eines Konsolenservers
Über die seriellen Schnittstellen wird der Konsolenserver mit den zu steuernden Geräten verbunden.
Der Zugriff des Administrators kann dann über das Netzwerk erfolgen.
Installation von ser2net
Unter Debian reicht ein "apt-get install ser2net" für die Installation.
Aber auch die Installation aus dem Sourcecode ist kein Problem.
Zuerst laden wir uns die aktuelle Version von
http://sourceforge.net/projects/ser2net.
Dieses Tutorial basiert auf der Version 2.1.
Nach dem Download entpacken wir das Archiv mittels tar.
[mk] ~/download $ tar xvzf ser2net-2.1.tar.gz
ser2net-2.1/
ser2net-2.1/Makefile.in
ser2net-2.1/README
ser2net-2.1/AUTHORS
ser2net-2.1/COPYING
.
.
.
ser2net-2.1/readconfig.h
ser2net-2.1/selector.h
ser2net-2.1/utils.h
ser2net-2.1/telnet.h
ser2net-2.1/ser2net.8
ser2net-2.1/ser2net.conf
ser2net-2.1/ser2net.spec
Nach dem Entpacken wird in das Verzeichniss "ser2net-2.1" gewechselt und das Übersetzen mit dem Aufruf
von "./configure" vorbereitet.
[mk] ~/download $ cd ser2net-2.1
[mk] ~/download/ser2net-2.1 $ ./configure
creating cache ./config.cache
checking for a BSD compatible install... /bin/install -c
checking whether build environment is sane... yes
.
.
.
checking for main in -lnsl... yes
checking for main in -lwrap... no
updating cache ./config.cache
creating ./config.status
creating Makefile
Läuft configure ohne Fehler durch kann "make" aufgerufen werden.
[mk] ~/download/ser2net-2.1 $ make
gcc -s -DPACKAGE=\"ser2net\" -DVERSION=\"2.1\ ... -c controller.c
gcc -s -DPACKAGE=\"ser2net\" -DVERSION=\"2.1\ ... -c dataxfer.c
gcc -s -DPACKAGE=\"ser2net\" -DVERSION=\"2.1\ ... -c devcfg.c
gcc -s -DPACKAGE=\"ser2net\" -DVERSION=\"2.1\ ... -c readconfig.c
gcc -s -DPACKAGE=\"ser2net\" -DVERSION=\"2.1\ ... -c selector.c
gcc -s -DPACKAGE=\"ser2net\" -DVERSION=\"2.1\ ... -c ser2net.c
gcc -s -DPACKAGE=\"ser2net\" -DVERSION=\"2.1\ ... -c utils.c
gcc -s -DPACKAGE=\"ser2net\" -DVERSION=\"2.1\ ... -c telnet.c
/bin/sh ./libtool --mode=link gcc -s -Wall -O3 -march=i686 -o ser2net ...
mkdir .libs
gcc -s -Wall -O3 -march=i686 -o ser2net controller.o dataxfer.o ...
Für die Installation mit dem Aufruf "make install" sind Rootrechte erforderlich.
[root] ~/download/ser2net-2.1 $ make install
make[1]: Entering directory `/root/download/ser2net-2.1'
/bin/sh ./mkinstalldirs /usr/local/sbin
/bin/sh ./libtool --mode=install /bin/install -c ser2net /usr/local/sbin/ser2net
/bin/install -c ser2net /usr/local/sbin/ser2net
make install-man8
make[2]: Entering directory `/root/download/ser2net-2.1'
/bin/sh ./mkinstalldirs /usr/local/man/man8
/bin/install -c -m 644 ./ser2net.8 /usr/local/man/man8/ser2net.8
make[2]: Leaving directory `/root/download/ser2net-2.1'
make[1]: Leaving directory `/root/download/ser2net-2.1'
Damit ist ser2net installiert und bereit zum Einsatz.
Konfiguration und Test
Die Konfiguration erfolgt über die Datei "/etc/ser2net.conf".
In dieser Datei wird die Verbindung zwischen den seriellen Devices und
den TCP-Ports hergestellt.
Für jede Schnittstelle ist ein Eintrag im Format
<TCP port>:<state>:<timeout>:<device>:<options>
erforderlich. Sehen wir uns den Aufbau der Konfigurationsdatei von ser2net
an einem Beispiel an:
2021:telnet:30:/dev/ttyS0:9600
2022:telnet:30:/dev/ttyS1:19200
2023:telnet:60:/dev/ttyS2:19200
Der erste Eintrag verbindet die Schnittstelle /dev/ttyS0 (COM1) mit dem TCP-Port 2021.
Als Protokoll wird Telnet genutzt und die Übertragungsrate wird auf 9600 Bit/s
eingestellt. Über weitere Einstellungsmöglichkeiten informiert die
Manualpage von ser2net (man ser2net).
Nun ist es Zeit für einen ersten Test. ser2net wird mit dem Kommando
[mk] ~ $ ser2net -d -p 3000
aufgerufen.
Der Parameter "-d" verhindert das ser2net als Hintergrundprozess startet.
Um nun eine Verbindung zu einem seriellen Port herzustellen starten wir
eine Telnetsitzung zur Linuxbox mit zusätzlicher Angabe der Portnummer.
[mk] ~ $ telnet localhost 2023
Trying 127.0.0.1...
Connected to lfs.
Escape character is '^]'.
Nun sind wir via Telnet mit dem Port 2023 (/dev/ttyS2) verbunden
und können wie gewohnt das dort angeschlossene Gerät administrieren.
Der Aufbau der Telnetsession ist natürlich von jedem Betriebssystem und
mit einem belibiegen Telnetclient möglich.
Eine Kontrolle der bestehenden Verbindungen von ser2net erfolgt
über der Controlport (-p 3000).
Über eine Telnetseitzung auf den Port 3000 können wir Verbindungsparameter
ansehen und verändern.
[mk] ~ $ telnet localhost 3000
Trying 127.0.0.1...
Connected to lfs.
Escape character is '^]'.
-> showport
TCP Port 2023
enable state: telnet
timeout: 30
connected to (or last connection): 127.0.0.1:32772
device: /dev/ttyS2
device config: 19200 1STOPBIT 8DATABITS NONE
device controls: RTSHI DTRHI
tcp to device state: waiting input
device to tcp state: waiting input
bytes read from TCP: 9
bytes written to TCP: 0
bytes read from device: 0
bytes written to device: 0
Das Beispiel zeigt die Ausgabe des Kommandos "showport".
Damit ist der Aufbau unseres Konsolenserver praktisch abgeschlossen.
ser2net kann in die Initscripte eingebunden werden und startet dann automatisch.
Sicherheit
Die seriellen Konsolen vieler Geräte geben dem Benutzer weitreichende Zugriffsrechte.
Sicherheit spielt daher eine bedeutende Rolle.
ser2net bietet die Möglichkeit des hostbasierenden Zugriffsschutzes per TCP Wrapper.
Interessant wäre hier zusätzlich eine Schnittstelle zu RADIUS oder TACACS.
Aber ser2net ist ja Open Souce und dadurch flexibel erweiterbar.
Serielle Schnittstellenkarten
Gerade in einem Konsolenserver möchte man viele serielle Schnittstellen haben.
Es gibt am Markt eine ganz Reihe von Anbietern für serielle Schnittstellenkarten
mit 4, 8 oder 16 Ports.
Perle
PC Bau
Vision Systems
Kolter
Decision Computer
Die genannten Firmen haben alle entsprechende Karten mit Unterstützung von Linux
im Programm.
Unser Konsolenserver ist ist betriebsbereit und wartet auf seinen Einsatz.
Anregungen und Erfahrungsberichte per Mail oder über das Feedbackformular sind mir
jederzeit willkommen.
|