Asterisk
Asterisk

De Synology DiskStation als VOIP server? Dat is ook mogelijk! Een VOIP server is erg handig voor thuis en kantoor. Eenvoudig om onderling te bellen, voicemail, bellen via de goedkoopste provider, etc. Je hebt de telefonie in eigen hand. Er wordt gebruik gemaakt van software die ik al jaren gebruik, namelijk Asterisk. Deze zit als beta toegevoegd vanaf DSM versie 4.0 volgens mij. En de Asterisk versie is ook erg nieuw, de SVN versie. De ontwikkel versie dus. Dat is zeker wel BETA te noemen, maar ik ben geen onoverkomelijke problemen tegengekomen. Aan het einde van het artikel staan oplossingen voor de problemen die ik ben tegengekomen.

Er is zeer veel mogelijk met Asterisk, in dit artikel probeer ik een goed werkende basis neer te zetten. Dit zal voor de meeste mensen voldoende zijn.

Opzet van het netwerk

In het onderstaande plaatje heb ik de opzet van het netwerk getekend (gedeeltelijk geleend van voip-info.org).

Opzet VOIP netwerk met Asterisk server
Opzet VOIP netwerk met Asterisk server

De Synology DiskStation fungeert als een IP telefooncentrale, waaraan een IP telefoon of een ATA-adapter kan verbinden. Met de ATA-adapter is het mogelijk om een normale telefoon aan te sluiten, zoals een DECT telefoon. Er zijn ook ATA-adapters met 2 of 4 lijnen, zoals de GrandStream HT-704. Dan kun je direct met 4 telefoonlijnen naar buiten bellen. Het aantal binnenkomende lijnen is ongelimiteerd!

VOIP/SIP Provider

Om naar buiten te bellen is een VOIP/SIP provider nodig. Zelf heb ik mijn vaste telefoonnr naar BudgetPhone geporteerd (kost €10,-/jr) en heb een prepaid tegoed hierop. Omdat we nogal veel internationaal op vaste lijnen binnen EU bellen, heb ik als 2e provider Poivy. Bij Poivy is bellen binnen NL gratis (Freedays) en naar mobiel erg goedkoop. Kijk voor alle voorwaarden bij deze providers. Poivy behoort tot moederbedrijf Delmont (voorheen Betamax GMBH) en bevat meerdere diensten. Hier is een overzicht van alle Delmont providers/diensten met prijzen: Delmont (voorheen Betamax). In dit artikel ga ik uit van BudgetPhone & Poivy

Doe het volgende om de Asterisk server te installeren:

  1. Ga naar: Hoofdmenu -> Package center
  2. Selecteer tabblad: beschikbaar
  3. Zoek naar: Asterisk en klik op: Installeren

Configureren van Asterisk

Er zijn nu 2 mogelijkheden voor het configureren van Asterisk. Het is mogelijk om te configureren via:

  • Asterisk GUI, of
  • handmatig configureren

Hieronder is Asterisk GUI beschreven, en handmatig configureren is hier beschreven: Gids: Asterisk configureren.

Voor het handmatig configureren is wel meer Linux handigheid nodig. Via Asterisk GUI lijkt de eenvoudigste oplossing, maar kan nog wel eens kuren vertonen. De GUI is niet foutvrij. Met de kennis van handmatig configureren, geeft een robuuster resultaat en ook meer vrijheid in implementatie keuzes. Kortom, werk aan de winkel. Als je denkt dat het configureren een eitje is, dan heb je het mis. Ik raad aan om te verdiepen in de materie en voor de handmatige configuratie te gaan.

Asterisk GUI

Als Asterisk geïnstalleerd is, dan draait de asterisk als een service. Tevens is er een GUI voor de configuratie geïnstalleerd. Eigenlijk heb ik de configuratie altijd gedaan via de .conf file (deze staan in: /etc/asterisk/). Dit is lastig, zeker omdat er weinig documentatie beschikbaar is. Maar via de GUI is het goed te doen. Start de Asterisk GUI:

  1. Hoofdmenu -> Asterisk (Er wordt een nieuwe tab of venster geopend in de browser)
  2. Login  als: admin (wachtwoord is default leeg, tenzij je iets anders hebt ingesteld)

Het configureren moet gelaagd gebeuren. Anders mis je instellingen die je in een later proces nodig hebt. We beginnen dus bij de bodem, de Trunks.

