home   artikelen   forum   colofon  
Gepubliceerd op 12.10.2001
Auteur: Ronny Ziegler
Vertaald door: Guus Snijders
Languages: en de
Help Ons!
 

Modem delen

We hebben reeds verteld hoe je een LAN met het Internet kunt verbinden met een enkele telefoonlijn en IP masquerading... (Artikel over masquerading),
maar hoe kun je je modem of ISDN kaart de ISP laten bellen als je geen root toegang hebt?

(In dit artikel beschrijven we niet hoe je je modem of ISDN kaart configureert voor de verbinding met het Internet. Die stap moet al compleet zijn, anders heeft dit artikel geen nut.)

Topology van een netwerk

Hieronder presenteren we hoe een typisch Local Area Network (LAN) eruit ziet:
Een PC, gebruikt als server en eventueel ook als client, zet de Internet verbinding op met een modem of ISDN kaart.
Met behulp van IP masquerading op de server, krijgen alle computers in het LAN toegang tot het Internet. Daarvoor moeten ze de server gebruiken als de gateway.

Als je de verbinding wilt starten vanaf een client, dien je eerst in te loggen op de server, met bijvoorbeeld telnet en op de server het juiste dial-in script starten.
In het geval van ISDN, gebruik je het commando:

  >> isdnctrl dial ippp0
  
Dit werkt echter alleen als je root-toegang hebt op de server.
Het zou niet verstandig zijn om iedere LAN gebruiker het root wachtwoord te geven en ook niet om de permissies van het modem gebruik te verzachten. Beide methoden kunnen grote beveiligings-problemen geven.

DialControl

Een erg aardige manier om deze problemen te voorkomen is de installatie van een programma dat op de server PC als root draait. Deze accepteert speciale commando's van de client programma's via het netwerk. Vanaf de client stuur je dan aanvragen voor een Internetverbinding en de server zet die dan op.
DialControl biedt een dergelijk software pakket, compleet met een server en het bijbehorende client programma voor verschillende platformen, zoals M$ Win, Linux, en Java-VM.

We kijken eerst naar de installatie van de DialControl server op de gateway PC (dit is de server PC in de schets).
Haal de nieuwste versie van de DialControl server op van http://homepage.swissonline.net/allenfuchs/stefan/dc/ en installeer het pakket in /usr/local. Hier wordt de directory /2-dial-control gemaakt, samen met de subdirectory Server.
De server configureer je via het bestand /etc/dialsrv.conf.
Dit bestand komt er ongeveer zo uit te zien:

/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
  

Met de optie
  interface ippp0
  
selecteer je het apparaat dat wordt gebruikt voor de Internetverbinding. ippp0 staat voor een ISDN kaart, ppp0 voor een analoge modem.
De volgende regel
  con_type file
  
stelt de methode in die de server gebruikt om te controleren of de verbinding met succes is gestart.
De methode netdev wordt aangeraden voor modems, isdn voor ISDN kaarten en file als geen van beide werkt.
De laatste controleert of een speciaal bestand bestaat. Als dit niet het geval is, "weet" het programma dat de verbinding niet actief is.
Deze methode -een beetje vreemd- is de eenvoudigste en ook meest flexibele in het gebruik omdat andere programma's ook gebruik kunnen maken van deze controle methode. Op deze manier kun je een Internetverbinding systeembreed maken (eventuele beveiligingsproblemen dienen zelf te worden gecontroleerd door de beheerders).

Wij besloten om cont_type file te gebruiken omdat we dan zeker zijn dat de server werkelijk een bestaande verbinding herkent.
Het bestand wordt gemaakt als een verbinding wordt opgezet. Dit kun je eenvoudig doen via het ip-up script (in /etc/ppp/, omdat dit script wordt uitgevoerd tijdens het verbinden.

Voeg de volgende regel toe aan het script:

  touch /tmp/.ippp0_up
  
(Als je niet wilt dat andere gebruikers dit bestand kunnen zien en zo weten over de Internetverbinding, zou je het in een directory moeten plaatsen die alleen door root kan worden gelezen.)

In SuSe zijn ip-up en ip-down gecombineerd in een enkel script. Daarin voeg je de regel toe na de optie

/etc/ppp/ip-up
  [...]
     case "$BASENAME" in
      ip-up)
        #
        #Hier zijn nog veel meer ander entries
        touch /tmp/.ippp0_up
      ;;
  [...]
  

Om er zeker van te zijn dat het bestand wordt verwijderd als de verbinding wordt gestopt, voeg je de entry

  rm /tmp/.ippp0_up
  
toe aan het ip-down script. In SuSE, voeg je het toe onder de optie ip-down).

Vervolgens geef je de scripts op die nodig zijn om de Internetverbinding te starten of stoppen.
Daarvoor kun je het beste een subdirectory maken met de naam dctest in de /etc/ directory.

  >>mkdir /etc/dctest
  
Hierin plaats je twee scripts die verantwoordelijk zijn voor het openen en sluiten van de Internetverbinding.

/etc/dctest/up
   #!/bin/sh
   isdnctrl dial ippp0
  

