Vai al contenuto

Configurare un trunk SIP su Asterisk con PJSIP

Questa guida ti accompagna nella configurazione completa di un trunk Vohippo su Asterisk con il driver PJSIP (Asterisk 16 e successivi): ogni sezione di pjsip.conf spiegata, il dialplan per uscire e ricevere, il caller ID, il NAT e i codec. In fondo trovi i comandi per verificare che tutto funzioni e le soluzioni ai problemi più frequenti.

13 minuti di letturaAggiornata il

Cosa ti serve prima di cominciare

Un trunk SIP è il collegamento fra il tuo centralino e l'operatore: le chiamate dei tuoi interni escono su Internet verso la rete telefonica, e i tuoi numeri squillano sul centralino. Su Asterisk il trunk è un insieme di oggetti PJSIP scritti in pjsip.conf, più due contesti nel dialplan. Se vuoi prima capire cosa offre il servizio, la pagina sul trunk SIP Vohippo riassume canali, prezzi e limiti.

Prepara queste cose prima di aprire l'editor:

  • Un account SIP dedicato al centralino, creato nel portale alla voce Account SIP. Se non hai ancora un accesso, puoi registrarti al portale.
  • Utente e password dell'account, copiati senza spazi prima o dopo.
  • Almeno un caller ID verificato: un numero acquistato su Vohippo (è già pronto, «CLID Nativo») oppure un tuo numero di un altro operatore verificato con SMS, WhatsApp o chiamata vocale.
  • Asterisk 16 o successivo con il modulo res_pjsip caricato e l'accesso alla console (asterisk -rvvv).

Pensa a uno studio con quattro interni su un Asterisk in ufficio: un solo account SIP per il trunk basta, perché i canali si impostano sull'account con «Chiamate contemporanee in uscita» (da 1 a 1000, ogni canale oltre il primo costa 0,50 € al mese). Nel portale conviene anche impostare subito il «Limite di spesa giornaliero» e le destinazioni abilitate: sono la prima difesa se il centralino venisse compromesso, come spiega la guida alla sicurezza VoIP.

Il trunk in pjsip.conf

La configurazione è fatta di quattro sezioni più una: le credenziali, il posto dove ci trovi, la registrazione e l'endpoint vero e proprio. L'ultima (identify) serve a riconoscere le chiamate che arrivano da noi. Sostituisci UTENTE_DAL_PORTALE e PASSWORD_DAL_PORTALE con i dati del tuo account.

; /etc/asterisk/pjsip.conf — trunk verso Vohippo
[vohippo-auth]
type=auth
auth_type=userpass
username=UTENTE_DAL_PORTALE
password=PASSWORD_DAL_PORTALE

[vohippo-aor]
type=aor
contact=sip:sip.vohippo.com:5060
qualify_frequency=60

[vohippo-reg]
type=registration
transport=transport-udp
outbound_auth=vohippo-auth
server_uri=sip:sip.vohippo.com
client_uri=sip:[email protected]
retry_interval=60
expiration=600

[vohippo]
type=endpoint
transport=transport-udp
context=da-vohippo
aors=vohippo-aor
outbound_auth=vohippo-auth
from_user=UTENTE_DAL_PORTALE
from_domain=sip.vohippo.com
disallow=all
allow=alaw,ulaw,g722
dtmf_mode=rfc4733
direct_media=no
rtp_symmetric=yes
force_rport=yes
rewrite_contact=yes

[vohippo]
type=identify
endpoint=vohippo
match=sip.vohippo.com

La configurazione usa un trasporto chiamato transport-udp. Se nel tuo pjsip.conf non c'è già, aggiungilo in cima al file: è il trasporto UDP sulla porta 5060, lo stesso che usa il nostro server.

[transport-udp]
type=transport
protocol=udp
bind=0.0.0.0:5060

Cosa fa ogni sezione

auth: le credenziali

La sezione vohippo-auth contiene utente e password dell'account SIP. Asterisk la usa quando il nostro server risponde con una richiesta di autenticazione (il classico 401): è normale che la prima REGISTER venga respinta e la seconda, con le credenziali, accettata. Lo stesso oggetto serve sia per la registrazione sia per le chiamate in uscita, perché entrambe lo richiamano con outbound_auth.

aor: dove trovare il server

L'AOR (Address of Record) dice ad Asterisk a quale indirizzo mandare le chiamate del trunk: sip:sip.vohippo.com:5060. Con qualify_frequency=60 Asterisk manda una richiesta OPTIONS ogni minuto e tiene d'occhio la raggiungibilità del server; se smettesse di rispondere, lo vedresti subito con pjsip show endpoint vohippo.

registration: farsi trovare per le chiamate in entrata