Aanmaken van Trunks

De trunks zijn de lijnen die je met de buitenwereld verbinden, om te kunnen bellen naar anderen.

BudgetPhone

Doe het volgende om de trunk aan te maken voor BudgetPhone:

  1. Ga in de Asterisk GUI naar menu: Trunks
  2. Klik op de tab: VOIP Trunks
  3. Klik op: New SIP/IAX Trunk
  4. Selecteer type: SIP
  5. Provider Name: BudgetPhone
  6. Hostname: sip1.budgetphone.nl
  7. Username: 31XXXXXXXXX (telefoonnr zonder 0, zoals gekregen van BudgetPhone)
  8. Password: a1b2c3d4 (behorende bij de username)
  9. Klik op: Add

Voor BudgetPhone nu ook nog wat extra instellingen:

  1. Klik in het lijstje van trunks bij BudgetPhone op: Edit
  2. FromDomain: sip1.budgetphone.nl
  3. FromUser: 31XXXXXXXXX (hetzelfde als bovenstaande Username)
  4. Insecure: very (sinds asterisk versie 1.6 is “invite,port” omgenoemd naar “very”)
  5. Klik op: Add

Poivy

Doe het volgende om de trunk aan te maken voor Poivy:

  1. Klik in het menu Trunks->VOIP Trunks op: New SIP/IAX Trunk
  2. Selecteer type: SIP
  3. Provider Name: Poivy
  4. Hostname: sip.poivy.com
  5. Username: mijnpoivyusername
  6. Password: mijnpoivypassword
  7. Klik op: Add

Aanmaken van Outgoing Calling Rules

Met de uitgaande bel regels kunnen we bepalen welke uitgaande lijn (trunk/provider) wordt gekozen bij welk telefoon nr:

  1. Ga in de Asterisk GUI naar menu: Outgoing Calling Rules
  2. Klik op: New Calling Rule
  3. Vul in bij Calling Rule Name: NL_VasteEnMobiel
  4. Pattern: _0XXXXXXXXX
  5. Selecteer bij Use Trunk: Poivy
  6. Vink aan: Use Failover Trunk
  7. Selecteer bij Fail Over Trunk: BudgetPhone

De volgende tabel bevat de belregels, die je naar eigen wens kunt gebruiken. De Failover Trunk gebruik ik alleen bij NL_VastEnMobiel.

Calling Rule Pattern Trunk Failover Trunk

NL_VastEnMobiel  _0XXXXXXXXX  Poivy  BudgetPhone
Gemeente _14XXX BudgetPhone None Selected
 0800en0900nrs  _0[89]00XX.  BudgetPhone  None Selected
 SaldoBudgetPhone  _444  BudgetPhone  None Selected
 VoicemailBudgetPhone  _555  BudgetPhone  None Selected
 CZ_VastEnMobiel  _0042X.  Poivy  None Selected

Aanmaken van het DialPlan

Het DialPlan bevat één of meerdere Calling Rules. In onze opzet is er maar één DialPlan, welke alle Calling Rules bevat.

  1. Ga in de Asterisk GUI naar menu: DialPlans
  2. Klik op: New DialPlan
  3. Laat de default DialPlan Name: DialPlan1
  4. Selecteer alle Include Outgoing Calling Rules
  5. Selecteer alle Include Local Contexts
  6. Klik op: Save
  7. Selecteer het vinkje voor DialPlan1 in de kolom: Default

Aanmaken van Users

Nu gaan we voor elke telefoon een User aanmaken. Deze bevat een intern telefoon nr, wachtwoord, welk dialplan wordt gebruikt, etc.

Om een user aan te maken, doe het volgende:

  1. Ga in de Asterisk GUI naar menu: Users
  2. Klik op: Create New User
  3. Vul in bij Extension: 6001
  4. Naam: Toestel 1
  5. Laat DialPlan staan op: DialPlan1
  6. Als je Voicemail op de DiskStation wilt, vink deze aan en vul de velden in
  7. Deselecteer: IAX
  8. Vul een wachtwoord voor deze User in bij SIP/IAX Password
  9. Klik op: Update

Herhaal dit voor het aantal benodigde telefoons.

Aanmaken van Ring Groups

