sip_nat.conf con IP Dinámica

Discussion in 'Elastix 2.x' started by gamba47, May 28, 2009.

  1. gamba47

    Joined:
    May 28, 2009
    Messages:
    595
    Likes Received:
    0
    Bueno, ingrese al foro recien hoy, recien hoy intalé Elastix (antes jugué unos días con debian primero, ubuntu después, trixbox y ahora con elastix, creo que me quedo con elastix).

    El tema es el siguiente:

    En este topic, hablaron del problema del audio cuando se trabaja con nat (perdida de audio por la no llegada de los rtp supongo).

    La solución es bastante simple, fue publicada por jgutierrez y es esta:

    Code:
    Edita /etc/asterisk/sip_nat.conf
    y pon la siguiente configuración:
    
    nat=yes
    externip=xx.xx.xx.xx
    localnet=192.168.1.0/255.255.255.0
    
    en extern ip, debes poner la ip pública con la que sales, en localnet le pones la red privada que usas.
    
    Luego de eso ejecuta desde la consola:
    asterisk -rx "reload"
    El problema es que la IP externa cambia cada un determinado tiempo, como hacemos para resolver esto ? se arma un script para chequear la IP y se cambia con sed el externip ? después de estoy hay que hacer un reload de que cosas en asterisk ?


    Saludos a todos y gracias por el tiempo.

    gamba47
     
  2. jcastellanos

    Joined:
    Feb 10, 2009
    Messages:
    2,404
    Likes Received:
    0
    hola, si, aqui hay una cosa, es algo que tiene mucho problema cuando usas no-ip o dyndns, en algunas ocaciones funciona y en otras no, por ejemplo hace un mes mi caja funcionaa asi, con una ddns de no-ip a reinstale y ya o jalo.

    la solucion mejor en mi opinion es usar unscrip.

    ramoncio tiene uno muy bueno, pero no lo paso completo, ojala lea estas lineas y nos exlique como montarlo.

    saludos
     
  3. gamba47

    Joined:
    May 28, 2009
    Messages:
    595
    Likes Received:
    0
    Ok, gracias por avisar, esperemos que lea estas lineas y que la deje para todos acá.


    Voy a seguir leyendo!

    gamba47
     
  4. jcastellanos

    Joined:
    Feb 10, 2009
    Messages:
    2,404
    Likes Received:
    0
    seguro, ramoncio es un miembro activo de la comunidad, seguro nos lee al rato.

    un saludo
     
  5. ramoncio

    Joined:
    May 12, 2010
    Messages:
    1,663
    Likes Received:
    0
    Hace poco he leído que se puede poner externip=tudominio.dyndns.org y funciona sin problemas.
    Conviene poner también el parámetro externrefresh=300 donde 300 son segundos que quieres que pasen entre cada renovación.
     
  6. jcastellanos

    Joined:
    Feb 10, 2009
    Messages:
    2,404
    Likes Received:
    0
    hola ramoncio, en efecto, pero no siempre funciona, me ha pasado a mi, con algunos ddns funciona y otros no :S por eso pregunte sobre el scrip que nos pasate el otro dia, donde hay que ponerlo, como hay que nombrarlo y eso? siento que es mas factible tu escrip que esternalip=ddns.noip.com.

    saludos
     
  7. gamba47

    Joined:
    May 28, 2009
    Messages:
    595
    Likes Received:
    0
    Ok Ramoncio, muchas gracias, ya lo estoy cambiando así.

    Tengo una última duda, a que le doy reload cuando hago esto ?

    Es decir, cuando uno cambia algo en el extension.conf (estoy hablando de manera generica para que se entienda mi pregunta, se que en elastix se puede hacer desde la web) uno hace:

    asterisk -rx "dialplan reload"


    para este caso, que es lo que hago ? reinicio el servicio ?

    service asterisk reload ?

    Doy un reload a todo?

    asterisk -rx "reload"

    Muchas gracias. gamba47
     
  8. ramoncio

    Joined:
    May 12, 2010
    Messages:
    1,663
    Likes Received:
    0
    Code:
    #!/usr/bin/perl
    #
    #This program gets the current IP address (as assigned by the ISP) from
    #whatismyip.org and modifies etc/asterisk/sip_nat.conf if the external IP
    #address has changed. Use Webmin to invoke it as cron job that runs every 5 mins
    #
    use strict;
    use warnings;
    use WWW::Mechanize;
    use Tie::IxHash;
    use Data::Validate::IP qw(is_public_ipv4);
    my $s_filepath = "/etc/asterisk/sip_nat.conf";
    my $mech = WWW::Mechanize->new( autocheck => 1 );
    $mech->get('http://whatismyip.com/automation/n09230945.asp');
    $mech->success or die 'Cannot connect to http://whatismyip.com/automation/n09230945.asp';
    my ($ip) = ($mech->content() =~ /(\d+\.\d+\.\d+\.\d+)/);
    if (is_public_ipv4($ip)) {
        tie my %configvars, 'Tie::IxHash';
        %configvars = ('nat' => 'yes', 'externip' => '0.0.0.0','fromdomain' => 'casitaramon.dyndns.org','localnet' => '192.168.161.0/255.255.255.0') ;
        open IN,"<$s_filepath";
        while (my $i = <IN>) {
            chop $i;
            if ($i =~ /=/) {
                $i =~ s/\s//g;
                my ($key,$value) = split /=/,$i;
                $configvars{$key} = $value;
            }
        }
        close IN;
        if ($configvars{'externip'} ne $ip) {
            $configvars{'externip'} = $ip;
            open OUT,">$s_filepath";
            while (my ($key, $value) = each %configvars) {
                select OUT;
                print "$key=$value\n";
            };
            select STDOUT;
            close OUT;
            `/usr/sbin/asterisk -rx reload`;
        };
    };
    
    Tienes que meterlo en crontab para que se ejecute cada cierto tiempo.
     
  9. jcastellanos

    Joined:
    Feb 10, 2009
    Messages:
    2,404
    Likes Received:
    0
    si, con asterisk -rx "reload"

    ramoncio una duda,(soy malo para scrps) esto lo pego en un txt con que nombre? en que carpeta va? donde esta esa carpeta??

    saludos
     
  10. gamba47

    Joined:
    May 28, 2009
    Messages:
    595
    Likes Received:
    0
    Roger that!


    Lo podes poner en cualquier lado, solo tenes que hacerlo ejecutable.
    Yo uso nano, vim & vi no me gustan :S

    # nano /root/scripts/sip_nat.sh
    (ahora copy & paste de lo que nos pasaron y grabamos)
    después esto:
    # chmox +x /root/scripts/sip_nat.sh


    Solo queda agregarlo en el crontab, no me acuerdo esto!!!

    gamba47
     
  11. gamba47

    Joined:
    May 28, 2009
    Messages:
    595
    Likes Received:
    0
    No me funcionó el script a mano.

    Esto es lo que copie, lo posteo por las dudas

    Code:
    [root@asterisk asterisk]# cat /root/scrips/sip_nat.sh
    #!/usr/bin/perl
    #
    #This program gets the current IP address (as assigned by the ISP) from
    #whatismyip.org and modifies etc/asterisk/sip_nat.conf if the external IP
    #address has changed. Use Webmin to invoke it as cron job that runs every 5
    #mins
    #
    use strict;
    use warnings;
    use WWW::Mechanize;
    use Tie::IxHash;
    use Data::Validate::IP qw(is_public_ipv4);
    my $s_filepath = "/etc/asterisk/sip_nat.conf";
    my $mech = WWW::Mechanize->new( autocheck => 1 );
    $mech->get('http://whatismyip.com/automation/n09230945.asp');
    $mech->success or die 'Cannot connect to
    http://whatismyip.com/automation/n09230945.asp';
    my ($ip) = ($mech->content() =~ /(d+.d+.d+.d+)/);
    if (is_public_ipv4($ip)) {
        tie my %configvars, 'Tie::IxHash';
        %configvars = ('nat' => 'yes', 'externip' => '0.0.0.0','fromdomain' =>
    'casitaramon.dyndns.org','localnet' => '192.168.161.0/255.255.255.0') ;
        open IN,"<$s_filepath";
        while (my $i = <IN>) {
            chop $i;
            if ($i =~ /=/) {
                $i =~ s/s//g;
                my ($key,$value) = split /=/,$i;
                $configvars{$key} = $value;
            }
        }
        close IN;
        if ($configvars{'externip'} ne $ip) {
            $configvars{'externip'} = $ip;
            open OUT,">$s_filepath";
            while (my ($key, $value) = each %configvars) {
                select OUT;
                print "$key=$valuen";
            };
            select STDOUT;
            close OUT;
            `/usr/sbin/asterisk -rx reload`;
        };
    };
    
    [root@asterisk asterisk]#
    
    Y este es el error:

    Code:
    [root@asterisk asterisk]# /root/scrips/sip_nat.sh
    Can't locate Tie/IxHash.pm in @INC (@INC contains: /usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.7/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.6/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.5/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.8 /usr/lib/perl5/site_perl/5.8.7 /usr/lib/perl5/site_perl/5.8.6 /usr/lib/perl5/site_perl/5.8.5 /usr/lib/perl5/site_perl /usr/lib/perl5/vendor_perl/5.8.8/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.7/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.6/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.5/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.8 /usr/lib/perl5/vendor_perl/5.8.7 /usr/lib/perl5/vendor_perl/5.8.6 /usr/lib/perl5/vendor_perl/5.8.5 /usr/lib/perl5/vendor_perl /usr/lib/perl5/5.8.8/i386-linux-thread-multi /usr/lib/perl5/5.8.8 .) at /root/scrips/sip_nat.sh line 11.
    BEGIN failed--compilation aborted at /root/scrips/sip_nat.sh line 11.
    [root@asterisk asterisk]#
    
    
    
    
     
  12. jcastellanos

    Joined:
    Feb 10, 2009
    Messages:
    2,404
    Likes Received:
    0
    eperar a ramincio pa que nos aucilie :D

    saludos
     
  13. ramoncio

    Joined:
    May 12, 2010
    Messages:
    1,663
    Likes Received:
    0
    gamba47, te recomiento que uses nano con el parametro -w asi no te parte las líneas nunca
     
  14. gamba47

    Joined:
    May 28, 2009
    Messages:
    595
    Likes Received:
    0
    Pruebo de nuevo y te aviso, gracias por el tip!


    gamba47


    ## Edito ###

    Code:
    [root@asterisk scrips]# ./sip_nat.sh
    Can't locate Tie/IxHash.pm in @INC (@INC contains: /usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.7/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.6/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.5/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.8 /usr/lib/perl5/site_perl/5.8.7 /usr/lib/perl5/site_perl/5.8.6 /usr/lib/perl5/site_perl/5.8.5 /usr/lib/perl5/site_perl /usr/lib/perl5/vendor_perl/5.8.8/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.7/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.6/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.5/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.8 /usr/lib/perl5/vendor_perl/5.8.7 /usr/lib/perl5/vendor_perl/5.8.6 /usr/lib/perl5/vendor_perl/5.8.5 /usr/lib/perl5/vendor_perl /usr/lib/perl5/5.8.8/i386-linux-thread-multi /usr/lib/perl5/5.8.8 .) at ./sip_nat.sh line 10.
    BEGIN failed--compilation aborted at ./sip_nat.sh line 10.
    
    Continua el problema.

    gamba47

    Pd tambien probe con winscp y el editor interno, para evitar problemas.
    Aclaro que no se nada de perl, por eso posteo esto, en bash algo entiendo.
     
  15. ramoncio

    Joined:
    May 12, 2010
    Messages:
    1,663
    Likes Received:
    0
  16. jcastellanos

    Joined:
    Feb 10, 2009
    Messages:
    2,404
    Likes Received:
    0
    yo igual lo intentare apenas termine con el chan_mobile (o el me termine ami :S) y te cuento
     
  17. gamba47

    Joined:
    May 28, 2009
    Messages:
    595
    Likes Received:
    0
  18. ramoncio

    Joined:
    May 12, 2010
    Messages:
    1,663
    Likes Received:
    0
    En sip_nat.conf
     
  19. gamba47

    Joined:
    May 28, 2009
    Messages:
    595
    Likes Received:
    0
    Ok.

    Ahora, la pregunta del millon, hay alguna manera de probar si esto realmente funciona sin realizar llamadas ? digo, probar los canales sin tener que llamar a alguien del otro lado ? Perdon que sea tan pregunton, me apasiona esto!

    gamba47
     
  20. jcastellanos

    Joined:
    Feb 10, 2009
    Messages:
    2,404
    Likes Received:
    0
    no creo, la manera mas viable es que llames, ahora no solo lleva eso, si tienes todos los datos del sip_nat?
     

Share This Page