La registrazione serve alle chiamate in entrata: dice al nostro server a quale indirizzo pubblico si trova il tuo Asterisk, così quando qualcuno chiama un tuo numero sappiamo dove mandarlo. expiration=600 è la durata della registrazione in secondi (dieci minuti, il valore predefinito della piattaforma); Asterisk la rinnova da solo prima della scadenza. Con retry_interval=60, se la registrazione fallisce, Asterisk riprova ogni minuto.

endpoint: il trunk vero e proprio

L'endpoint vohippo raccoglie tutto il resto. context=da-vohippo è il contesto del dialplan dove finiscono le chiamate in arrivo. from_user e from_domain mettono nel campo From lo username dell'account e il nostro dominio. disallow=all seguito da allow=alaw,ulaw,g722 limita i codec a quelli che la piattaforma accetta. dtmf_mode=rfc4733 manda i toni della tastiera come eventi separati dall'audio, il metodo usato dal nostro server.

Le ultime quattro righe riguardano la rete. direct_media=no tiene l'audio sempre su Asterisk invece di farlo passare direttamente fra telefono e operatore. rtp_symmetric, force_rport e rewrite_contact fanno sì che Asterisk risponda all'indirizzo e alla porta da cui arrivano davvero i pacchetti: sono le opzioni che risolvono la maggior parte dei problemi di NAT.

identify: riconoscere chi ti chiama

Quando arriva una INVITE, Asterisk deve capire a quale endpoint appartiene. La sezione identify con match=sip.vohippo.com dice che tutto ciò che arriva dal nostro server è il trunk Vohippo, quindi va nel contesto da-vohippo. Senza questa sezione le chiamate in entrata finirebbero rifiutate o nel contesto anonimo.

Il dialplan

Servono due contesti: uno per le chiamate in uscita dai tuoi telefoni e uno per quelle che arrivano dal trunk. Il nome del contesto in entrata deve essere lo stesso scritto in context= sull'endpoint.

; /etc/asterisk/extensions.conf
[da-interni]                       ; contesto dei tuoi telefoni
exten => _X.,1,Set(CALLERID(num)=390212345678)   ; il tuo numero verificato
 same => n,Dial(PJSIP/${EXTEN}@vohippo,60)
 same => n,Hangup()

[da-vohippo]                       ; chiamate in arrivo dal trunk
exten => _.,1,NoOp(Chiamata in entrata da ${CALLERID(num)})
 same => n,Dial(PJSIP/101&PJSIP/102,25)
 same => n,Voicemail(101@default,u)
 same => n,Hangup()

Le chiamate in uscita

Nel contesto da-interni il pattern _X. prende qualsiasi numero composto e lo manda al trunk con Dial(PJSIP/${EXTEN}@vohippo,60), aspettando fino a 60 secondi la risposta. I numeri si compongono come su un telefono normale: in formato nazionale per l'Italia (06 1234 5678, 345 218 0937) oppure con il prefisso internazionale, meglio con 00 o +, per l'estero (0044…, +33…). Un numero senza prefisso viene interpretato nel paese del cellulare che hai verificato.

Se nello stesso Asterisk hai interni locali (101, 102…), definiscili prima nel contesto o in un contesto incluso, così non escono dal trunk. Gli interni brevi di Vohippo (da 2 a 6 cifre) collegano invece gli account SIP dello stesso cliente e sono gratuiti: se mandi al trunk un numero breve che corrisponde a un tuo account, squilla quello.

Le chiamate in entrata

Il contesto da-vohippo usa il pattern _., che accetta qualunque cosa arrivi dal trunk: fa squillare insieme gli interni 101 e 102 per 25 secondi e poi passa alla segreteria di Asterisk. È una scelta prudente, perché quello che Asterisk vede come estensione dipende dalla registrazione e non dal numero chiamato. Se vuoi trattare in modo diverso più numeri, guarda la prima chiamata con pjsip set logger on prima di scrivere regole più precise.

Nel portale, il numero deve avere un instradamento con il passo «Squilla account SIP» verso l'account del trunk: un numero senza flusso finisce in «Chiamate rifiutate». Come si costruiscono i passi lo spiega la guida su come configurare un numero in entrata.

Il caller ID: le regole vere

Il caller ID è il numero che vede chi riceve la tua chiamata. Sulla piattaforma ogni chiamata in uscita deve avere un caller ID verificato: senza, la chiamata viene rifiutata e nel report compare «Caller ID non autorizzato». Non esiste l'uscita anonima. Il caller ID si decide in due modi.

  • Caller ID fisso sull'account: lo imposti nel portale e vince sempre, qualunque cosa mandi Asterisk. È il modo più semplice se tutto lo studio esce con lo stesso numero.
  • «Preso dalla chiamata (deve essere uno dei tuoi caller ID)»: la piattaforma legge il numero dalla INVITE, in quest'ordine: P-Asserted-Identity, Remote-Party-ID, From. Il primo che corrisponde a un tuo caller ID verificato viene usato.

