i
Joren Claus Tim Vanden Schrieck 18 november 2008
Inhoudsopgave 1
2
Situatieschets 1.1 Situatieschets . . . . 1.1.1 Het onthaal . 1.1.2 De directie . . 1.1.3 Admins (ICT)
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
HowTo’s 2.1 First things first! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2 Debian installeren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2.1 Handige extra’s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3 Asterisk installeren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.4 Asterisk basis-configuratie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.5 Music on hold . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.5.1 Mp3/ogg bestand omzetten naar een bruikbaar asterisk geluidsformaat(.wav .gsm) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.6 Asterisk-AGI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.6.1 Perl module voor asterisk installeren . . . . . . . . . . . . . . . . . . . 2.7 Openvpn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.7.1 Installatie van Openvpn . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.7.2 Het aanmaken van certificaten . . . . . . . . . . . . . . . . . . . . . . . 2.7.3 bronnen en extra informatie over installatie en certificaten . . . . . . . 2.7.4 Configuratie openvpn . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.7.5 Opstraten van de openvpn server . . . . . . . . . . . . . . . . . . . . . 2.7.6 Problemen bij het opstarten van de openvpn server . . . . . . . . . . . 2.7.7 Automatiseren van start up . . . . . . . . . . . . . . . . . . . . . . . . . 2.7.8 De client starten in linux . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.7.9 Installeren en starten van openvpn client in windows . . . . . . . . . . 2.7.10 Test connectie met server . . . . . . . . . . . . . . . . . . . . . . . . . . 2.8 Open vpn en X-Lite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A Asterisk: Configuratie files A.1 SIP.conf . . . . . . . . . . . . . . . . . . A.2 Extensions.conf . . . . . . . . . . . . . A.2.1 Basis Extensions.conf . . . . . . A.2.2 Probeersels in Extensions.conf
i
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
1 1 1 1 1 3 3 3 4 9 11 13 13 14 14 15 16 16 18 18 20 21 21 22 22 23 23 25 25 27 27 30
Samenvatting Voor ons project van sip hebben we gekozen voor het opzetten van een Asterisk server. Het doel van onze opstelling was om enkele functionaliteiten van Asterisk te testen en aan de hand van onze bevindingen enkele HowTo te schrijven. Onderwerpen die aanbod komen in deze HowTo’s zijn: Debian, Asterisk, OpenVPN, no-ip, ... We hebben ervoor gekozen om deze paper in 3 grote delen op te splitsen. • Hoofdstuk 1: geeft u een gedetailleerder beeld van het (fictief) bedrijf dat wij hebben gebruikt voor onze opstelling • Hoofdstuk 2: Hier vindt u de effectieve HowTo’s van nagenoeg alles wat we hebben ge¨ınstalleerd • Appendix: Hier kan u al onze configuratie bestanden en dergelijke terug vinden. We hopen dat u onze informatie kan gebruiken, wij hebben in elk geval veel geleerd van dit project!
Hoofdstuk 1
Situatieschets 1.1
Situatieschets
Voor de configuratie van ons project zijn we uit gegaan van een fictief bedrijf. Om ervoor te zorgen dat u onze config files in de bijlage in de context kan bekijken schetsen we in dit hoofdstuk hoe ons fictief bedrijf eruit ziet.
1.1.1
Het onthaal
Op het onthaal werken 2 wedewerkers. ´ en van deze medewerkers houd zich bezig met alles omtrend betalingen. vragen die • E´ binnekomen zullen door 1 van beide opgenomen worden.
1.1.2
De directie
Binnen de directie vinden we de directeur en de onderdirecteur. Omdat telefoongesprekken naar de directie mogelijk belangrijke informatie bevatten worden deze opgenomen. Om de directie zo beschikbaar mogelijk te hebben zal een vraag voor de directie eerst doorgeschakeld worden naar de directeur en tegelijk naar de gsm van de directeur. Als de directeur zijn gsm opneemt hoort hij een boodschap dat iemand hem beld voor het werk. Opnemen kan hij door op 1 te drukken, anders kan hij gewoon afleggen. Als de directeur niet opneemt op zijn gsm en ook niet op zijn vast toestel, dan wordt de beller doorgeschakeld naar het vast toestel van de onderdirecteur. Al dit doorschakelen gebeurd transparant voor de beller.
1.1.3
Admins (ICT)
Deze mensen moete de server(s) onderhouden binnen het bedrij. Daarom hebben we voor enkele (systeem) taken uit te voeren het admin menu gemaakt. Dit is een ’verborgen’ menu. Het wordt niet gelezen als een optie in het hoofdmenu. Omdat in dit menu belangerijke acties ondernomen kunnen worden is dit ook beveiligd met een wachtwoord. 1
In dit menu kunnen enkele systeem taken uitgevoerd worden zoals een echo test (alles wat u zegt wordt terug gelezen naar u, om te vertraging tussen u en de server te testen), motd horen & instellen en nog enkele andere dingen.
2
Hoofdstuk 2
HowTo’s 2.1
First things first!
Eerst moeten we een computer of server hebben om alles op te draaien. Wij hebben voor ons project gebruik gemaakt van een Pentium 4, 3Ghz met 1Gb RAM. Deze zou meer dan krachtig genoeg moeten zijn om onze testopstelling te draaien. Voor we iets kunnen beginnen te installeren en/of configureren op ons systeem moeten we een OS installeren. Wij hebben gekozen voor de laatste stable release van debian.
2.2
Debian installeren
In tegenstelling tot Windows is het zeer eenvoudig en beduidend sneller om een debian distro te installeren. De stappen die u hiervoor moet ondernemen zijn de volgende: 1. Download de debian release die u wil gebruiken van de website (www.debian.org) en brand deze op een CD. 2. Steek u pas gebrande CD in uw computer en boot van de CD 3. Wanneer het Debian logo tevoorschijn komt, druk op ’ENTER’ 4. Choose Language: selecteer ’English - English’ 5. Choose Language: selecteer ’other’, selecteer ’Belgium’ in deze lijst 6. Select a keyboard layout: selecteer ’Belgian’ 7. Even geduld... 8. Configure the network: Geef hier de hostname van uw computer in 9. Configure the network: ’Continue...’ 10. Partition disks: selecteer ’Guided - use entire disk’ 11. Partition disks: selecteer de disk (normaal maar 1 mogelijkheid)
3
12. Partition disks: Partitioning scheme ’Create seperate partitions for all folders’ 13. Partition disks: selecteer ’Finish partitioning and write changes to disk’ 14. Partition disks: selecteer ’Yes’ 15. Set up users and passwords: Stel een VEILG root wachtwoord in 16. Set up users and passwords: Maak een gebruiker aan, zorg ervoor dat het wachtwoord veilig en niet hetzelfde is als dat van root 17. Even geduld... 18. Use a network mirror? -> ’Yes’ 19. Configuring the package manager: Debian archive mirror country: ’Belgium’ 20. Configuring the package manager: Debian archive mirror: ’ftp.kulnet. kuleuven.ac.be’ 21. Configuring the package manager: HTTP proxy information ’ENTER’ 22. Configuring popularity-contest: Participate in the package usage survey? ’No’ 23. Software selection: Selecteer ’Standard System’ met spatiebalk 24. Even geduld... 25. Install the GRUB boot loader on a hard disk: ’Yes’ 26. Haal CD uit CD-ROM en druk op ’Continue’ 27. Uw pas ge¨ınstalleerde debian systeem zou nu moeten booten.
2.2.1
Handige extra’s
SSH - installatie en beveiliging Nu hebben we een systeem waarmee we kunnen beginnen te werken. Omdat de server van op afstand toegankelijk moest zijn om eraan te kunnen werken op school hebben we ssh ge¨ınstalleerd. We maken gebruik van ssh omdat dit ons een veilige verbinding kan garanderen in tegenstelling tot bv. telenet. We hebben er ook voor gekozen om de root gebruiker geen login rechten te geven via ssh om het brute forcen van het root wachtwoord tegen te gaan. We gaan ook de poort waarop ssh verbinding maakt veranderen voor de buitenwereld uit veiligheidsoverwegingen. SSH installatie stappen: 1. Zorg ervoor dat u root bent, dit kan door ofwel als root in te loggen ofwel door het commando ’su’ uit te voeren en vervolgens het root wachtwoord in te geven. 4
2. Geef dan het commando: ’apt-get install ssh’ 3. Als er een wachtwoord gevraagd wordt geef dan terug het root wachtwoord in 4. Nu zal uw systeem vragen of hij de gegeven pakketjes mag installeren, antwoord ’yes’ op deze vraag 5. Dan zullen alle nodige pakketjes ge¨ınstalleerd worden en de ssh-deamon zal gestart worden. Als alles goed gegaan is zou ssh nu operationeel moeten zijn. Het is echter geen goed idee om deze standaard configuratie te gebruiken. We gaan er nu voor zorgen dat de root gebruiker niet rechtstreeks kan inloggen via ssh. Dit doen we door de volgende stappen uit te voeren: 1. Zorg ervoor dat u root bent, dit kan door ofwel als root in te loggen ofwel door het commando ’su’ uit te voeren en vervolgens het root wachtwoord in te geven. 2. Geef in: ’cd /etc/ssh’ om naar de map van ssh te gaan 3. Typ in deze map: ’vim ssh config’ om de file aan te passen 4. Uncomment in deze file de lijn die zegt: ’PermitRootLogin no’ 5. Sla vervolgens de file op door het commando ’:wq’ 6. Herstart tot slot de ssh-deamon met het commando ’restart ssh’ Vanaf nu kan de root niet meer inloggen via ssh waardoor het niet meer mogelijk is om het wachtwoord van de root te brute forcen via ssh. Tot slot nog 1 belangrijke aanpassing, die ook voornamelijk te maken heeft met veiligheid. Het aanpassen van de ssh-poort voor de buitenwereld. Standaard maakt ssh gebruik van poort 22. Om dit te veranderen kan u in de file ’/etc/ssh/sshd config’ de poort aanpassen of u kan een poort forwarden naar poort 22 van de server. Hoe dit in zijn werk gaat is afhankelijk van welke router u heeft. Daarom raden wij aan om even te googelen op de term ’portforwarding’. Als u alles heeft ge¨ınstalleerd dan kan u nu zonder probleem het toetsenbord, de muis en het scherm verwijderen van de computer die u gaat gebruiken als server. U kan hem nu van overal binnen uw netwerk of via het internet bereiken. No-ip installatie en automatisch updaten Waarom no-ip, wat is no-ip? Onze server was geconnecteerd met het internet d.m.v. ADSL. Belgacom gaf ons een dynamisch IP. Hierdoor was het zonder maatregelen onmogelijk om altijd ssh toegang te krijgen tot de server.
5
Door middel van no-ip kunnen we gewoon connecteren naar een URL. Deze zal de waarde van het dynamisch IP altijd kennen. De client die we hier gaan installeren zal om het half uur ons ip updaten op de server van no-ip zodat we altijd de mogelijkheid hebben om te connecteren via ssh. Stap 1: maak verbinding via ssh
Zoals u in de afbeelding hierboven kan zien moeten we op dit moment nog geen root zijn. Dit is omwille van beveiligingsredenen, downloaden wordt best niet gedaan door de root. Zorg ervoor dat uw terminal begint met een $-teken. Stap 2: maak een map en download de client
Het eerste commando zal ervoor zorgen dat u een map aanmaakt om de no-ip client in te downloaden en vervolgens zal u direct in deze nieuwe map terechtkomen. Dan kan u beginnen met het downloaden, dit gebeurd in debian met het commando wget. Als dit allemaal gedaan is kunnen we beginnen met het installeren van de client. Stap 3: Code uitpakken en in de directory gaan
6
Deze commando’s zullen de code uitpakken in de huidige folder. Nu hebben we de code en kunnen we beginnen met het installeren. Stap 4: word root
Om de broncode te compileren moet u root zijn. Dit bekomt u door het commando su in te geven. Dan zal het systeem uw root wachtwoord vragen. LET OP: U zal het wachtwoord niet zien verschijnen. Stap 5: Broncode compileren
Nu bent u root, het eerste dat u nu moet doen is de broncode compileren. Typ hiervoor het commando make zoals u ziet in de afbeelding. Uw systeem zal dan een hele hoop gegevens tonen op het scherm, even pauzeren en terug verdergaan. Laat het systeem gewoon doen tot u terug uw #-teken krijgt. Als dit gebeurd is, typt u make install. HELP! een error... Het kan zijn dat u op dit moment een error krijgt die eruit ziet als de onderstaande afbeelding.
7
Als u deze error krijgt heeft uw systeem mogelijk niet de nodige bibliotheken om de broncode te compileren. Dit is eenvoudig op te lossen door de commando’s in de afbeelding in te geven. Deze commando’s zullen de binaries (voor gecompileerde bestanden) kopi¨eren, deze kan u wel installeren met behulp van make install. Stap 6: Configureren
Hier moet u gewoon antwoorden op de vragen die u gesteld worden door het script. U moet de username en het wachtwoord ingeven waarmee u geregistreerd bent op de no-ip website. Een account aanmaken kan u via deze link: www.no-ip.org/newUser.php. Het tijdsinterval mag u laten staan op 30 minuten. Dit heeft ons geen noemenswaardige problemen opgeleverd. Dan heeft u de keuze om een actie te ondernemen als de update succesvol was. Wij hebben dit niet gedaan. Als dit allemaal zonder problemen verlopen is moet u enkel stap 7 nog doorlopen en dan is no-ip klaar om volledig autonoom te werken. HELP! een error...
8
Voer deze stap ENKEL uit als u deze error krijgt! Het probleem is dat de installer een bestand probeert te plaatsen op een plaats die niet bestaat. De logische oplossing, deze map aanmaken. Geef hiervoor het commando mkdir /usr/local/etc zorg ervoor dat u nog steeds root bent als u dit uitvoert. Als dit gedaan is, geeft u terug het commando make install en ga terug naar stap 6. Stap 7: No-ip starten bij boot
Deze stappen zullen ervoor zorgen dat elke keer u het systeem boot dat de no-ip client ook zal geladen en uitgevoerd worden.
2.3
Asterisk installeren
Nu hebben we een werkend systeem dat toegankelijk is van op afstand. Nu is het de moment om met het echte werk te beginnen: de installatie van asterisk! Er zijn verschillende manieren om dit aan te pakken. Wij hebben ervoor gekozen om de broncode te compileren en asterisk zo te installeren. Broncode downloaden Eerst en vooral hebben we de broncode nodig van asterisk om asterisk te kunnen installeren. Via de download knop op de homepage van asterisk kan u te weten komen wat de meest recente versie is. Er is een link opgenomen naar hun FTP-server, waar alle tarballs tevinden zijn. We hebben deze bestanden nodig: 9
• asterisk-1.4-current.tar.gz • asterisk-addons-1.4-current.tar.gz • asterisk-sounds-1.2.1.tar.gz Nu gaan we deze files downloaden. Het is best om deze in de map ’/usr/src’ te zetten. Dit is de map waar u best alle broncodes die u download bewaart om het geheel overzichtelijk te houden. Om de broncode te downloaden naar deze map geef u onderstaande commando’s in. root@Lucy : /home/ r o o t # cd /usr/ s r c root@Lucy : / usr/ s r c # wget f t p :// f t p . digium . com/pub/ a s t e r i s k / a s t e r i s k −1.4− c u r r e n t . t a r . gz root@Lucy : / usr/ s r c # wget f t p :// f t p . digium . com/pub/ a s t e r i s k / a s t e r i s k −addons −1.4− c u r r e n t . t a r . gz root@Lucy : / usr/ s r c # wget f t p :// f t p . digium . com/pub/ a s t e r i s k / a s t e r i s k −sounds − 1 . 2 . 1 . t a r . gz Wanneer deze bestanden binnengehaald zijn, moeten we ze uitpakken. Dat doen we in dezelfde map door middel van de volgende commando’s root@Lucy : / usr/ s r c # t a r −zxvf a s t e r i s k −1.4− c u r r e n t . t a r . gz root@Lucy : / usr/ s r c # t a r −zxvf a s t e r i s k −addons −1.4− c u r r e n t . t a r . gz root@Lucy : / usr/ s r c # t a r −zxvf a s t e r i s k −sounds − 1 . 2 . 1 . t a r . gz De broncode van Asterisk, Asterisk-sounds en Asterisk-addons staat nu in /usr/src/. Broncode compileren en installeren Al onze broncodes zijn nu gedownload en uitgepakt in de map /etc/src. Nu gaan we de code compileren. Asterisk-core We gaan beginnen met asterisk zelf te installeren. Om dit te doen gebruikt u volgende commando’s. root@Lucy : / usr/ s r c # cd a s t e r i s k −1.4− c u r r e n t root@Lucy : usr/ s r c / a s t e r i s k −1.4− c u r r e n t # make root@Lucy : usr/ s r c / a s t e r i s k −1.4− c u r r e n t # make i n s t a l l root@Lucy : usr/ s r c / a s t e r i s k −1.4− c u r r e n t # make samples root@Lucy : usr/ s r c / a s t e r i s k −1.4− c u r r e n t # make c l e a n
10
Asterisk-addons Nu we het core systeem van asterisk hebben ge¨ınstalleerd kunnen we de addons installeren. Dit doen we op nagenoeg dezelfde manier. root@Lucy : / usr/ s r c # cd a s t e r i s k −addons −1.4− c u r r e n t root@Lucy : usr/ s r c / a s t e r i s k −addons −1.4− c u r r e n t # make root@Lucy : usr/ s r c / a s t e r i s k −addons −1.4− c u r r e n t # make i n s t a l l root@Lucy : usr/ s r c / a s t e r i s k −addons −1.4− c u r r e n t # make c l e a n Asterisk-sounds Tot slot gaan we nog wat extra geluiden installeren. Voor de extra geluiden is geen compilatie vereist: er moeten enkel bestanden op de juiste locatie komen te staan. Enkel een make install volstaat dus. root@Lucy : / usr/ s r c # cd a s t e r i s k −sounds − 1 . 2 . 1 root@Lucy : usr/ s r c / a s t e r i s k −sounds − 1 . 2 . 1 # make i n s t a l l
2.4
Asterisk basis-configuratie
Om de configuratie van asterisk duidelijk te maken gaan we een kort voorbeeld geven van wat u moet configureren om te kunnen bellen tussen 2 telefoontoestellen. Eerst en vooral moet u per telefoon een soort van ’account’ aanmaken voor deze telefoon. Via de gegevens die u hier ingeeft zal uw telefoon zich registreren met de server en bepaalde eigenschappen krijgen. Waar u deze ’account’ moet aanmaken hangt af van het protocol dat u toestel gebruikt. Zo zijn er aparte configuratiebestanden voor: • SIP • IAX • ... Wij hebben gebruik gemaakt van X-lite (www.counterpath.com), deze softphone gebruikt het SIP protocol. Voor het gebruik van dit toestel gaan we een ’account’ maken in de sip.conf file. Deze kunnen we vinden onder /etc/asterisk. Voor onze standaard configuratie willen we het mogelijk maken om te bellen tussen 2 toestellen. Dus moeten we logischerwijs ook 2 ’accounts’ aanmaken. Om dit allemaal in orde te krijgen, zetten we de volgende configuratie in sip.conf :
11
[ general ] [100] type= f r i e n d context=default h o s t =dynamic [101] type= f r i e n d context=default h o s t =dynamic LET OP! Dit is niet mooi, niet veilig, niet flexibel, maar het werkt wel. Gebruik deze configuratie daarom enkel voor testdoeleinden. Even snel overlopen wat deze instructies juist doen. • [100] en [101] zijn de nummers van de toestellen. • Door het type op friend te zetten, zeggen we tegen ons systeem dat dit toestel mag bellen alsook gebeld worden. • host=dynamic geeft weer dat het toestel een dynamisch ip heeft. host=192.168.1.23 zou bijvoorbeeld een statisch ip toewijzen aan dit toestel. Tot zover de sip.conf file. Nu hebben onze toestellen een identiteit. Nu moeten we er nog voor zorgen dat ze met elkaar kunnen communiceren door middel van de server. Hoe de toestellen met elkaar moeten communiceren of wat er juist moet gebeuren bij bepaalde acties configureren we in de file extensions.conf. Deze file vinden we ook terug in /etc/asterisk. Om het mogelijk te maken om te kunnen bellen naar elkaar met deze 2 toestellen is het voldoende om het volgende in de extensions.conf file te zetten: [ globals ] [ general ] [ default ] e x t e n => 10X , 1 , D i a l ( SIP/${EXTEN} , 2 0 ) e x t e n => 10X , n , Hangup ( ) Ook hier geldt weer dat dit niet veilig is en best enkel gebruikt wordt voor testopstellingen. Even kort een verklaring: • Deze regels worden binnen asterisk extensions genoemd, vandaar de afkorting exten.
12
• Na de exten vindt u een soort regex: 10X. Als het ingetoetste nummer voldoet aan deze regex wordt de extensie uitgevoerd. 10X wil zeggen elk nummer van 100 tot en met 109. • Vervolgens hebben we een volgorde van stappen. We beginnen bij 1 en gaan verder met n. Deze mogen ook gewoon genummerd worden i.p.v. de ’n’-notatie. • Dan vinden we de applicatie die gebruikt moet worden. In dit geval is dat Dial(). • Dial() krijgt 3 parameters mee. SIP is het protocol dat hij moet gebruiken om de verbinding te maken. ${EXTEN} is een variabele van asterisk zelf. Deze variabele bevat het nummer van het ingetoetste nummer. Tot slot het nummer 20. Dit is in seconden hoelang de telefoon zal rinkelen. • Tot slot, als er binnen de 20 sec niemand opneemt zal er naar de volgende regel in de extentie gegaan worden. Die bevat de applicatie Hangup(). Deze doet wat u denkt, hij hangt op, daardoor wordt de connectie verbroken. Dit is een zeer eenvoudige configuratie. Wil u meer weten over meer geavanceerde mogelijkheden van asterisk verwijzen we u graag door naar deze website: http://www.voipinfo.org/wiki-Asterisk. Hier vindt u gedeta¨ılleerde informatie + voorbeelden i.v.m. de mogelijkheden van asterisk. U kan aan de hand van de situatiebeschrijving en onze configuratiefiles (zie bijlagen) wat experimenteren.
2.5
Music on hold
Asterisk laat toe nieuwe muziek toe te voegen aan de standaardbibliotheek. Alle muziek die asterisk gebruikt bevindt zich in de map /var/lib/asterisk/sound. Asterisk ondersteund verschillende formaten: .wav .gsm ,zijn de meest gebruikte. Om een bepaald muziek bestand( bv blabla.mp3) te gebruiken in asterisk moet u het muziekbestand omzetten naar een formaat dat asterisk kent(.wav , .gsm)
2.5.1
Mp3/ogg bestand omzetten naar een bruikbaar asterisk geluidsformaat(.wav .gsm)
Hiervoor maken we gebruik van het programma sox (the Sound eXchange utility) • Zorg dat u root bent en voer dit commando uit: apt-get install sox Ga naar de directory waar de muziekbestanden, die u wilt gebruiken in asterisk, zich bevinden. • sox wiltura.ogg -r 8000 -c 1 -s -w /var/lib/asterisk/sounds/wiltura.wav resample -q • sox wiltura.mp3 -r 8000 -c 1 -s -w /var/lib/asterisk/sounds/wiltura.wav resample -q
13
2.6
Asterisk-AGI
Asterisk gateway interface is een extra functionaliteit in asterisk. Hiermee is het mogelijk om gebruik te maken van verschillende programmeertalen zoals Perl, PHP, C, Pascal. Met AGI is het bijvoorbeeld mogelijk een dialplan in perl te schrijven of bepaalde onderdelen ervan. De scripts geschreven in 1 van deze bovenstaande talen worden dan vanuit extensions.conf opgeroepen. Wij hebben bij ons project gebruik gemaakt van Perl, hiervoor moeten de nodige libraries ge¨ınstalleerd worden.
2.6.1
Perl module voor asterisk installeren
Download libasterisk-agi-perl van http://asterisk.gnuinter.net/files/ • Untar het bestand • Navigeer in de nieuwe directory • Zorg ervoor dat u root bent zodat u voldoende rechten heeft. Om root te worden gebruikt u het commando su • Geef het volgende commando: perl Makefile.pl • Geef het volgende commando: make all • Geef het volgende commando: make install Nu is het mogelijk om perl scripts te schrijven die in communiceren met het dialplan. Via extensions.conf wordt dit script dan opgeroepen. Een simpel voorbeeld is ons zelfgemaakte sprekende klok script. #!/usr/bin/perl -w use Asterisk::AGI; $AGI = new Asterisk::AGI; my %input = $AGI->ReadParse(); my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday) = localtime(time); $AGI->set_variable(UUR, $hour); # de variable UUR krijgt het uur toegekend $AGI->set_variable(MIN, $min); # de variabele MIN krijgt het aantal minuten toegekend Elk AGI script dat u maakt, moet in de directory /var/lib/asterisk/agi-bin opgeslagen worden. LET OP! Het script moet uitvoerbaar zijn. In extensions.conf moeten we aangeven dat het script moet worden uitgevoerd als men naar het nummer van de sprekende klok belt.
14
[klok] exten => 15,1,Answer() exten => 15,n,Set(UUR=00) exten => 15,n,Set(MIN=00) exten => 15,n,Festival(Lucy talking watch) ;Festival zorgt ervoor dat deze tekst uitgeproken wordt exten => 15,n,Festival(The time now is) exten => 15,n,Wait(1) exten => 15,n,AGI(tim.pl) ;het perl script wordt opgeroepen en uitgevoerd, ;hierna gaat men gewoon voort met het dial plan ;het perl script zal de variabelen uur en min ;met de juiste waarde invullen. exten => 15,n,SayNumber(${UUR}) ;Het uur wordt gezegd exten => 15,n,Festival(hour and) exten => 15,n,SayNumber(${MIN}) ;de minuten worden gezegd exten => 15,n,Festival(minutes) exten => 15,n,Hangup()
2.7
Openvpn
We hebben gebruik gemaakt van openvpn om een vpn op te zetten tussen verschillende computers buiten ons LAN. Dit laat ons toe om vanaf overal te kunnen bellen. De computers binnen ons vpn gedragen zich als gewone LAN computers. Dit laat toe dat er communicatie kan plaatsvinden tussen onze clients en onze server(=openvpn server + asterisk server) Het idee om meer dan enkel lokaal te kunnen bellen, speelde al lang in ons hoofd. In het begin dachten we dat het bijna onmogelijk zou zijn, omwille van de firewall en het dynamisch ip adres. Maar dan dachten we aan VPN’s. In het begin hebben we gebruik gemaakt van hamachi. Een programma dat gratis op het internet te downloaden en te gebruiken is om een VPN op te zetten. Dit programma werkte goed maar had een paar grote nadelen: • De VPN server was niet van ons, er kon dus niet veel geconfigureerd worden (bv het ip adres kiezen ,...) • Indien men Hamachi zou gebruiken voor een bedrijf, zou men een licentie moeten aankopen, deze zijn zeer duur Omwille van deze nadelen zijn we overgeschakeld naar openvpn, een opensource programma met veel configuratiemogelijkheden. Openvpn is makkelijk op te zetten, en met een paar wijzigingen aan de configuratie hebt u al snel een werkende vpn.
15
2.7.1
Installatie van Openvpn
We hebben ons hiervoor gebaseerd op een reeds bestaand HowTo, die te vinden is op de site van openvpn: http://www.openvpn.net/index.php/documentation/howto.html Openvpn is beschikbaar voor Windows, Linux en Mac. Deze HowTo is geschreven voor ons debian systeem (een gekende linux distributie). Downloaden van de installatie bestanden: http://openvpn.net/index.php/downloads.html • Untar: tar -xfz openvpn-[version].tar.gz • Navigeer in de nieuwe directorycd: openvpn-2.0.9 • Zorg ervoor dat u root bent. U wordt root door het commando su • Geef het volgende commando: ./configure • Geef het volgende commando: make • Geef het volgende commando: make install Indien alles goed verlopen is, hebt u openvpn succesvol ge¨ınstalleerd! Foutmeldingen bij de installatie van Openvpn Indien u errors krijgt bij de installatie of de compilatie, kijk dan altijd na of u root bent en of de nodige libraries ge¨ınstalleerd zijn. Door de error code te lezen en te ’googelen’ is het probleem meestal snel verholpen. Op de site van openvpn is er ook voldoende informatie aanwezig om de problemen makkelijk op te lossen(http://www.openvpn.net/index.php/documentation/faq.html)
2.7.2
Het aanmaken van certificaten
OPGELET!: voor het aanmaken van certificaten dient openSSL ge¨ınstalleerd te zijn. Het aanmaken van certificaten is aangeraden omwille van beveiliging. Nodige certificaten : • CA certificaat & key • Server certificaat & key • Client certificaten & keys Definiren van de nodige variabelen cd
/home/ r o o t /openvpn − 2 . 0 . 9 / easy−r s a
In deze map vindt u de nodig scripts om de certificaten aan te maken. We gaan eerst de globale variabelen defini¨eren met het script vars. 16
vim v a r s Dit zijn de nodige variabelen die u dient aan te passen : export export export export export
KEY COUNTRY=BELGIUM KEY PROVINCE=VLAAMS BRABANT KEY CITY=LEUVEN KEY ORG=”ASTERISK TEST” KEY EMAIL=” a s t e r i s k s i p @ g m a i l . com”
U kunt nog meer variabelen aanpassen, om te zeggen waar de keys zullen worden opgeslagen. Nadat u de nodige aanpassingen hebt aangebracht en deze ook heeft opgeslagen, moet u het script uitvoeren. • ./vars • ./clean-all Het script clean-all zal de nodige key map aanmaken, als deze nog niet zou bestaan. Als deze reeds zou bestaan zal het script deze map leegmaken. Het CA certificaat aanmaken • ./build-ca Met dit commando wordt het script build-ca opgeroepen, dit script zal op zijn beurt openssl oproepen met de nodige parameters en variabelen om het certificaat aan te maken. Indien er zich geen fouten voordoen worden er verschillende vragen gesteld voor het opstellen van het certificaat. Indien er zich wel fouten voordoen zoals bv ’geef KEY DIR in’ is er hoogstwaarschijnlijk iets foutgelopen met het invullen van de variabelen in het script vars. • Kijk na of het script de nodige rechten heeft • Kijk na of de variabelen die u definieerde juist zijn • Kijk na of in de map /home/root/openvpn-2.0.9/easy-rsa de nodige bestanden aanwezig zijn zoals openssl.cnf. • Lees de ’read me’ die aanwezig is de easy-rsa directory. Indien u echt alles juist heeft gedaan en geen fout kan terugvinden, kan u altijd eigenhandig de certificaten aanmaken. Hierbij dient u eigenhandig de variabelen in openssl.cnf aan te passen en de juiste directories te definiren. root@Lucy : /home/ r o o t /openvpn − 2 . 0 . 9 / easy−r s a # o p e n s s l req −days 3650 −nodes −new −x509 −keyout ca . key −out ca . c r t −c o n f i g o p e n s s l . c n f
17
Nadat u succesvol het CA certificaat heeft aangemaakt moet u de andere certificaten nog aanmaken . / build−key−s e r v e r s e r v e r . / build−key c l i e n t 1 . / build−key c l i e n t 2 . / build−key c l i e n t 3 Verdeling van de certificaten
2.7.3
bronnen en extra informatie over installatie en certificaten
Voor verdere informatie over de installatie en de certificaten zie: • http://www.openvpn.net/index.php/documentation/howto.html • http://openvpn.net/archive/openvpn-users/2007-12/msg00006.html • http://www.osnews.com/story/5803 • http://www.dd-wrt.com/wiki/index.php/OpenVPN • https://help.ubuntu.com/community/OpenVPN
2.7.4
Configuratie openvpn
Nadat openvpn ge¨ınstalleerd is en de nodige certificaten zijn aangemaakt kunnen we overgaan naar de configuratie van de server en clients. Deze configuratie is vrij simpel. Met deze HowTo is het mogelijk om een (normale) vpn werkend te krijgen. root@Lucy : /home/ r o o t /openvpn − 2 . 0 . 9 / sample−c o n f i g − f i l e s # l s c l i e n t . conf s e r v e r . conf De belangrijkste bestanden in deze directory zijn server.conf en client.conf en de readme. Routed or bridged VPN dev tun : dev tap :
z a l een g e r o u t e e r d e i p t u n n e l o p z e t t e n z a l een e t h e r n e t t u n n e l o p z e t t e n
Het grote verschil is dat met dev tap ethernet pakketjes worden uitgewisseld en met dev tun ip pakketjes worden uitgewisseld. Wanneer u aan bridging wenst te doen, moet u gebruik maken van dev tap, deze hebben een ethernet hoofding nodig. Dev tun wordt gebruikt voor routing. Routed vpn is in het algemeen makkelijker op te zetten dan bridged vpn. Gemakkelijkheidshalve maken wij gebruik van dev tun. Meer informatie hierover: • http://openvpn.net/index.php/documentation/howto.html#vpntype 18
Server configuratie vim s e r v e r . conf Dit zijn de belangrijkste aspecten van de server.conf file: p o r t 1194 #de poort d i e openvpn z a l gebruiken deze # d i e n t i n de f i r e w a l l geforward t e worden proto udp # h e t p r o t o c o l dat g e b r u i k t wordt dev tun # h i e r heb j e de keuze om t e k i e z e n t u s s e n dev tun o f dev tap # Hier moet u de j u i s t e v e r w i j z i n g opgeven naar uw key map . ca /home/ r o o t /keys/ca . c r t c e r t /home/ r o o t /keys/ s e r v e r . c r t key /home/ r o o t /keys/ s e r v e r . key # This f i l e should be kept s e c r e t # welke i p range ga i k gebruiken voor mijn vpn #de s e r v e r z a l automatisch 1 0 . 8 . 0 . 1 z i j n server 1 0 . 8 . 0 . 0 255.255.255.0 # Met deze o p t i e l a a t u t o e dat de c l i e n t s met e l k a a r kunnen communiceren #en n i e t a l l e e n met de s e r v e r c l i e n t −to−c l i e n t # met deze o p t i e g e e f t u aan hoeveel c l i e n t s # e r maximum met de s e r v e r mogen verbonden z i j n max−c l i e n t s 100 Met deze basis configuratie zou het voldoende moeten zijn om de openvpn server te laten werken en een simpel vpn netwerk op te starten. Met openvpn is er veel meer mogelijk dan hier beschreven wordt, het is namelijk mogelijk om bijvoorbeeld routes te pushen naar een client, zodat deze andere private netwerken achter de server kan bereiken en omgekeerd! En dat bijvoorbeeld de router van een LAN gezien wordt als een openvpn client en de clienten op dat LAN netwerk via de router ook toegang krijgen op de vpn. Meer informatie : • http://openvpn.net/index.php/documentation/howto.htmlscope • http://openvpn.net/index.php/documentation/howto.htmldhcp 19
Client configuratie De configuratie op elke client, is bijna identiek voor elke client. U moet enkel de nodige aanpassingen doen aan de verwijzingen naar de certificaten. Het maakt echter niet uit of de configuratie file op Windows of op Linux gebruikt wordt. vim c l i e n t . conf Dit zijn de belangrijkste aspecten van de client.conf file: # I n d i e n u op de s e r v e r voor dev tun hebt gekozen moet u dat h i e r ook doen dev tun # Kies h i e r ook h e t z e l f d e p r o t o c o l a l s op de s e r v e r proto udp # Hier moet de hostname/IP van de s e r v e r komen . Het i s m o g e l i j k #om meerdere remote e n t r i e s t e hebben . #Omdat w i j gebruik maken van een dynamisch i p adres # gebruiken we onze l u c y s i p . no−i p . org naam . l u c y s i p . no−i p . org # z a l a l t i j d v e r w i j z e n naar ons j u i s t e i p adres ( meer i n f o www. no−i p . org ) remote l u c y s i p . no−i p . org 1194 #Ook h i e r moet men v e r w i j z e n naar de j u i s t e d i r e c t o r y #waar de c l i e n t c e r t i f i c a t e n z i c h bevinden ca /home/ r o o t /keys/ca . c r t c e r t /home/ r o o t /keys/ c l i e n t 1 . c r t key /home/ r o o t /keys/ c l i e n t 1 . key #Handig voor machines d i e n i e t permanent g e c o nn e c t e e rd # b l i j v e n met h e t i n t e r n e t r e s o l v −r e t r y i n f i n i t e
2.7.5
Opstraten van de openvpn server
openvpn [ s e r v e r c o n f i g f i l e ] bv openvpn s e r v e r . conf Indien alles goed verlopen is moet u een uitvoer zoals deze krijgen : Tue Nov 11 16:12:44 2008 Diffie-Hellman initialized with 1024 bit key Tue Nov 11 16:12:44 2008 TLS-Auth MTU parms [ L:1542 D:138 EF:38 EB:0 ET:0 EL:0 ] Tue Nov 11 16:12:44 2008 TUN/TAP device tun0 opened Tue Nov 11 16:12:44 2008 /sbin/ifconfig tun0 10.8.0.1 pointopoint 10.8.0.2 mtu 1500 Tue Nov 11 16:12:44 2008 /sbin/route add -net 20
10.8.0.0 netmask 255.255.255.0 gw 10.8.0.2 Tue Nov 11 16:12:44 2008 Data Channel MTU parms [ L:1542 D:1450 EF:42 EB:135 ET:0 EL:0 AF:3/1 ] Tue Nov 11 16:12:44 2008 UDPv4 link local (bound): [undef]:1194 Tue Nov 11 16:12:44 2008 UDPv4 link remote: [undef] Tue Nov 11 16:12:44 2008 MULTI: multi_init called, r=256 v=256 Tue Nov 11 16:12:44 2008 IFCONFIG POOL: base=10.8.0.4 size=62 Tue Nov 11 16:12:44 2008 IFCONFIG POOL LIST Tue Nov 11 16:12:44 2008 Initialization Sequence Completed Kijk na of de openvpn server draait: ps −aux | grep openvpn De output moet ongeveer dit zijn: r o o t 3660 0 . 0 0 . 1 3644
1820 p t s /2 S 1 6 : 1 2 0 : 0 0 openvpn s e r v e r . conf
• voer het commando ifconfig uit op de server en kijk na of er een dev tun device staat
2.7.6
Problemen bij het opstarten van de openvpn server
Als de openvpn server om bepaalde redenen niet zou willen starten, kijk vooral dan deze dingen na. • Is de juiste poort op de firewall geforward met het bijhorend protocol dat u gekozen hebt • Staan de certificaten op de juiste plaats, zoals u ze gedefinieerd hebt in de server.conf • bekijk de logs van openvpn !!
2.7.7
Automatiseren van start up
we hebben een klein perl script geschreven dat wordt uitgevoerd bij de start up. Indien openvpn niet kon worden opgestart dan wordt dit weergegeven bij de eerstvolgende ssh login. #! /usr/bin/perl #----------------#Starting the openvpn server #----------------if (-e "server.conf") { system("openvpn server.conf &"); } else{ system("Openvpn is niet gestart check logs !!! >> /etc/motd"); } 21
2.7.8
De client starten in linux
• openvpn [client config file] • bv: openvpn client.conf
2.7.9
Installeren en starten van openvpn client in windows
Installatie van openvpn in windows • Hier kan u een .exe file downloaden: http://openvpn.net/index.php/downloads.html Dubbelklik op de .exe file en volg de instructies op het scherm. Hierna zal u de computer opnieuw moeten opstarten. Na de installatie kan u het gemaakte configuratiebestand en de nodige keys kopi¨eren naar de directory C: \Program Files\OpenVPN\sample-config Pas in de client.conf de juiste directories aan die verwijzen naar de certificaten. Dit kan via een simpele editor zoals notepad of notepad++. Om de openvpn client via windows te starten: • Rechter muisklik op de client.conf file en vervolgens kiezen voor ’start openvpn met deze config file’ • Een dos box zal verschijnen en als u de boodschap Initialization Sequence Completed te zien krijgt dan draait de openvpn client met succes op u systeem. Sluit deze dos box niet! U krijgt geen ’Initialization Sequence Completed’ te zien? • Bekijk de error melding in de dos box. • Controleer de firewall instellingen aan de server kant!! Zorg ervoor dat de nodige poort met het nodige protocol geforward wordt! • Indien er iets staat over certificaten moet u nakijken of de certificaten op de juiste plaats staan zoals u heeft aangegeven in de config file .(TIP: plaats de certificaten en de bijhorende keys in dezelfde map als de client.config file C: \Program Files\OpenVPN\sampleconfig) • Kijk na of de openvpn server draait. Dit doet u met het volgende commando: ps -aux | grep openvpn. De output moet ongeveer dit zijn: root
3660
0.0
0.1
3644
1820 pts\2 S 16:12 0:00 openvpn server.conf
• ifconfig op de server en kijk na of er een dev tun device tussen staat 22
2.7.10
Test connectie met server
Open een dos box ping 1 0 . 8 . 0 . 1 Indien u een antwoord krijgt van de server dan heeft u met succes een vpn verbinding opgezet!! U krijgt wel ’Initialization Sequence Completed’ te zien maar kan niet pingen: • Controleer de firewall instellingen aan de server kant!! Zorg ervoor dat de nodige poort met het nodige protocol geforward wordt! • Het is mogelijk dat de client firewall(op de router of de windows firewall) de tun/tap connectie blokkeert. disable de client firewall !!
2.8
Open vpn en X-Lite
Nu we een VPN hebben opgestart, hoeven we enkel nog onze softphone te configureren zodat deze onze openvpn connectie gebruikt. De softphone die we gebruiken is x-lite: http://www.counterpath.net/x-lite.html&active=4 Deze softphone is zowel voor linux als windows beschikbaar, maar uit onze ervaringen raden wij de Windows versie aan! • Download het .exe bestand van x-lite en installeer deze. • Start x-lite op
• Ga vervolgens naar SIP Account Settings • Klik op properties 23
Vul de nodig informatie in : • username: uw username, deze moet ook aangemaakt zijn in de sip.conf file • password : het password dat u bij deze user gedefinieerd heeft in de sip.conf • Authentication user name : is gelijk aan de username • Domain : is het ip adres van onze openvpn server ( 10.8.0.1) • Dan moeten we de checkbox ’s Register with domain and receive incoming calls aanvinken • Vervolgens kiezen we voor proxy. Het adres is hier weer gelijk aan het adres van onze openvpn server (10.8.0.1)
Klik op toepassen en vervolgens op ok en als alles goed is verlopen ziet u nu op het schermpje van je x-lite softphone de username 100 verschijnen en bent u klaar om te bellen.
24
Bijlage A
Asterisk: Configuratie files A.1
SIP.conf
timme@Lucy:˜$ cat /etc/asterisk/sip.conf [general] port=5060 bindaddr=0.0.0.0 videosupport=yes ;========== ;TEMPLATES ;========== [templ](!) type=friend context=default host=dynamic dtmfmode=rfc2833 disallow=all allow=ulaw allow=alaw allow=gsm allow=h263 allow=h263p canreinvite=no secret=cl455
;<== Template voor alle SIP phones ;Mag bellen en gebeld worden ;Na waar em ga kijken in extensions.conf ;Wachtwoord voor den telefon ;DialTone formaat da gebruikt wordt ;
;Wachtwoord voor telefon
;=========== ;TEMPLATES ;========== [100](templ) ;Naam telefon + template die gebruikt word callerid="Jos" <100> username=Jos
25
mailbox=100 [101](templ) ;Naam telefon + template die gebruikt word callerid="Marcel" <101> username=Marcel mailbox=101 [200](templ) ;Naam telefon + template die gebruikt word callerid="secr. 1" <200> username=Sec1 mailbox=200 [201](templ) callerid="secr. 2" <201> username=Sec2 mailbox=201 [300](templ) callerid="ICT" <300> username=ICT mailbox=300 [0472111222](templ) callerid="GSM Directeur" <0472111222> username=gsmd [voipbuster] type=peer host=sip1.voipbuster.com username=lucysip secret=cl455 notransfer=yes insecure=very externip=217.136.196.76 context=default register => lucysip:
[email protected]
26
A.2
Extensions.conf
A.2.1
Basis Extensions.conf
Dit is ons dialplan dat we momenteel gebruiken. Hier wordt alles geregeld wat er moet gebeuren als iemand wil bellen met onze asterisk server. Ons dialplan stelt een interactief dynamisch menu voor. timme@Lucy:˜$ cat /etc/asterisk/extensions.conf |more [globals] GSMD=>0472111222 ; GSM nummer van de directeur [general] static=yes writeprotect=yes context=default autofallthrough=no disallow=all allow=ulaw ;------------------------------------------------; Inkomende gesprekken simuleren op nummer 016555 ;------------------------------------------------[fwd-in] exten => 016555,1,GoTo(menu,s,1) ;------------------------------------------------; Inkomende gesprekken simuleren op nummer 016555 ;------------------------------------------------[fwd-out] exten => _0XXXXXXXXX,1,Dial(SIP/${EXTEN:1}@voipbuster) ;Bellen naar externe nummers ;exten => _0[12345789]XXXXXXXX,1,Dial(IAX2/voipbuster/0031${EXTEN:5}) ;exten => _0[12345789]XXXXXXXX,n,Congestion() ;----------------------------------------------------------; Het hoofdmenu ;----------------------------------------------------------[menu] exten => s,1,Ringing() exten => s,n,Wait(1) exten => s,n,Answer() exten => s,n,Playback(Welkom) ; afspelen welkomsbericht exten => s,n,Background(Menu) ; 1=Onthaal, 2=Directrice, ; 3=Admin, 4=Extentie belle exten => 1,1,Goto(onthaal,s,1) ; 1 - Onthaal exten => 2,1,Goto(directie,s,1) ; 2 - Directie exten => 3,1,Goto(admin,s,1) ; 3 - Admin exten => _4XXX,1,Dial(SIP/${EXTEN:1}) ; 4 - Rechtstreeks extensie bellen exten => t,1,Goto(menu,s,5) ; Time-out - hoofdmenu opnieuw afspelen exten => i,1,Playback(invalid) ; Verkeerde keuze exten => i,n,Goto(menu,s,5) ; Verkeerde keuze - hoofdmenu opnieuw afspelen ;-----------------------------------------------------------
27
; Het onthaal ;----------------------------------------------------------[onthaal] exten => s,1,Ringing() ; even een belsignaal laten horen exten => s,2,Wait(1) ; 2sec wachten exten => s,3,Background(onthaal) ; 1=Betalingen (sec1), 2=Algemeen (sec1), ; 0=terug exten exten exten exten exten exten
=> => => => => =>
1,1,Goto(default,200,1) 2,1,Dial(SIP/200&SIP/201,50) 0,1,Goto(menu,s,5) t,1,Goto(onthaal,s,3) i,1,Playback(invalid) ; Verkeerde keuze i,2,Goto(onthaal,s,3)
;----------------------------------------------------------; de directie ;----------------------------------------------------------[directie] exten => s,1,Ringing() exten => s,n,Wait(1) exten => s,n,Playback(wordtopgenomen) ; afspelen: privacy boodschap exten => s,n,Wait(1) exten => s,n,Monitor(wav,/tmp/directieThingy,m) ; Opnemen van het gesprek exten => s,n,Dial(SIP/100&LOCAL/888${GSMD},50,m) exten => s,n,Goto(default,101,1)
; onderdirecteur
;----------------------------------------------------------; Admin menu ;----------------------------------------------------------[admin] exten => s,1,Authenticate(1234) ; Wachtwoord = 1234 exten => s,2,Background(Admin) ; Speel keuzemenu exten => 1,1,System(/etc/init.d/ssh reload) exten => 2,1,System(/etc/init.d/sshd stop) exten exten exten exten
=> => => =>
; 1: Start sshd ; 2: Stop sshd
3,1,Playback(reload) ; Melde da ge ga reloaden 3,n,Wait(3) ; 3sec wachten 3,n,System(/etc/init.d/asterisk reload) ; 3: Server reboot 3,n,Hangup()
exten => 4,1,Goto(echo,500,1) exten => 5,1,Goto(motd,s,1) exten => 0,1,GoTo(menu,s,5) exten => t,1,GoTo(admin,s,2) exten => i,1,Playback(invalid) exten => i,n,GoTo(admin,s,2)
; 4: Echotest ; 5: MOTD afspelen ; 0: Naar menu
; afspelen: verkeerde keuze
;----------------------------------------------------------; Message Of The Day ;----------------------------------------------------------[motd]
28
exten => s,1,Background(motd-menu)
; afspelen van MOTD-menu
exten => 1,1,Playback(motd) exten => 1,n,GoTo(motd,s,1)
; MOTD afspelen ; Terugspringen zonder te wachten op timeout
exten => 2,1,GoTo(motd-opnemen,s,1) exten => t,1,Goto(motd,s,1) exten => i,1,Playback(invalid) exten => i,n,Goto(motd,s,1)
; afspelen: "verkeerde keuze"
[motd-opnemen] exten => s,1,Authenticate(1234) ; authenticatie voor het opnemen van een boodschap exten => s,n,Playback(motd-opnemen) ; afspelen "Gelieve de MOTD boodschap in te spreken (#)" exten => s,n,Record(motd:gsm) ; opnemen van motd, afsluiten met # exten => s,n,Playback(motd-afspelen) ; afspelen "U sprak dit in" exten => s,n,Playback(motd) exten => s,n,Background(motd-controle) ; 1=opnieuw opnemen, 2=Hoofdmenu, 3=Admin-menu(HIDDEN) exten => 1,1,GoTo(motd-opnemen,s,2) ; opnieuw opnemen exten => 2,1,GoTo(menu,s,5) ; terug springe naar hoofd-menu exten => 3,1,GoTo(admin,s,2) ; terug na admin-menu
exten => t,1,GoTo(motd-opnemen,s,2) exten => i,1,Playback(invalid) ; verkeerde keuze exten => i,n,GoTo(motd-opnemen,S,2) ;----------------------------------------------------------; echotest ;----------------------------------------------------------[echo] exten => 500,1,Playback(demo-echotest) exten => 500,n,Echo() exten => 500,n,Playback(demo-echodone) exten => 500,n,Hangup() ;-------------------------; ; Follow me macro thinggy ; ;-------------------------; [macro-screen] exten => s,1,Wait(1) exten => s,n,Background(followd) exten => s,n,WaitExten(5) ; na 5 sec er vanuit gaan dat ni opgenomen wordt exten => 1,1,NoOp(Caller accepted) ; Do not set MACRO_RESULT to anything to connect the caller
29
exten => i,1,Set(MACRO_RESULT=CONTINUE) exten => t,1,Set(MACRO_RESULT=CONTINUE) ;----------------------------------------------------------; Default: ; * interne oproepen regelen ; * Voicemail ; * Includes ;----------------------------------------------------------[default] ;exten => _0XXXXXXXX,1,Dial(SIP/${EXTEN}@voipbuster) ;Bellen naar externe nummers ;exten => _XXX,1,Dial(SIP/016650155@voipbuster) exten => _XXX,1,Dial(SIP/${EXTEN},50,tr) ; Interne nummers belle ;----------------------------------------------------------; Follow me thinggy van directeur ;----------------------------------------------------------exten => _888XXXXXXXXXX,1,Dial(SIP/${EXTEN:3},50,rM(screen)) exten => _888XXXXXXXXXX,n,Hangup() ;----------------------------------------------------------; Voicemailcentrale: voicemail beluisteren en beheren ;----------------------------------------------------------exten => 5000,1,VoicemailMain() exten => 5000,n,Hangup() ;----------------------------------------------------------; Voicemailcentrale: de extensie waarmee je belt wordt ; automatisch doorgegeven ;----------------------------------------------------------exten => 5001,1,VoicemailMain(${CALLERIDNUM}) exten => 5001,n,Hangup() ;----------------------------------------------------------; Includen contexten in default ;----------------------------------------------------------include => fwd-in include => menu include => admin include => echo include => motd include => onthaal include => directie include => motd-opnemen include => record
30
A.2.2
Probeersels in Extensions.conf
Dit zijn allemaal probeersels die we tijdens ons project gebruikt hebben om te testen. Hier hebben we ons verbeelding de gang laten gaan. Zoals het testen van de sprekende klok en nog veele andere. ;[incoming] ;; As bedrijf open is, calls doorsturen naar open context anders ;; springe na closed ;exten => _1XX,1,Set(${NUMMER} = ${EXTEN}) ;exten => _1XX,n,GotoIfTime(09:00-17:59|mon-fri|*|*?open,s,1:closed,s,1) ; Iets anders zen we zowiso toe --> spring na closed ;exten => _1XX,n,Goto(closed,s,1)
;[open] ;exten => s,1,Playback(yeah) ;exten => s,n,Dial(SIP/${NUMMER}, 20) ;exten => s,n,Hangup() ;[closed] ;exten => s,1,Playback(gambling-drunk) ;exten => s,n,Hangup() ;exten ;exten ;exten ;exten ;exten ;exten ;exten ;exten
=> => => => => => => =>
123,1,Answer() 123,n,Playback(hang-on-a-second) 123,n,Wait(1) 123,n,Playback(lyrics-louie-louie) 123,n,Playback(telephone-in-your-pocket) 123,n,Playback(gambling-drunk) 123,n,Playback(yeah) 123,n,Hangup()
;[timme] ;exten => 15,1,Answer() ;exten => 15,n,Set(UUR=00) ;exten => 15,n,Set(MIN=00) ;exten => 15,n,Festival(Lucy talking watch) ;exten => 15,n,Festival(The time now is) ;exten => 15,n,Wait(1) ;exten => 15,n,AGI(tim.pl) ;;exten => 15,n,Festival(${TIJD}) ; Indien het perl programma alles moet zeggen kunnen we het zo doen ;exten => 15,n,SayNumber(${UUR}) ;exten => 15,n,Festival(hour and) ;exten => 15,n,SayNumber(${MIN}) ;exten => 15,n,Festival(minutes) ;exten => 15,n,Hangup() ;exten => 15,n,DigitTimeout(4) ; Digit Timeout 4 seconden ;exten => 15,n,ResponseTimeout(5) ; Response Timeout 5 seconden ;exten => 15,n,Playback(tt-monkeys) ; Play de agent-user.gsm file en lees maximaal 4 cijfers uit of wacht op een # ; en plaats deze in de var User ;exten => 15,n,Read(User,agent-user,4)
31
;exten => 15,n,Wait(1) ; Start de demoagi.sh op en geeft de var ; ${User} mee. ;exten => 15,n,AGI(timagi.sh|${User}) ; SET VARIABLE result wordt gezet. ;exten => 15,n,GotoIf($["${result}" = "yes"]?belle:ophange) ; Als result = no is ga naar 10 else 9 ;exten => 15,n(belle),Dial(SIP/incoming,123) ;exten => 15,n(belle),Goto(incoming,123,1) ;exten => 15,n(ophange),Hangup() ;[testarea] ;Zelf maken van menu teksten of overschrijven van menu teksten ;exten => 16,1,Answer() ;exten => 16,n,Wait(1) ;exten => 16,n,Read(NUM,opt,1) ;exten => 16,n,Wait(1) ;exten => 16,n,Gotoif($[${NUM}=1]?testarea,17,1) ;exten => 16,n,Gotoif($[${NUM}=2]?testarea,18,1) ;exten => 16,n,Gotoif($[${NUM}=3]?testarea,19,1) ;exten => 16,n,Gotoif($[${NUM}=4]?testarea,20,1) ;exten => 16,n,Gotoif($[${NUM}=5]?testarea,21,1) ;exten => 17,1,Read(NUMM,Kate2,1) ;exten => 17,n,Goto(testarea,36,1) ;exten => 18,1,Read(NUMM,Juliette2,1) ;exten => 18,n,Goto(testarea,36,1) ;exten => 19,1,Read(NUMM,Willem2,1) ;exten => 19,n,Goto(testarea,36,1) ;exten => 20,1,Read(NUMM,Linlin2,1) ;exten => 20,n,Goto(testarea,36,1) ;exten => 21,1,Goto(testarea,16,1)
;exten => 36,1,Gotoif($[${NUMM}=1]?testarea,22,1) ;exten => 36,n,Gotoif($[${NUMM}=2]?testarea,23,1) ;exten => 36,n,Gotoif($[${NUMM}=3]?testarea,21,1) ;exten => 23,1,Goto(incoming,123,1) ;exten => 22,1,Goto(timme,15,1) ;exten => 24,1,Goto(record,16,1) [record] exten => 16,1,Answer() exten => 16,n,SetMusicOnHold(default) exten => 16,n,Wait(2) ;exten => 16,n,Read(ID|1000) ;exten => 16,n,Record(${ID}:gsm) exten => 16,n,Record(motd:gsm) exten => 16,n,Wait(1) exten => 16,n,Playback(${ID}) exten => 16,n,Festival(Your recording has been saved)
32
exten => 16,n,Hangup()
;[test2] ;exten => ;exten => ;exten => ;exten => ;exten => ;exten =>
13,1,Answer() 13,n,Background(opt) 13,n,WaitExten() 2,1,Playback(digits/2) 3,1,Playback(digits/3) 4,1,Playback(digits/4)
;[phones] ;;include => incoming ;include => test2 ;include => timme ;include => testarea ;include => incoming ;=========================================================== ; DEES WAS ALLEMAAL TEST ROMMEL --> IN HOWTO KNALLE : ;=========================================================== ;[general] ;[base] ;exten => _1XX,1,Dial(SIP/${EXTEN}, 20) ;exten => _1XX,n,Voicemail(${EXTEN},u) ;exten => _1XX,n,Hangup() ;exten => 200,1,VoiceMailMain(${CALLERID(num)},s) ;exten => 200,n,Hangup() ;exten => 300,1,Playback(tt-monkeys) ;exten => 300,n,Hanup() ;exten => 301,1,Playback(hello-world) ;exten => 301,n,Hangup()
;Alles ;exten ;exten ;exten ;exten
wa => => => =>
ge belt wordt beantwoord door apen :) _X.,1,Answer _X.,2,Wait(2) _X.,3,Playback(tt-monkeys) _X.,4,Hangup
;Elk nummer van 100 tot 199 wordt beantwoord door apen ;exten => _1XX,1,Answer() ;exten => _1XX,2,Wait(2) ;exten => _1XX,3,Playback(tt-monkeys) ;exten => _1XX,4,Hangup()
33