In het script gebruik je gewoon het commando dat je voorheen gebruikte om de verbinding met de provider te starten. Met ISDN is dit isdnctrl dial ippp0. Er is ook een ander script nodig voor het stoppen van de verbinding:

/etc/dctest/down
   #!/bin/sh
   isdnctrl hangup ippp0
  

De entry

  con_status_file /tmp/.ippp0_up
  
definieert het bestand waarmee wordt gecontroleerd of de verbinding reeds actief is of niet.

  con_timeout 30
  
zet de wachttijd voor een geslaagde verbinding. Als deze tijd is verlopen, wordt de verbinding als mislukt beschouwd. Deze tijd is afhankelijk van de snelheid van de modem aan de andere kant van de lijn en het aantal scripts dat gebruikt wordt door je PC tijdens het starten van de verbinding. Deze waarde moet je aanpassen aan jouw systeem.

De volgende twee entries

  bind_to 192.168.1.1
  port 16007
  
definiëren het IP nummer en de poort van de server.

  send_throughput yes
  pinger no
  
zou onveranderd moeten blijven.

Tenslotte geef je de computers op vanaf waar je de verbinding kunt controleren. filter_type allow filter_ip 192.168.1.2 192.168.1.50 filter_mask 127.0.0.0 255.255.255.0 De entry filter_type allow staat ieder IP dat is opgegeven in filter_ip toe om een verbinding op te zetten. Alle IPs die hier niet worden genoemd, hebben geen toegang.

Met filter_type deny kun je deze regel aanpassen. Alle hier genoemde computers hebben geen toegang, alle overige wel (dit zou niet gebruikt moeten worden in grote netwerken, omdat het problemen met beveiliging kan opleveren).

Na filter_ip geef je twee IP nummers op die een IP-bereik zetten. Het gedefinieerde filter_type wordt gebruikt voor alle IPs die in dit bereik vallen. filter_mask geeft het subnet (als je niet weet wat er wordt bedoeld, kun je de hier gebruikte waarden gebruiken, dit werkt in de meeste gevallen).
Je kunt iedere filter_* entry meerdere keren gebruiken.

start de server

Om logins op de server te voorkomen (daarvoor hebben we DialControl geïnstalleerd), zou je de DialControl server tijdens het opstarten moeten starten.
Daarvoor is een init-script of een entry in /sbin/init.d/boot.local (voor SuSE) of in /etc/Rc.d/rc.local (voor RedHat) zoals

  /usr/local/2-dial-control/server/dialsrv &
  

voldoende.
Als je de server op specifieke tijden wilt gebruiken (de telefoonkosten zijn lager tussen 18.00 en 6.00 uur), kun je gebruik maken van cron.

  >>crontab -e
  
Vervolgens voeg je de regels
  0 18 * * * /usr/local/2-dial-control/server/dialsrv &
  0 6  * * * killall dialsrv
  
toe.

Clients

Nu zullen we het deel bekijken dat de gebruiker ziet. De server werkt stilletjes en alleen de clients communiceren met de server.
Voor linux bestaan er een terminal- en een grafisch front-end, genaamd XDC; deze gebruikt GTK.

De configuratie van de client is erg simpel. Via het menu kun je het IP adres en poort nummer van de DialControl server instellen. Beide waarden staan in het configuratie bestand van de server:

  bind_to 192.168.1.1
  port 16007
  
Verder kun je het proces voor het automatische bellen en ophangen instellen.
Selecteer de entry Server->Connect in het menu en de verbinding met de server wordt opgezet. De actuele status van de inbelverbinding wordt weergegeven in de infobalk, onderin het venster.
Een druk op de knop Dial start de Internetverbinding op de server en in de statusbalk verschijnt een ONLINE als deze met succes werd opgezet. Hangup stopt de verbinding als je de laatste gebruiker was. Als meer dan een gebruiker was verbonden met de server en alle gebruikers hadden op "dial" gedrukt, zou de server de lijn pas ophangen als alle gebruikers op "Hangup" hadden gedrukt.
Er zijn uiteraard ook M$ Win clients beschikbaar, voor alle andere OS'en is er een Java versie beschikbaar.

andere oplossingen

DialControl is niet de enige applicatie die een inbelverbinding voor een LAN kan opzetten. Er zijn andere programma's die hetzelfde doen, maar de installatie van DialControl is veel eenvoudiger dan die van de anderen.

Masqdialer Server heeft de voorkeur van veel gebruikers. Deze biedt veel mogelijke configuraties en een wachtwoord optie. Verder ondersteund Masqdialer inbelverbindingen bij meerdere providers en kan de gebruiker hier uit kiezen.
Voor deze server bestaat er een grote verzameling clients voor verschillende OS'en.
Al deze features laten zich betalen met een veel lastiger installatie en configuratie proces.
Als de mogelijkheden van DialControl niet volstaan voor jouw systeem en je het wilt uitbreiden met scripts, denk dan eens aan Masqdialer in combinatie met een Python client. Met die combinatie is ieder probleem met relatief weinig inspanning op te lossen.


Links:
Homepage DialControl: http://homepage.swissonline.net/allenfuchs/stefan/dc/
Homepage Masqdialer Server: http://cpwright.villagenet.com/mserver/