Mandare il numero da Asterisk

Con l'endpoint dell'esempio, from_user mette nel From lo username dell'account, non il numero impostato con Set(CALLERID(num)=…). Se vuoi scegliere il caller ID dal dialplan (per esempio un numero diverso per reparto), fai viaggiare il numero nel P-Asserted-Identity, che la piattaforma legge per primo, aggiungendo questa riga all'endpoint vohippo:

send_pai=yes

Ricarica con pjsip reload e controlla con il logger che la INVITE contenga l'intestazione P-Asserted-Identity con il tuo numero. L'account viene comunque riconosciuto dalle credenziali, quindi il numero può viaggiare anche nel From: se preferisci, puoi togliere from_user e lasciare che Asterisk ci metta il caller ID.

I numeri acquistati su Vohippo sono già caller ID. Un numero di un altro operatore si verifica nel portale (codice valido 10 minuti, 5 tentativi) e costa 0,02 € per chiamata risposta. Tutti i casi, compresi i numeri WhatsApp, sono nella guida sul caller ID e come impostarlo.

NAT e firewall

Se Asterisk sta dietro un router con NAT (il caso tipico di un server in ufficio), il problema da prevenire è l'audio da una parte sola: Asterisk scrive nei messaggi SIP il suo indirizzo privato e l'audio di ritorno non trova la strada. Il nostro server gestisce già il NAT dal suo lato e l'endpoint dell'esempio fa la sua parte, ma su Asterisk conviene anche dichiarare l'indirizzo pubblico nel trasporto.

[transport-udp]
type=transport
protocol=udp
bind=0.0.0.0:5060
external_media_address=203.0.113.10
external_signaling_address=203.0.113.10
local_net=192.168.1.0/24

Al posto di 203.0.113.10 metti l'indirizzo pubblico dell'ufficio, e in local_net la tua rete interna. Poi controlla tre cose sul router e sul firewall:

  1. Disattiva il SIP ALG del router: riscrive i pacchetti SIP e spesso li rompe.
  2. Lascia passare la porta 5060 UDP verso e da sip.vohippo.com.
  3. Lascia passare le porte RTP: le nostre vanno da 10000 a 20000 UDP; quelle di Asterisk sono in rtp.conf (rtpstart e rtpend).

Ricorda che le modifiche ai trasporti richiedono un riavvio di Asterisk, non basta pjsip reload. Il funzionamento del NAT e le porte da aprire sono spiegati con calma nella guida su NAT, firewall e porte.

I codec

La piattaforma accetta solo G.711 a-law, G.711 µ-law e G.722: per questo l'endpoint ha disallow=all e poi allow=alaw,ulaw,g722. L'ordine conta: Asterisk propone i codec nell'ordine in cui li scrivi. Con alaw in testa ottieni la qualità della telefonia europea classica; G.722 dà l'audio a banda larga ("HD") quando anche l'altro lato lo supporta.

Non aggiungere G.729 o Opus: sul trunk Vohippo non vengono negoziati, e un telefono interno che usa solo quei codec costringerebbe Asterisk a transcodificare o farebbe fallire la chiamata. Per la banda, calcola circa 100 kbit/s per direzione per ogni chiamata G.711: con quattro chiamate contemporanee servono circa 400 kbit/s in upload liberi. La guida ai codec VoIP spiega le differenze in dettaglio.

Verifica che funzioni

Dalla console di Asterisk (asterisk -rvvv) bastano tre comandi per capire dove ci si è fermati.

pjsip show registrations     ; deve dire Registered
pjsip show endpoint vohippo  ; stato e codec negoziati
pjsip set logger on          ; traccia SIP completa, per capire un rifiuto

Poi fai le prove in quest'ordine:

  1. Controlla che la registrazione risulti Registered e che l'account risulti registrato anche nel portale.
  2. Chiama un cellulare da un interno: devi sentire e farti sentire.
  3. Chiama il tuo numero virtuale da un cellulare: deve squillare l'interno previsto.
  4. Durante una chiamata premi qualche tasto verso un servizio con menu, per verificare i toni DTMF.
  5. Apri il Report chiamate nel portale: ogni prova deve comparire con il suo esito.

Quando qualcosa non torna, il logger ti mostra la risposta esatta del server. Nel portale trovi anche il log SIP dell'account degli ultimi 7 giorni, utile per vedere le registrazioni e i rifiuti dal nostro lato.

Se qualcosa non va

Questi sono i problemi più comuni, con la causa più probabile.

