Modem delen
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 ippp0Dit 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:
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 |
interface ippp0selecteer 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 filestelt 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
[...]
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_uptoe 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/dctestHierin plaats je twee scripts die verantwoordelijk zijn voor het openen en sluiten van de Internetverbinding.
#!/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.
De entry
De volgende twee entries
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).
Om logins op de server te voorkomen (daarvoor hebben we DialControl
geïnstalleerd), zou je de DialControl server tijdens het opstarten
moeten starten.
voldoende.
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:
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.
#!/bin/sh
isdnctrl hangup ippp0
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.
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.
Je kunt iedere filter_* entry meerdere keren gebruiken.
start de server
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 &
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.
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
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/