Newsgroup: it.tlc.telefonia.voip
Titolo: Asterisk in remoto

Salve a tutti. Ho un problema con il mio asterisk.
Ho un telefono remoto connesso via SIP all'asterisk a casa.
Se da casa chiamo il tel. remoto, non ci sono problemi. Se da tel. remoto 
chiamo casa, dopo 20 secondi esatti cade la comunicazione. Usando IAX2 
nessun problema in entrambi i versi. Ho letto che puo' essere un problema di 
stun, ma sia impostando uno stun pubblico sull'ata, sia installando uno stun 
server a casa, il problema rimane. Mi aiutate a trovare una soluzione? C'e' 
qualcosa che mi sfugge?
Grazie
  Ppacchio 


Fammi indovinare, asterisk ï¿œ sotto NAT.

 Fammi indovinare, asterisk � sotto NAT. 

 externhost=*******.
no-ip.info
    ; indirizzo IP pubblico
Io usavo 'externhost', ho cambiato tutto e sono passato a 'externip'.
E' decisamente piu' affidabile...
Lo stesso script che mi aggiorna il DNS dinamico (ho sia zoneedit che 
no-ip e uso ddclient) mi aggiorna anche il valore dell'IP nel file di 
configurazione di Asterisk, e poi lo riavvia dopo aver atteso che si 
svuotino le tabelle di nat del router.
Gli unici problemi, pero', che ho se l'IP e' sbagliato e che mi cadono 
dopo pochi secondi le chiamate a Eutelia.
Se mi collego da remoto a casa, non ho mai avuto problemi, anche quando 
non avevo l'IP esterno impostato.
Ovviamente ho le porte del protocollo SIP e dell'RTP girate dal router 
verso il server.
Ciao, Piero.

 
il nat a cui si riferisce ï¿œ quello a ip fisso.
Per implementare bene quello ad ip dinamico occorre aspettare
che implementino lo stun su asterisk.

 che implementino lo stun su asterisk.
Infatti con l'IP dinamico Asterisk non e' che vada molto bene, ma l'IP 
dinamico COMUNQUE non e' gradito da molte connessioni SIP 'continue'.
Come dicevo io ho avuto grossi problemi con i router: quando mi cambia 
IP la tabella di NAT del router (/proc/net/ip_conntrack) mantiene le 
connessioni UDP con il vecchio IP all'infinito, se Asterisk resta 
attivo, e questo impedisce al tutto di funzionare dopo un cambio di IP.
Fortunatamente anche gli IP dinamici, per un lungo periodo, restano ... 
statici.
Dopo lunghe prove ho fatto uno script, attivato da ddclient, che 
aggiorna l'IP nel DNS, abbatte Asterisk, cambia il valore dell'IP nella 
riga di sip.conf dove c'e' 'externip', attende 3 minuti che si svuoti la 
/proc/net/ip_conntrack del router, e poi riavvia Asterisk.
Da allora ha sempre funzionato tutto senza problemi.
Prima avevo un router diverso (sempre con Linux, ma con chip Texas), con 
una tabella di NAT meno ... appiccicosa, che si svuotava da sola, ma con 
gli ultimi 2 router che ho usato, Linux basati su chip Broadcom, c'era 
sempre stato il problema.
Comunque, alla fin fine, mi pare che il suo problema non fosse il 
raggiungere un provider esterno da Asterisk, ma il raggiungere il suo 
Asterisk da un suo telefono all'esterno.
Ciao, Piero.

 statici.
Io il problema l'ho risolto facendo fare da router alla macchina
linux su cui risiede anche asterisk ed usando un modem al posto
del classico router. Del resto se ci hai messo sopra asterisk
vuol dire che la terrai sempre accesa, no? :)

 ha scritto nel messaggio 
news:4ab88197$0$1110$4faf...@reader1.news.tin.it...


 Per quanto riguarda externip, non credo necessiti di un ip numerico.
Mi spiace contraddirti ma in exterip *deve* essere specificato un 
indirizzo ip e non un hostname; inoltre externhost ed externip sono 
alternativi, o l'uno o l'altro.
Che poi talvolta le cose funzionino anche se impostate in modo diverso 
da quello corretto ï¿œ tutt'altra questione.
Sono talmente tante le iterazioni possibili con il funzionamento del nat 
in uno specifico gateway da rendere spesso difficile comprendere quale 
sia il problema reale.
Talvolta in qualche gateway home con supporto alg ï¿œ persino 
sconsigliabile impostare qualsiasi port forwarding e regola di firewall 
pena il mancato funzionamento del tutto.
Ma all fine se IAX2 ti va bene e puoi usarlo perchï¿œ farsi del male?
-- 
Design for the future, because it will be here sooner than you think.
(C) Eric S. Raymond, from "The Art of Unix Programming"

 Ciao, Piero.
Ciao Pietro,
se non ï¿œ chiedere troppo, potresti condividere il tuo script?
Mi interessa la modifica su sip.conf dell'IP.
Non si potrebbe semplicemente mettere in cron uno script di questo tipo,  
eseguirlo all'avvio prima
di asterisk, poi tipo ogni 15 minuti e se l'IP ï¿œ cambiato lo aggiorna in  
sip.conf e inviare il
comando asterisk -rx "module reload"?:
curl -s 
http://checkip.dyndns.org
 | sed 's/.*  
\([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*\).*/\1/' > /tmp/current_ip
Non avrei necessita di avere un dns dinamico per accedere dall'esterno...
Ciao e grazie by Elia

 comando asterisk -rx "module reload"?:
Tipo questo dovrebbe funzionare, si usa per far partire Asterisk all'avvio  
e poi in cron ogni 15 minuti, oppure in if_up.d:
IPINSIP=`grep "^externip" sip.conf | awk -F= '{print $2}'`
IPCURRENT=`curl -s 
http://checkip.dyndns.org
 | sed 's/.*  
\([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*\).*/\1/'`
IPTEMP=/tmp/ip.temp
if [ ! -e $IPTEMP ];then
         echo "Primo avvio, creo il file $IPTEMP e avvio Asterisk"
         echo $IPCURRENT > $IPTEMP
         sed -ie "s/$IPINSIP/$IPCURRENT/g" /opt/sip.conf
         /usr/sbin/asterisk
else
         if [ "`cat $IPTEMP`" != "$IPCURRENT" ];then
                 echo "L'IP ï¿œ cambiato da `cat $IPTEMP` in $IPCURRENT,  
aggiorno sip.conf e ricarico i moduli in Asterisk"
                 sed -ie "s/$IPINSIP/$IPCURRENT/g" /opt/sip.conf
                 echo $IPCURRENT > $IPTEMP
                 /usr/sbin/asterisk -rx "module reload"
         else
                 echo "Hai ancora lo stesso IP."
         fi
fi


Per verificare quando il router cambia ip ti consiglierei di usare
il comando tracert $IPWAN, se supera un certo numero di hop allora
il router ha cambiato ip. In questa maniera puoi fare il controllo
anche ogni minuto poichï¿œ resti sempre in LAN.
Per quanto riguarda il sostituire l'ip nel file sip.conf ho letto
che si puï¿œ fare usando una riga #include filename come si fa
in C.
Basta che tu in filename inserisci externip=..... e  il gioco ï¿œ fatto.