Er wordt verondersteld dat de server een Linux systeem is met:
een modem gekoppeld aan een /dev/ttySx device
of een geëmuleerd 'isdn4linux' modem ingedeeld als een /dev/ttyIx device
De makkelijkste setup die ik kan bedenken maakt gebruik van een vijfregelig perlscript om een modem daemon in /usr/sbin/modemd te implementeren:
#!/usr/bin/perl select((select(STDOUT), $| = 1)[$[]); select((select(STDIN), $| = 1)[$[]); exec 'cu -s 115200 -l /dev/ttyS1'; die '$0: Cant exec cu: $!\n'; |
De modem daemon wordt gestart door het inetd proces als een client een verbinding maakt met de van toepassing zijnde poort zoals hieronder beschreven. De modemd verbindt simpelweg de socket handle met STDIN en STDOUT van de opdracht cu en laat cu het feitelijke modemdevice afhandelen.
Het bestaan van de modemdaemon moet bekend worden gemaakt aan het inetd proces door zijn configuratiebestand bij te werken, gewoonlijk /etc/inetd.conf:
# # modem daemon # modem stream tcp nowait root /usr/sbin/tcpd /usr/sbin/modemd /dev/ttyS1 |
Om dit werkend te krijgen, moet in /etc/services een regel toegevoegd worden:
modem 2006/tcp modemd |
Dit verbindt een symbolische naam aan een expliciete poort, in dit voorbeeld 2006. Het poortnummer kan elk nummer zijn zolang het nog niet is toegekend aan een bestaande service. Nadat deze wijzigingen zijn aangebracht, moet een signaal naar het inetd proces worden gezonden waardoor inetd zijn configuratiebestand opnieuw inleest en het verwerkt:
bash# ps | grep inetd 194 ? S 0:00 /usr/sbin/inetd bash# kill -HUP 194 |
Nu is de server zover dat het verzoeken van clients accepteert. Het correcte functioneren kan worden geverifieerd met:
bash$ telnet localhost modem Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. |
Je hebt nu een verbinding met de modem tot stand gebracht. Je kunt nu AT opdrachten uitvoeren om de setup te verifi¨ren:
atz atz OK ati1 ati1 Linux ISDN OK ^] telnet>quit bash$ |
Als vervanging van het Perlscript als modemserver, kan ook een programma genaamd Masqdialer worden gebruikt, wat beschikbaar is op http://w3.cpwright.com/mserver/.
Met Masqdialer kun je elk aantal modems verbonden met je server exporteren naar elke host die een verbinding met de server kan maken via TCP/IP op een gegeven poort met een binaire gegevensstroom.
Controleer voor de compilatie de opties in config.h:
stel naar wens het pad in voor het configuratiebestand
stel naar wens het pad in voor het lockbestand
Voer uit: make all.
Kopieer de binaire bestanden (mserver en tcpconn) naar een geschikte directory, zoals /usr/local/sbin/. Kopieer mserver.conf naar de lokatie die je hebt opgegeven in config.h.
Masqdialer zou kunnen worden opgestart vanuit één van de systeemopstartscripts. Een eenvoudig /usr/local/sbin/mserver zal het als een daemon uitvoeren.
Een regel in mserver.conf zou er zo uit kunnen zien:
5800 /dev/ttyS1 115200,8,N,1 *.foo.org,192.168.2.1 |
wat zou betekenen dat een moden aangesloten op /dev/ttyS1 via poort 5800 overal vandaan in het domein foo.org en vanaf host 192.168.2.1 een verbinding kan maken. Alle andere hosts worden geweigerd. Valkuil: Als je geen hosts opgeeft dan zal ELKE host een verbinding tot stand kunnen brengen. De instellingen van de seriële lijn zijn vast en deze kunnen vanaf de client niet worden gewijzigd. Je kunt op een enkele poort verscheidene modems exporteren. Masqdialer plaats alleen een lock op modemdevices via lockbestanden in de stijl van UUCP wanneer ze werkelijk in gebruik zijn, dus andere programma's de mogelijkheid bieden er gebruik van te maken.