Differences between revisions 4 and 5
Revision 4 as of 2006-07-23 10:06:40
Size: 8420
Editor: Kurgan
Comment:
Revision 5 as of 2006-07-24 07:42:59
Size: 9042
Editor: Kurgan
Comment:
Deletions are marked like this. Additions are marked like this.
Line 83: Line 83:
 * Mi sono accorto che spesso ci sono microinterruzioni nella conversazione, usando il voip. Capita anche che diventino significativamente fastidiose, veramente, sia per frequenza che per durata. Il fatto che Asterisk gestisca i flussi RTP in modo sincrono peggiora ulteriormente le cose. La mia idea e` che questo problema sia dovuto alla WLAN che ogni tanto perde pacchetti, ma non ho alcun modo di verificarlo non potendo usare il voip "via filo" con questo telefono. I problemi si presentano in modo simile sia sotto il mio AP di casa che quando sono connesso da fuori via internet, quindi sia con che senza NAT.

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 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

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:

  • Profile name: quello che volete
  • Service profile: IETF
  • Default Access Point: l' access point WLAN che volete usare (si sceglie dalla lista)
  • Public User Name: qui ci va lo username impostato in asterisk in sip.conf, poi "@" e poi l'indirizzo ip dell'asterisk. Apparentemente qualsiasi altra cosa provoca il fallimento della registrazione senza che passi nemmeno un pacchetto fra il telefono e l'asterisk (due ore per scoprirlo!). Quindi, per esempio, nel nostro caso ci va 13@10.1.42.254. La cosa curiosa e` che pare che l'indirizzo IP qui indicato non venga mai usato di fatto nelle connessioni... ah, mistero!

  • Use compression: NO
  • Registration: Always On (se volete ricevere le chiamate) altrimenti "When needed"
  • Use Security: NO (se ci si mette YES la registrazione fallisce, anche se non capisco perche`. Tra parentesi, la sicurezza la usa anche se si mette "no", perche` si autentica sull' Asterisk.)

Poi, nel menu` "Proxy Server":

  • Proxy Server Address: L'indirizzo IP (o hostname) del server Asterisk
  • Realm: Il realm definito in Asterisk. Attenzione, che di default il telefono ti mette la prima lettera della parola maiuscola, il che e` MALE. Quindi, ricordate di premere il tasto "#" per passare in minuscolo.
  • User Name: lo username SIP (nel nostro caso e` "13")
  • Password: La password (nel nostro caso e` "password"
  • Allow Loose Routing: con il default "yes" funziona, pero` devo capire a cosa serve. Immagino che sia una cosa simile al "reinvite", pero` non ne sono sicuro. Nel dubbio, ho negato il reinvite nell' Asterisk, il che dovrebbe rendere "nulla" questa configurazione.
  • Transport Type: UDP
  • Port: 5060

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

  • Registrar server Address: L'indirizzo IP (o hostname) del server Asterisk
  • Realm: lasciare vuoto (none)
  • Username: lasciare vuoto (none)
  • Password: lasciare vuoto (none). Immagino che questi tre campi prendano il default dal proxy server...
  • Transport Type: UDP
  • Port: 5060

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.

  • In rtp.conf (Asterisk) impostare i limiti delle porte a qualcosa di molto piu` restrittivo del default da 10.000 a 20.000, dal momento che ho solo 5 telefoni, ho messo un range di 50 porte, che dovrebbero bastare abbondantemente. Credo che ne bastino due per ogni connessione stabilita contemporaneamente.
  • Controllare con "netstat -nlu" che nessuno stia in ascolto sul range scelto (nota: asterisk non tiene le porte "impegnate", ma le impegna quando gli servono)
  • Aprire nel firewall il traffico RTP entrante su quelle porte a chiunque.
  • Ovviamente va aperta a tutti anche la 5060 per il SIP, altrimenti il telefono non puo` registrarsi, ma questo e` vero indipendentemente dal NAT.

Considerazioni varie da approfondire

  • Mi sono accorto che spesso ci sono microinterruzioni nella conversazione, usando il voip. Capita anche che diventino significativamente fastidiose, veramente, sia per frequenza che per durata. Il fatto che Asterisk gestisca i flussi RTP in modo sincrono peggiora ulteriormente le cose. La mia idea e` che questo problema sia dovuto alla WLAN che ogni tanto perde pacchetti, ma non ho alcun modo di verificarlo non potendo usare il voip "via filo" con questo telefono. I problemi si presentano in modo simile sia sotto il mio AP di casa che quando sono connesso da fuori via internet, quindi sia con che senza NAT.
  • Il telefono gestisce un solo access point per ogni configurazione SIP, il che significa che se si usano piu` access point (veramente, piu` ESSID) diversi per accedere allo stesso server SIP, occorre configurare un server SIP per ogni access point (per fortuna gli account si possono copiare) modificando solo l'access point di default. Tutti gli account SIP vanno poi inseriti nello stesso gruppo sotto "Settings, Internet Tel Settings".
  • Non ho capito perche`, ma ogni tanto il telefono rifiuta le richieste SIP in ingresso dall' Asterisk.

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)