De Ring Group geeft aan welke telefoons (Users) gaan rinkelen als er gebeld wordt.

Doe het volgende om een ring group aan te maken:

  1. Ga in de Asterisk GUI naar menu: Ring Groups
  2. Klik op: New RingGroup
  3. Vul in bij RingGroup Name: Allen
  4. Selecteer in de kolom Available Users, de gewenste users voor in de groep
  5. En klik op het pijltje naar links om deze in de Ring Group Members te zetten
  6. Selecteer in Strategy: Ring all simultaneously
  7. Vul het aantal seconden in
  8. Klik op: Save

Aanmaken van Incoming Calling Rules

Met de Incoming Calling Rules kunnen bepaalde (groepen) telefoonnr’s gerouteerd/gefilterd worden per trunk.

In deze opzet wordt het eenvoudig, alle binnenkomende telefoonnr’s worden afgevangen en doorgestuurd naar de RingGroup.

Doe het volgende om dit te doen:

  1. Ga in de Asterisk GUI naar menu: Incoming Calling Rules
  2. Klik op: New Incoming Rule
  3. Selecteer Trunk: BudgetPhone
  4. Time Interval: None
  5. Pattern: s (Belangrijk, anders kun je niet gebeld worden. Zie hier: Asterisk s extension)
  6. Destination: RingGroup - Allen
  7. Klik op: Update

Voicemail versturen via email

Als je bij de users, de voicemail aangezet hebt. En je wilt deze ook versturen via email, dan is het nodig dat je IPKG en msmtp installeert  Hoe dit te doen staat hier: Synology DiskStation functies uitbreiden met IPKG.

Verder moet ook deze mail client in voicemail.conf gezet worden:

$ vi /etc/asterisk/voicemail.conf

Zet een ‘;’ teken voor sendmail en voeg een nieuwe regel met msmtp in:

;mailcmd=/usr/sbin/sendmail -t
mailcmd=/opt/bin/msmtp -t

Ook moet het formaat van de opgestuurde voicemail file, ingesteld worden. Als je deze op wav insteld, is dit erg universeel af te spelen. Wav was van deze formaten de enige formaat wat ik binnen Android kon afspelen.

;format=g723sf|wav49|wav
format = wav

Asterisk GUI foutjes

RingGroup string onjuist

Je kunt nu op Apply Changes drukken in de Asterisk GUI, waardoor de Asterisk een reload command krijgt. Maar het zal waarschijnlijk niet werken. In Asterisk GUI zit een foutje, waardoor externsions.conf een fout geeft bij een binnenkomend gesprek.

Om dit op te lossen, doe het volgende:

  1. Ga in de Asterisk GUI naar menu: Options
  2. Klik op de tab: Advanced Options
  3. Klik op: Show Advanced Options

Later kun je dezelfde knop weer drukken om de advance options te verwijderen.

  1. Ga in de Asterisk GUI naar menu: File Editor
  2. Selecteer de file: extension.conf
  3. Ga helemaal naar beneden, totdat je DID_BBBBB_default tegenkomt. De BBBBB staat voor je BudgetPhone telefoonnr, waarop je telefoontjes binnenkomen.
  4. Open deze regel door op de + te drukken
  5. Klik op de regel: exten=s,1,Goto(ringroups-custom-1|s|1)
  6. Verander de ‘|’ in ‘,’. Het resultaat wordt dan: exten=s,1,Goto(ringroups-custom-1,s,1)
  7. Klik op: Save

System Status Trunk not registered

In het System Status overzicht staan de Trunks als Unregistered, maar deze status werkt niet. Als je Registered bent, dan is het mogelijk om te bellen. Ook kun je bijvoorbeeld bij BudgetPhone bekijken of je geregistreerd bent op dit moment.

De nieuwe Asterisk configuratie laden

Nu kun je in de Asterisk GUI op Apply Changes drukken. De Asterisk service krijgt een “reload” commando.

We zijn nu klaar om de telefoon(s) te configureren om aan de VOIP server te connecten.

Harddisks blijven actief

