Configurazione del Nokia E60

Il Nokia E60 ha un client voip SIP a bordo. A parte che la configurazione sembra oscenamente complessa, e che ovviamente qualche bug del software aiuta a rendere le cose piu` interessanti, piu` o meno in prima battuta devo dire che funziona.

Configurazione di Asterisk

La configurazione di Asterisk (sip.conf) che sto usando ora e`:

[13]
type=friend
context=interni
username=13
secret=password
dtmfmode=rfc2833
host=dynamic
nat = yes
callerid= "Kurgan Cell VOIP" <13>
canreinvite=no
pickupgroup=1
callgroup=1
maxexpirey=30
defaultexpirey=25
qualify=yes

Una nota a riguardo del file extensions.conf: se sul cellulare si hanno numeri memorizzati nel formato "+39xxxx", ovvero con il prefisso internazionale, e` possibile aggiungere un paio di righe all'extensions.conf in modo da fare funzionare le chiamate con il +39 davanti via internet. Supponendo che normalmente per uscire dal centralino si usi lo zero, ci sara` una riga tipo:

exten => _0.,1,Dial(SIP/ehiweb/${EXTEN:1})

Bene, aggiungendone una cosi`:

exten => _+39.,1,Dial(SIP/ehiweb/${EXTEN:3})

Si fa in modo che le chiamate ai numeri che iniziano con il +39 vengano mandate fuori previa l'eliminazione del "+39" davanti.

Dovrebbe essere semplice anche aggiungere un sistema generico per le internazionali, ma non l'ho provato. Qualcosa tipo:

exten => _+39.,1,Dial(SIP/ehiweb/${EXTEN:3})
exten => _+.,1,Dial(SIP/ehiweb/00${EXTEN:1})

Questo dovrebbe intercettare le chiamate al +39 (italia) e togliere il "+39", mentre qualsiasi altra chiamata a "+qualcosa" viene modificata togliendo il "+" e mettendo "00" in testa. Quindi, per dire, una chiamata a "+44xxxx" diventa "0044xxxxx", che e` la sintassi corretta per fare una internazionale con il voip.

E` importante notare che il telefono non supporta la notifica di messaggi in attesa in segreteria, per cui non posso usare il comando "mailbox=xx". Se ci provo, tendenzialmente il telefono non riceve piu` chiamate, o meglio (fa piu` ridere) inizia a suonare quando l'asterisk e` andato in timeout e rinuncia alla chiamata.

Configurazione del telefono

Nota: in alcuni campi il telefono aggiunge da solo "sip:" in testa ai valori, e` normale.

Menu` Tools, Settings, Connection, SIP settings:

Poi, nel menu` "Proxy Server":

Quindi si risale di un livello e si va nel menu` "Registrar server"

Nota importante sul NAT

Il telefono non supporta alcun protocollo per aggirare i problemi del NAT, quindi per farlo funzionare attraverso un NAT (Asterisk su ip pubblico, telefono dietro un NAT) occorre fare un po` di modifiche alla configurazione di Asterisk, pero` alla fine funziona.

Mettendo "nat=yes" nella configurazione di Asterisk, questo riesce a fare passare correttamente i pacchetti SIP, ignorando l'indirizzo ip proposto dal telefono, che propone sempre il proprio IP privato, ed usando come destinatario del traffico SIP l'indirizzo IP dal quale arriva il traffico SIP generato dal telefono, ovvero l'indirizzo pubblico del router che lo sta nattando.

Il problema e` che lo stesso deve essere fatto anche per i pacchetti RTP. In pratica, Asterisk inizia a mandare i propri pacchetti RTP all'indirizzo fornitogli dal telefono (quindi quello privato) e questi vanno ovviamente persi. Nel momento in cui, pero`, un pacchetto RTP che e` partito dal telefono arriva all' Asterisk, questo provvede a correggersi ed inizia a mandare i propri pacchetti all'indirizzo (ip e porta) dal quale ha ricevuto quelli del telfono. Questo pero` comporta che Asterisk abbia il firewall sfondato, ed accetti pacchetti UDP da chiunque, non avendo modo di sapere a priori da chi aspettarsi traffico RTP e da chi no. Il fatto che attualmente nel kernel di Linux manchi un helper per il SIP (che potrebbe mettere in relazione i flussi RTP con quelli SIP) o che manchi un modulo che fa il match del solo protocollo RTP fa si` che la soluzione non sia proprio sicurissima.

In pratica, occorre aprire il firewall della macchina Asterisk per accettare da chiunque connessioni sulle porte UDP usate per l'RTP. Il rischio e` che qualche altro demone si metta in ascolto su una delle porte "aperte" e quindi venga esposto al pubblico involontariamente. Per limitare i danni, ho ridotto il numero delle porte valide per l' RTP in Asterisk, in modo che questa probabilita` sia minore. Occorre ovviamente anche fare attenzione alla configurazione del sistema per cercare di evitare che una cosa del genere possa succedere.

Considerazioni varie da approfondire

4578.715141  10.1.42.254 -> 10.1.42.200  SIP/SDP Request: INVITE sip:13@10.1.42.200, with session description
4578.721117  10.1.42.200 -> 10.1.42.254  ICMP Destination unreachable (Port unreachable)
4579.577444  10.1.42.254 -> 10.1.42.200  SIP/SDP Request: INVITE sip:13@10.1.42.200, with session description
4579.740908  10.1.42.200 -> 10.1.42.254  ICMP Destination unreachable (Port unreachable)
4580.578160  10.1.42.254 -> 10.1.42.200  SIP/SDP Request: INVITE sip:13@10.1.42.200, with session description
4580.768819  10.1.42.200 -> 10.1.42.254  ICMP Destination unreachable (Port unreachable)
4581.577890  10.1.42.254 -> 10.1.42.200  SIP/SDP Request: INVITE sip:13@10.1.42.200, with session description
4581.997366  10.1.42.200 -> 10.1.42.254  ICMP Destination unreachable (Port unreachable)
4582.578600  10.1.42.254 -> 10.1.42.200  SIP/SDP Request: INVITE sip:13@10.1.42.200, with session description
4582.910968  10.1.42.200 -> 10.1.42.254  ICMP Destination unreachable (Port unreachable)
4583.578332  10.1.42.254 -> 10.1.42.200  SIP/SDP Request: INVITE sip:13@10.1.42.200, with session description
4583.730873  10.1.42.200 -> 10.1.42.254  ICMP Destination unreachable (Port unreachable)

In questo caso succede una cosa ridicola: dopo che l' asterisk e` andato in timeout, il telefono suona!

Ho fatto prove con "qualify=yes" in asterisk, e ho visto che il telefono, seppure risponda al ping, in determinate condizioni ignora qualsiasi pacchetto SIP. A naso, mi viene da dire che il client SIP si addormenta in qualche modo. Sul display del telefono risulto ancora registrato, ma di fatto non sono raggiungibile... e quando chiamo, il telefono si impalla e non accetta piu` comandi escluso il tasto "vivavoce" che funziona ancora. Devo spegnerlo per farlo riprendere.

Asterisk/TelefoniNokiaE60 (last edited 2009-04-12 17:33:24 by localhost)