Ik heb inmiddels uitgebreid onderzoek gedaan naar het werkend krijgen van deze oplossing icm FreePBX/Asterisk en uiteindelijk is het me gelukt.
Het voornaamste probleem dat ik heb, is dat de sip proxy authenticatie icm met pjsip niet werkend te krijgen is.
Als je namelijk als outbound proxy sip://+31487123456@imscore.net@voip1-ext.kpn.net invult word de url geweigerd op het eerste @. escapen met quotjes of dubbele quotjes, of een slash werkt ook niet.
Vul je alleen het nummer/gebruikersnaam in of helemaal niks, dan krijg je 407 proxy authentication required terug. Echter staat er geen WWW-Proxy-Authenticate header op het request, waardoor pjsip niet kan bepalen hoe deze moet authenticeren.
In het log zie je hiervan dan ook een melding verschijnen.
Hiervoor heb ik dus moeten terugvallen op het oudere chan sip icm gebruikersnaam en wachtwoord op de proxy url
Probleem 2 is dat FreePBX/Asterisk een lookup probeert te doen op ims.imscore.net wat de realm naam is, en dan faalt chan sip zonder verdere foutmeldingen. Dit is geen echte url die je met dns kan resolven. Workaround is om in /etc/hosts een record toe te voegen die ims.imscore.net verwijst naar het ip adres van de sip proxy.
Ik heb zelf een dns server toegevoegd op de FreePbx box met een cname record naar voip1-ext.kpn.net om hier omheen te werken.
Wat ik heb gedaan is STUN links laten liggen, wand wil niet dan mijn sip verkeer unencrypted het veilige kpn netwerk verlaat naar een of andere stun server met weet ik niet hoeveel (onveilige) hops daar tussen.
Als mijn wachtwoord namelijk in verkeerde handen valt, kan iedereen met mijn account bellen.
Dit heb ik voor elkaar gekregen door de volgende ranges op mijn router te forwarden naar de FreePbx box: 5060-5061,16384-32767
Op poort 5060 draai ik chan_sip en op poort 5061 draai ik het nieuwere pjsip. Mijn Ericsson PTT draaischijftelefoons icm Grandstream 802 ATA en soft clients zitten aangemeld via pjsip. Uitsluitend de kpn aansluiting heb ik op chan_sip aangemeld.
LET OP: Ook heb ik de firewall dermate ingesteld dat alleen het kpn sip server subnet verbinding mag maken, en mijn interne subnet natuurlijk. Mijn soft client op mn mobiel gaat via OpenVPN naar de router en dan naar de sip server.
Om dit geheel werkend te krijgen, voer dan de volgende stappen uit
- Ga naar Settings->Asterisk SIP settings
- [Optioneel] Zorg dat bij codecs ulaw en g722 op positie 1 en 2 staan
- Op het tabblad pjsip zet tls op yes en vul bij udp port to listen on 5061 in. Vul ook bij tls port to listen on 5061 in.
- Op het tabblad chan_sip zet NAT op never en enable TLS op No. Vul bij registration settings instellingen in die het beleid van KPN honoreren op het gebied van registratie tijden.
Registration Timeout = 900
Registration Attempts = 1
Registration Minimum Expiry = 1800
Registration Maximum Expiry = 4000
Registration Default Expiry = 1800
Dit voorkomt dat je te veel verzoeken doet en constant 15 min gebanned word door de sip server, totdat je sip uitzet en wacht tot de ban opgeheven word.
Stel bind port op 5060 in en druk op Save rechtsonderaan de pagina - Ga naar Connectivity->Trunks en voeg een nieuwe chan_sip trunk toe
Trunk name = eigen verzonnen naam
Outbound CallerID = telefoonnummer in +31 notatie - Ga naar het tabblad sip settings->subtabblad Outgoing en vul de volgende gegevens in zonder de ; commentaar
Trunk Name = eigen verzonnen naam voor de trunk zoals trunk_+31487123456_outgoing
PEER details =
type=friend
host=ims.imscore.net
insecure=port,invite
username=aaba12345678@ims.imscore.net ; Gebruikernaam uit de kpn service tool
secret=wachtwoord_kpn_service_tool ; Wachtwoord ingesteld met de KPN service tool
outboundproxy=voip1-ext.kpn.net
fromuser=+31487123456 ; Telefoonnummer in +31 notatie
fromdomain=ims.imscore.net
context=from-trunk ; Geeft aan dat het een verbinding is die van/naar een trunk endpoint buiten onze telecomcentrale gaat. from-internal zou aangeven dat de verbinding uitsluitend binnen onze centrale plaatsvind.
disallow=all ; geeft aan dat alle codecs geblokkeerd moeten worden behalve die bij allow
allow=ulaw&alaw ; Alleen ulaw en alaw gaven bij mij goede gesprekskwaliteit icm vast en mobiel. - Ga naar het subtabblad Incoming en vul de volgende gegevens in zonder de ; commentaar
Trunk Name = eigen verzonnen naam voor de trunk zoals trunk_+31487123456_incoming
User Details =
type=peer
host=ims.imscore.net
insecure=port,invite ; Laat ongeauthenticeerde gesprekken van een succesvolle registration toe(De kpn sip server dus)
context=from-trunk ; Geeft aan dat het een verbinding is die van/naar een trunk endpoint buiten onze telecomcentrale gaat. from-internal zou aangeven dat de verbinding uitsluitend binnen onze centrale plaatsvind.
Register string = +31487123456@ims.imscore.net:wachtwoord_kpn_service_tool:"aaba12345678@ims.imscore.net"@voip1-ext.kpn.net/+31487123456 ; telefoonnummers in +31 notatie, gebruikersnaam en wachtwoord uit de kpn service tool. De registration zorgt dat kpn weet waar gesprekken naartoe verstuurd moeten worden. het nummer achter de url geeft bij de sip server aan dat het met dat unieke id moet registreren bij FreePbx. Dit is noodzakelijk als je meerdere trunks wilt gebruiken. - Ga naar connectivity->Outbound routes om een reeks nummers naar de trunk toe te laten verwijzen
- Ga naar inbound routes om alle binnenkomende externe verbindingen naar een extensie, queue of hunt group te te laten verwijzen
Voeg 145.7.97.53 ims.imscore.net aan /etc/hosts op de server of maak een cname record aan op jouw dns server. Log in als root op de server console en typ nano /etc/hosts in om de hosts file te bewerken.
Extra background info voor newbies op dit gebied;
Trunk(Connectivity->Trunks) is een verbinding van/naar jouw sip provider.
Extensie(Applications->Extensions) is een daadwerkelijk (soft) toestel op jouw telecomcentrale. Hier maak je dus altijd jouw toestellen aan.
Hunt group(Applications->Ring group) is een lijst van nummers die in een bepaalde volgorde moeten worden gebeld. Hiermee kun je meerdere toestellen aan 1 binnenkomend nummer koppelen.
Queue(Applications->Queue) is een wachtrij waar je 1 of meerdere toestellen aan koppelt. De bellende partij krijgt dan bijv een bandje te horen met op dit moment zijn alle medewerkers in gesprek...
Als je al jouw toestellen in dezelfde pickup group gooit, kun je bijv vanuit de slaapkamer een gesprek dat binnenkomt op een ander toestel toch aannemen.
ulaw en alaw zijn bekend als G711 en is de meeste gebruikte audio codec in de telecomwereld op 64Kbps
G722 is in feite G711 met ondersteuning voor variabele bitrates