SintomoCausa probabileCosa fare
Registrazione RejectedUtente o password con uno spazio in fondoRicopia le credenziali dal portale e ricarica
Registrazione che smette dopo molti erroriIl firewall della piattaforma ha bloccato l'IPCorreggi la password, poi sblocca l'indirizzo da «Sicurezza degli indirizzi IP»
Chiamata rifiutata subito (403)Caller ID non verificato, destinazione non abilitata o credito esauritoGuarda il motivo nel Report chiamate
Occupato (486) in uscitaRaggiunte le «Chiamate contemporanee in uscita»Aumenta i canali sull'account
Audio da un lato soloNAT o SIP ALGIndirizzo pubblico nel trasporto, SIP ALG spento
Le chiamate in entrata non arrivanoTrunk non registrato o numero senza instradamentoControlla la registrazione e il passo «Squilla account SIP»
I tasti non funzionano nei menuDTMF diverso da RFC 4733Lascia dtmf_mode=rfc4733

Il firewall della piattaforma blocca un indirizzo dopo 5 errori di autenticazione in 10 minuti, con blocchi sempre più lunghi se gli errori continuano: per questo, se cambi la password nel portale, aggiornala subito anche su Asterisk. Nel Report chiamate il motivo del rifiuto è scritto per esteso, per esempio «Destinazione non abilitata sull'account» o «Limite di spesa giornaliero raggiunto».

Domande frequenti

Funziona anche con chan_sip?

Questa guida usa PJSIP, il driver attuale di Asterisk; chan_sip è stato rimosso dalle versioni recenti. I concetti sono gli stessi (server, credenziali, registrazione, codec, NAT), ma i nomi delle opzioni cambiano: se puoi, passa a PJSIP.

Posso usare l'autenticazione per indirizzo IP invece della password?

Sì, se il tuo Asterisk ha un indirizzo IP pubblico fisso: scegli «Indirizzo IP» sull'account nel portale e aggiungi l'indirizzo fra quelli autorizzati. In quel caso il caller ID va mandato nel P-Asserted-Identity (consigliato) o nel From.

Perché le chiamate in uscita vengono rifiutate se la registrazione funziona?

La registrazione dice solo che le credenziali sono giuste. Una chiamata viene rifiutata se il caller ID non è fra i tuoi verificati, se la destinazione non è abilitata, se manca il credito o se è stato raggiunto il limite di spesa: il motivo esatto è nel Report chiamate.

Quanti canali ha il trunk?

Quelli che imposti sull'account con «Chiamate contemporanee in uscita», da 1 a 1000. Il limite vale solo per le chiamate in uscita: quelle in entrata non lo consumano.

Posso registrare lo stesso account su due centralini?

Un account accetta fino a 5 dispositivi registrati, ma per un centralino di produzione è meglio un account dedicato: così canali, limiti di spesa e report restano separati.

Asterisk può fare IVR, code e fasce orarie con Vohippo?

Sì, ma sono funzioni di Asterisk: Vohippo porta le linee, i numeri e il caller ID, il tuo centralino decide menu, code e orari. Se non vuoi gestire un server, valuta un centralino cloud.

Altre guide

Guida: trunk SIP su FreePBX

Su FreePBX non si scrivono file: si compilano poche schermate dell'interfaccia web. Qui trovi cosa mettere in ogni campo del trunk PJSIP, come creare…

Guida: trunk SIP su 3CX

Come collegare un trunk SIP Vohippo a un centralino 3CX, dalla creazione dell'account nel portale alla prima chiamata. Le voci del pannello cambiano…

Caller ID

Il caller ID è il numero che vede chi riceve la tua chiamata. In questa guida trovi come Vohippo decide quale numero mostrare, come impostarlo su un…

NAT, firewall e porte

Quasi tutti i problemi di un telefono VoIP che si registra ma non squilla, o che fa sentire la voce da una parte sola, nascono tra il router e il…

Codec VoIP

Il codec è il modo in cui la voce viene trasformata in dati per viaggiare su Internet: decide quanta banda consuma una chiamata e quanto bene si…

Guida: sicurezza VoIP

Una frode telefonica raramente è un attacco sofisticato: qualcuno trova un account con la password debole, ci registra sopra un apparato e chiama…

Prova la demo AI in tempo reale

Ti risponde la Segretaria AI che configuri dentro Vohippo, esattamente come risponderebbe per la tua azienda: ti manda un riepilogo esatto della conversazione e ti passa la chiamata solo quando serve. Le regole le decidi tu, anche dall'app.

Parla 32 lingue: ciao

Parliamone: la demo la fa una persona, non un video

Ti mostriamo il portale dal vivo con un nostro operatore e rispondiamo alle domande sul tuo caso specifico. Se preferisci scrivere, siamo su WhatsApp.

Registrazione gratuita e senza impegno: ti accreditiamo un credito di prova per fare le tue chiamate di test.