LinuxNetMag
Modem im LAN teilen
Archiv | Home
Inhalt
   
LinuxNetMag #4

  Software
 Aktuell
kurz vorgestellt
 HTML
Web Preprozessor
HTML-Editoren
 Internetradio
eigene Radiostation
Web-Jukebox IceDJ
 Spiele
Rennspiele
Entwicklung: XTux
 Astronomie
Sternenkarten
Flug durch Sonnensystem
Doppelsterne simulieren
  
 

Hardware

Kernel kompilieren
Soundkarte als Oszilloskop
Grafikkarten im Vergleich
  
 

Netzwerk

Web-Seiten überprüfen
Samba Teil II
Chat für Ihre Homepage
FTP-Server & Clients
Modem-sharing
Links
  
 Wissen
Der Bootprozeß
Gimp-Kurs Teil 1
Gimp-Kurs Teil 2
  
 

Sonstiges

Mailing-Liste
Gästebuch
Artikelliste
Unterstützen Sie uns !
zurück zur Hauptseite



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.)

Netztopologie

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.

DialControl

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.

Server starten

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

Clients

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.

andere Lösungen

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

 

Weitere Ausgaben Linux NetMag
[ #1 | #2 | #3 | #4 | Main ]