FreePBX SIP Trunk Setup Guide
Configure a VoxioTelecom SIP trunk in FreePBX step by step: chan_pjsip settings, firewall and RTP, outbound routes with Premium CLI tech prefixes, inbound DIDs, caller ID and troubleshooting.
Configure a VoxioTelecom SIP trunk in FreePBX step by step: chan_pjsip settings, firewall and RTP, outbound routes with Premium CLI tech prefixes, inbound DIDs, caller ID and troubleshooting.

FreePBX is the most common PBX we see on the other end of a VoxioTelecom trunk. This guide walks through a complete, working setup: creating the trunk in your portal, configuring a chan_pjsip trunk in FreePBX, writing outbound routes (including Premium CLI tech prefixes), handling inbound DIDs, and fixing the handful of issues that account for almost every failed first call.
Tested on FreePBX 16 and 17 with Asterisk 18/20. The screens differ slightly between versions, but the field names are the same.
Sign in and go to Portal → SIP Trunks → New trunk. You choose between two authentication modes:
| Mode | Best for | Notes |
|---|---|---|
| IP whitelist | PBX with a static public IP | No registration; we authenticate by source IP. Up to 10 IPs or CIDR blocks per trunk. |
| Username / password | PBX behind NAT or dynamic IP | SIP digest auth, registration expiry 3600s. |
If your FreePBX box has a static public IP, use IP authentication — it is simpler and removes registration as a failure mode. Otherwise use username/password. Credentials stay visible in the portal after creation, and you can rotate the password at any time.
Note the connection details you will need:
sip.voxiotelecom.com5060 UDP/TCP, 5061 TLS10000-20000/UDPBefore touching FreePBX, make sure the server can actually talk to us. On the PBX firewall (and any upstream NAT device), allow:
sip.voxiotelecom.comIn FreePBX → Connectivity → Firewall, add our signalling host to the Trusted zone if the integrated firewall is enabled. A one-way media hole is the single most common cause of "call connects but no audio".
Go to Connectivity → Trunks → Add Trunk → Add SIP (chan_pjsip) Trunk.
voxio+, e.g. 493090182000. Leave blank if you set CLI per extension or per route.0 for unlimited.| Field | Value |
|---|---|
| Username | your SIP trunk user (leave blank for IP auth) |
| Secret | your SIP trunk password (leave blank for IP auth) |
| Authentication | Outbound (or None for IP auth) |
| Registration | Send (or None for IP auth) |
| SIP Server | sip.voxiotelecom.com |
| SIP Server Port | 5060 |
| Transport | 0.0.0.0-udp |
| Context | from-trunk |
| Field | Value |
|---|---|
| From Domain | sip.voxiotelecom.com |
| DTMF Mode | RFC 4733 (RFC 2833) |
| Direct Media | No |
| Qualify Frequency | 60 |
| Codecs | alaw, ulaw, g729 only — disable the rest |
Set Direct Media to No. With direct media enabled, Asterisk tries to bridge RTP endpoint-to-endpoint and audio breaks as soon as one leg is behind NAT.
Click Submit, then Apply Config.
If you prefer to read the resulting config, this is what FreePBX generates:
[voxio]
type=endpoint
transport=transport-udp
context=from-trunk
disallow=all
allow=alaw,ulaw,g729
outbound_auth=voxio-auth
aors=voxio-aor
from_user=YOUR_SIP_USER
from_domain=sip.voxiotelecom.com
direct_media=no
dtmf_mode=rfc4733
[voxio-auth]
type=auth
auth_type=userpass
username=YOUR_SIP_USER
password=YOUR_SIP_PASSWORD
[voxio-aor]
type=aor
contact=sip:sip.voxiotelecom.com:5060
qualify_frequency=60
From the Asterisk CLI:
asterisk -rx "pjsip show endpoints"
asterisk -rx "pjsip show registrations"
The endpoint should show Avail and, for registered trunks, the registration state should be Registered. If it shows Unavailable, the problem is almost always firewall or a typo in the SIP server field — not credentials.
We expect E.164 without the leading +:
4930901820 → Germany, Berlin12125551234 → USA, New York18005551234 → USA Toll-FreeGo to Connectivity → Outbound Routes → Add Outbound Route.
voxio-outvoxio+, match X. — strips the plus that most clients sendX. — catch-all for everything elseThat is enough for standard termination.
Premium routes are selected with a tech prefix in front of the destination — same trunk, same credentials, only the dialled string changes:
| Destination | Prefix | Example dialled string |
|---|---|---|
| Germany Premium CLI | 1112 | 1112 + 4930901820 |
| Netherlands Premium CLI | 111 | 111 + 31201234567 |
| Standard route | none | 4930901820 |
The cleanest way to do this in FreePBX is a second outbound route placed above the standard one:
voxio-premium-devoxio49X., prepend 1112Now anything a user dials starting with 49 leaves your PBX as 1112 + the number and lands on the Premium CLI route, while the rest falls through to the standard route below. Repeat the pattern per country you want on Premium. Your rate deck in the portal lists every premium prefix explicitly, so check it before adding prepends.
Route order matters: FreePBX evaluates outbound routes top to bottom and uses the first pattern match.
We never rewrite your caller ID. Whatever you present is what the terminating carrier sees — which also means that if you send nothing, or send a display name instead of a number, the call arrives with no CLI or gets rejected outright.
Rules that make this work reliably:
From header user part — no display name, no spaces.P-Asserted-Identity where possible.A correct INVITE looks like this:
From: <sip:493090182000@sip.voxiotelecom.com>;tag=a1b2
P-Asserted-Identity: <sip:493090182000@sip.voxiotelecom.com>
To: <sip:4915112345678@sip.voxiotelecom.com>
In the portal, Portal → SIP Trunks also lets you pick a caller ID mode per trunk: pass-through (default, we forward what you send), fixed (we always present one number), or hidden.
If you bought a number from us, point it at your PBX like this:
+).from-trunk; otherwise inbound calls hit the wrong dialplan context and get rejected with "no matching extension".If inbound calls never arrive, check pjsip set logger on and place a test call — if you see no INVITE at all, the issue is upstream routing or firewall, not FreePBX.
Place a test call, then look at the SIP trace:
asterisk -rvvv
pjsip set logger on
The most frequent problems, in the order we see them on support tickets:
| Symptom | Usual cause |
|---|---|
403 Forbidden | Source IP not whitelisted, or wrong SIP username/password |
404 Not Found / 503 | Number not in E.164, or a leading + was not stripped in the dial pattern |
| Call connects, no audio | RTP 10000-20000 blocked, or Direct Media left enabled |
| DTMF ignored by IVRs | DTMF mode not set to RFC 4733/2833 |
| Call arrives with no caller ID | Display name sent instead of a number, or empty Outbound CallerID |
| Wrong rate charged | Premium tech prefix missing, or prepend applied on the wrong route |
Billing is per second on most destinations and 6/6 on NANP; every call appears in Portal → Call History within seconds, with the SIP user, destination, duration and cost, so you can confirm a test call was rated the way you expected.
RegisteredOnce that is in place, switching routes or adding Premium CLI destinations is just another outbound route — no changes to the trunk itself.
Need a hand? Open a ticket in Portal → Support or email office@voxiotelecom.com; our NOC is staffed 24/7 and can read the SIP trace from our side while you place a test call.
Should I use chan_pjsip or the legacy chan_sip driver?
Use chan_pjsip. chan_sip is deprecated and removed in Asterisk 21; all settings in this guide assume pjsip.
Do I need to register the trunk?
Only if your PBX has a dynamic IP. With a static public IP, whitelist it in the portal and set Registration to None — fewer moving parts and no re-registration gaps.
Why is my call rated on the standard route instead of Premium CLI? The tech prefix was not sent. Check that the premium outbound route sits above the catch-all route and that the prepend value matches the prefix in your rate deck.
Can I use the same trunk for inbound DIDs and outbound calls?
Yes. One trunk carries both directions; inbound calls land in the from-trunk context and are matched by your inbound routes.
Which codecs should I enable? alaw, ulaw and g729. Disable everything else so negotiation is predictable and transcoding is avoided.
Create an account to browse the full A-Z deck in your portal — Premium CLI and Standard clearly labelled, searchable by prefix or destination.