Zoals ik in de basis installatie al gezegd had, moet je oppassen dat een nieuwe service niet de harddisks laten draaien. Tot nu toe gingen ze netjes in spindown, maar met de asterisk service blijven ze actief. Er kunnen vele mogelijkheden zijn, zie hier: Tips om de harddisk in spindown te laten gaan en hier: Spindown issues. Maar als je deze handleiding hebt gevolgd en niets extra hebt gedaan, dan moet je de harddisk met noatime remounten en de Asterisk database (astdb) in op een ramdisk zetten. Dan zullen ze weer netjes in spindown gaan.

Harddisk met noatime mounten

Standaard wordt in Linux op de harddisk per file bijgehouden wanneer deze benaderd wordt (accesstime). Ook als deze files gebufferd zijn in RAM. Door de harddisks met noatime te remounten, wordt dit niet meer bijgehouden. Het geeft geen problemen om dit te doen. In het geval dat je IPKG Optware hebt geïnstalleerd, volg dan deze tip van Synology: Noatime, anders doe je het volgende:

Open met Putty een SSH of telnet verbinding met je server, en voer het volgende commando uit:

$ vi /volume1/@appstore/Asterisk/etc/init.d/asterisk

En voeg dan de twee onderstaande mounts in, tussen de regel met ‘$CONFIGFILE’ en ‘case “$1”.

[ -r $CONFIGFILE ] && . $CONFIGFILE

# remount with noatime
mount -o remount,noatime /
mount -o remount,noatime /volume1

case "$1" in
 start)

Asterisk database (astdb) verplaatsen

In de Asterisk database (astdb) wordt onder andere bijgehouden welke clients er zijn ingelogd, etc. Het geeft niet als deze database bij een herstart verloren gaat, hij is zeer klein en wordt opnieuw aangemaakt. Dus kunnen we de database op een RAM disk zetten. Dit is bij de Synology DiskStation “/tmp”.  Open nu in vi de asterisk.conf file:

$ vi /etc/asterisk/asterisk.conf

Maak een kopie van de astdbdir definitie regel (vi commando: yy) en zet er een ‘;’ voor. Wijzig nu de nieuwe regel in “/tmp”. Het ziet er dan zo uit:

;astdbdir => /var/packages/Asterisk/target/var/lib/asterisk
astdbdir => /tmp

Sla nu de wijziging op, en herstart via de webinterface (poort: 5000) de Synology DiskStation.

Logging uitschakelen naar /var/log/asterisk/messages

Standaard logt Asterisk naar de file /var/log/asterisk/messages, bij de Synology DiskStation is dit naar: /volume1/@appstore/Asterisk/var/log/asterisk/messages. Hierin worden foutmeldingen, waarschuwingen en notificaties geschreven, waardoor de harddisk zo nu en dan weer moet opstarten.

Dit is eenvoudig uit te schakelen door weer met SSH in te loggen en het volgende commando uit te voeren:

$ vi /etc/asterisk/logger.conf

Zet nu een ‘;’ voor de regel “messages =>”. Dan komt het er als volgt uit te zien:

;messages => notice,warning,error

Alle foutmeldingen zijn nog steeds te zien op de CLI, hier zorgt de regel met “console =>” voor.

De VOIP client of telefoon laten verbinden met Asterisk server

Het ligt er een beetje aan welke telefoon of VOIP adapter gebruikt, maar de volgende waarden moet je gebruiken:

  • Internet number: 6001
  • User name: 6001
  • Wachtwoord: geheim (datgene wat je ingesteld hebt bij deze User)
  • Registrar: <DiskStation IPnr> (bijvoorbeeld: 192.168.1.244)
  • Alle Prefix digits uitzetten, dus niet eerst een ‘0’ bij het draaien van een telefoon nr

Zo kun je voor elke gebruiker een VOIP client instellen.

Op deze site staan 2 artikelen over het aansluiten en configureren van de GrandStream HT-70X, namelijk:

Asterisk via SSH

De CLI interface is ook gewoon te bereiken via SSH:

/volume1/@appstore/Asterisk/sbin/asterisk -r

Hier is een overzicht van alle CLI commando’s: Asterisk CLI

Artikelen die hierna ook goed zijn om te lezen:

Dit artikel behoort tot de gids om de Synology DiskStation. Dit zijn de artikelen behorende tot deze gids:

  1. Waarom een Synology DiskStation?
  2. Synology DiskStation basis installatie
  3. Synology DiskStation Media server
  4. Synology DiskStation Asterisk Voip server
  5. Synology DiskStation iPKG, de functies uitbreiden