|
|
LinuxNetMag #4
 Druckversion
|
|
Wie man mit Masquerading ein ganzes LAN über eine einzige Telefonverbindung
an das Internet anschließt, wurde bereits erklärt
(Masquerading Artikel).
Wie bringt man aber nun das Modem oder die ISDN-Karte zum Wählen, wenn man
keine root-Rechte besitzt?
(In diesem Artikel wollen wir nicht erklären, wie man die Modem- bzw.
ISDN-Verbindung zum Internet aufbaut, sondern setzen voraus, daß dieser
Schritt bereits funktioniert.)
Das typische lokale Netzwerk (LAN) sieht folgendermaßen aus:
Ein PC, der als Server und möglicherweise gleichzeitig auch als Client
benutzt werden kann, baut die Internetverbindung mittels Modem oder
ISDN-Karte auf.
Per Masquerading erhalten alle am LAN angeschlossenen Rechner Zugriff
auf das Internet, indem sie den Server als Gateway benutzen.
Will man nun von einem Client aus die Internetverbindung aufbauen, so muß
man sich zuerst per telnet auf dem Server einloggen und dort
das notwendige Skript ausführen.
Bei ISDN beispielsweise:
>> isdnctrl dial ippp0
Dies funktioniert aber nur, wenn man auch root-Rechte auf dem Server
erlangen kann.
Nun sollte man aber nicht jedem LAN-Benutzer das root-Paßwort verraten
und auch nicht die Rechte für die Benutzung des Modems lockern, da beides
Sicherheitsprobleme aufwirft.
Ein geschickter Weg, derartige Probleme zu umgehen, ist es, auf dem Server-PC
ein Programm zu installieren, welches mit root-Rechten läuft, und über einen
Netzwerk-Port Befehle von speziellen Client-Programmen annimmt. Vom Client aus
kann man dann dem Server mitteilen, daß nun eine Internetverbindung gewünscht
wird, und der Server baut daraufhin die Verbindung auf.
DialControl bietet ein solches Softwarepaket, bestehend aus einem Server
und dazugehörigen Clients, welche für verschiedene Plattformen existieren
(Windows, Linux, Java-VM).
Als erstes sollte man sich um die Installation des DialControl-Servers
auf dem Gateway-PC kümmern (Server-PC im Diagramm).
Man sollte sich die neueste Version des DialControl-Servers aus dem
Internet von
http://homepage.swissonline.net/allenfuchs/stefan/dc/
holen und das Paket nach /usr/local installieren. Dort wird
dann das Verzeichnis 2-dial-control mit dem Unterverzeichnis
Server eingerichtet.
Konfiguriert wird der Server über die Datei /etc/dialsrv.conf.
Die Datei sollte ungefähr folgendermaßen aussehen:
| /etc/dialsrv.conf |
interface ippp0
con_type file
script_up /etc/dctest/up
script_dn /etc/dctest/down
script_esc /etc/dctest/down
con_status_file /tmp/.ippp0_up
con_timeout 30
bind_to 192.168.1.1
port 16007
send_throughput yes
pinger no
filter_type allow
filter_ip 192.168.1.11 192.168.1.14
filter_mask 127.0.0.0 255.255.255.0
|
Zuerst teilt man dem Server mittels
interface ippp0
mit, welches Device zum Aufbau einer Internetverbindung benutzt wird.
ippp0 steht für eine ISDN-Karte, ppp0 für ein Modem.
Der nächste Eintrag
con_type file
gibt an, über welche Methode der Server erkennen soll, ob eine
Internetverbindung zustande gekommen ist oder nicht.
Die Methode netdev sollte man bei Modems benutzen, isdn
bei einer ISDN-Karte, und file, falls die beiden anderen Methoden
bei Ihnen nicht funktionieren.
Denn die Methode file beruht darauf, daß überprüft wird, ob eine
bestimmte Datei existiert. Wenn ja, nimmt der Server an, daß eine
Internetverbindung besteht. Fehlt die Datei, dann gibt es momentan keine
Verbindung.
Diese etwas ungewöhnliche Methode ist allerdings die am einfachsten
erreichbare und auch am flexibelsten einsetzbare, da auch andere Programme
das Existieren dieser Datei überprüfen können, und somit systemweit bekannt
gegeben werden kann, daß momentan eine Internetverbindung steht. (Damit vielleicht
verbundene Sicherheitsrisiken sollte jeder Administrator selbst abwiegen.)
Wir haben uns hier also für cont_type file entschieden, da wir
mit dieser Methode immer sicher sind, daß der Server auch wirklich eine
bestehende Internetverbindung erkennt.
Nun muß aber die gesuchte Datei auch beim Aufbau der Verbindung erzeugt
werden. Dies geschieht ganz einfach im ip-up-Skript (unter /etc/ppp/),
denn dieses Skript wird beim Aufbauen einer Verbindung ausgeführt.
In diesem Skript fügt man nun im entsprechenden Abschnitt folgenden Eintrag
ein:
touch /tmp/.ippp0_up
(Falls Sie nicht wollen, daß andere Benutzer sehen können, ob momentan eine
Internetverbindung existiert, sollten Sie die Datei in einem nur vom
root lesbaren Verzeichnis ablegen.)
Bei SuSE sind ip-up und ip-down in einem einzigen Skript zusammengefaßt;
dort muß der Eintrag unterhalb der Option
| /etc/ppp/ip-up |
[...]
case "$BASENAME" in
ip-up)
#
#Hier stehen viele andere Einträge
touch /tmp/.ippp0_up
;;
[...]
|
eingetragen werden.
Damit die Datei beim Beenden der Verbindung auch wieder gelöscht wird,
muß entsprechend im ip-down-Skript der Eintrag
rm /tmp/.ippp0_up
eingetragen werden. Bei SuSE natürlich entsprechend unterhalb der Option
ip-down).
Als nächstes müssen wir diejenigen Skripte angeben, die zum Aufbauen bzw.
Abbauen der Internetverbindung benötigt werden.
Dazu legt man am besten im /etc/-Verzeichnis ein Unterverzeichnis dctest an.
>>mkdir /etc/dctest
Und in dieses Unterverzeichnis legt man zwei Skripte,
die einerseits zum Aufbauen und
andererseits zum Abbauen der Verbindung zuständig sind.
| /etc/dctest/up |
#!/bin/sh
isdnctrl dial ippp0
|
In diesem Skript wird einfach nur derjenige Befehl angegeben, der bisher immer
benutzt wurde, um Ihre Internetverbindung aufzubauen, bei ISDN folglich
isdnctrl dial ippp0.
Zum Abbauen der Verbindung benötigen wir auch noch ein Skript:
| /etc/dctest/down |
#!/bin/sh
isdnctrl hangup ippp0
|
Der Eintrag
con_status_file /tmp/.ippp0_up
gibt an, nach welcher Datei gesucht werden muß, um zu entscheiden, ob die
Internetverbindung steht oder nicht.
con_timeout 30
gibt an, nach wievielen Sekunden der Verbindungsaufbau als gescheitert
anzusehen ist. Diese Zeit ist abhängig von der Geschwindigkeit der
Gegenstelle und der Menge an Skripten, die auf Ihrer Seite während
des Aufbauens der Verbindung ausgeführt werden. Der Wert muß also
individuell angepaßt werden.
Die nächsten beiden Einträge
bind_to 192.168.1.1
port 16007
geben an, unter welcher IP-Nummer und unter welchem Port der Server
laufen soll.
send_throughput yes
pinger no
sollte man so lassen.
Zuletzt muß man noch angeben, von welchen Rechnern aus man die
Internetverbindung aufbauen darf.
filter_type allow
filter_ip 192.168.1.2 192.168.1.50
filter_mask 127.0.0.0 255.255.255.0
Mit dem Eintrag filter_type allow wird jedem unter filter_ip
aufgelistetem PC erlaubt, eine Verbindung aufzubauen, alle nicht
aufgelisteten PCs erhalten dieses Recht nicht.
Mittels filter_type deny dreht man die Regel um. Alle aufgeführten
Rechner dürfen keine Verbindung aufbauen, dafür aber alle anderen. (Dies sollte
aus Sicherheitsgründen nicht benutzt werden)
Hinter filter_ip müssen zwei IP-Nummern angegeben werden. Auf alle
innerhalb dieses Intervalls liegenden IP-Nummern wird die angegebene Regel
dann angewendet. filter_mask gibt das Subnet an
(falls Sie nicht wissen, was dies bedeutet, genügt es in den meisten Fällen,
die hier angegebene Werte zu übernehmen).
Es können auch mehrere Einträge von filter_* benutzt werden.
Damit Ihnen das Einloggen auf dem Server erspart wird (und dafür benutzen wir
DialContraol ja gerade), sollte der DialControl-Server beim Booten des Servers
auch gleich automatisch mitgestartet werden.
Dafür eignet sich natürlich die Benutzung eines Init-Skriptes oder ein
Eintrag in /sbin/init.d/boot.local (unter SuSE) bzw. in
/etc/rc.d/rc.local (unter RedHat) der folgenden Art:
/usr/local/2-dial-control/server/dialsrv &
Falls der Server nur zu bestimmten Zeiten (z.B. wegen günstiger
Telefongebühren nur zwischen 18.00 und 6.00 Uhr laufen soll, benötigt man
einen entsprechenden Eintrag in der crontab.
>>crontab -e
Dort fügt man dann die folgenden Zeilen ein.
0 18 * * * /usr/local/2-dial-control/server/dialsrv &
0 6 * * * killall dialsrv
Nun wenden wir uns
demjenigen Teil zu, den der Anwender zu Gesicht
bekommen wird. Während der Server zumeist unbemerkt seine Dienste
anbietet, hat der Anwender nur mit dem Client zu tun.
Unter Linux existiert ein Client für die Konsole und ein grafischer
Clinet namens XDC, der die GTK-Libraries benutzt.
Die Konfiguration des Clients ist ausgesprochen einfach. Über das Menü
erreicht man die Einstellungen, wo man nur die IP-Adresse des
DialControl-Servers angeben muß und die zu benutzende Portnummer.
Beide Werte haben wir in der Konfigurationsdatei des Servers angegeben:
bind_to 192.168.1.1
port 16007
Zusätzlich kann man noch einige Angaben zum automatischen Aufbauen oder
Trennen der Verbindung anstellen.
Mit dem Menüeintrag Server->Connect wird dann die Verbindung zum Server
aufgebaut, und der momentane Status des Servers ist in der Infoleiste des
Fensters sichtbar.
Mit Druck auf den Knopf Dial wird dann die Verbindung aufgebaut und in
der Statusleiste erscheint der Schriftzug ONLINE.
Hangup beendet dann die Verbindung wieder, falls man der einzige Benutzer
ist. Sind mehrere Benutzer gleichzeitig mit dem Server verbunden
und haben alle Dial gewählt, wird die Verbindung auch erst dann wieder
getrennt, wenn auch alle Hangup gewählt haben.
Natürlich existiert auch ein Windows-Client, und für alle anderen
Betriebssysteme ist ein in Java programmierter Client erhältlich.
DialControl ist natürlich nicht die einzige Softwarelösung, um vom LAN
aus die Internetverbindung zu steuern. Es gibt eine Reihe weiterer Programme,
die alle den selben Zweck erfüllen, allerdings erschien uns die Installation
von DialControl am einfachsten.
Besonders beliebt ist unter anderem der
Masqdialer Server,
der sich besonders
durch viele Konfigurationsmöglichkeiten und Paßwort-Schutz auszeichnet.
Zusätzlich unterstützt Masqdialer mehrere Internetzugänge, unter denen
die Clients dann auswählen können.
Außerdem existieren speziell für diesen Server eine große Anzahl an Clients
auf vielen verschiedenen Betriebssystemen.
Leider läßt sich das Programm wegen seiner vielen Konfigurationsmöglichkeiten
auch nur entsprechend umständlich installieren.
Reichen die Möglichkeiten von DialControl nicht aus, und will man stattdessen
mit weiteren Skripten die Einsatzmöglichkeiten erweitern, sollte man
Masqdialer in Verbindung mit einem Python-Client in Betracht ziehen. Mit
dieser Kombination sollte sich eine Lösung für jegliches Problem selbst
basteln lassen.
Links:
Homepage DialControl: http://homepage.swissonline.net/allenfuchs/stefan/dc/
Homepage Masqdialer Server: http://cpwright.villagenet.com/mserver/
Platz für Kommentare & Fragen:
(selbst eintragen)
-dialsrv startet nicht - 6.10., Ralf Gollnick
-RE:dialsrv startet nicht - 7.10., Ronny Ziegler
|