Bom, depois de pesquisar na net, achei uma solucao para isso em python ( so nao lembro 
onde) mas como eu nao sei nada de python, resolvi pegar a ideia e passar pra perl ( 
que eu entendo  pouco mais da pra quebrar o galho)

Bom, eu nao sou programador e nao gosto de programar. sei que a solucao eh meio feia, 
mas funciona  entao resolvi postar aqui, quem sabe alguem melhora o  codigo ...

A solucao eh composta de um modulo server e outro client, eh feito via udp e nao tem 
muita seguranca, mas como eh so pra passar um ip.

esse script ainda tem que ser alterado pra refletir seus enderecos, mas ja da pra ter 
uma ideia boa ....


client
-------------------- cut here -------------------------------------
#!/usr/local/perl

use IO::Socket::INET;

$port = "4884";
$server = 'xxx.xxx.xxx.xxx';

$MySocket=new IO::Socket::INET->new(PeerPort=>$port,Proto=>'udp',PeerAddr=>$server) || 
die "Server not available" ;
$novoip=`/sbin/ifconfig tun0 | grep "inet " | cut -d " " -f 2`;
$password = "freebsd";

$MySocket->send($password);
$MySocket->recv($resposta, 128);
if ($resposta eq "ok")
{
$MySocket->send($novoip);
exit 1;
}
else
{
exit 1;
}

--------------------cut here ------------------------

server

--------------------cut here ---------------------

#!/usr/local/bin/perl
use IO::Socket::INET;

# Create a new socket
$port = "4884";
$dmy = `date \"+%d-%m-%Y as %H:%M\"`;
$MySocket=new IO::Socket::INET->new(LocalPort=>$port,Proto=>'udp');

while(1)
{
        $MySocket->recv($challenge,128);

        $password = "freebsd";

        if ($challenge eq $password)
        {
                $MySocket->send("ok");
                $MySocket->recv($ipaddr,128);
                print $ipaddr;
                chomp $ipaddr;
                geraipsec();
                geravpn();
                geralog();
                restartvpn();
        }
        else
        {
                $MySocket->send("Erro");
        }
}

sub geraipsec
{
open (ARQ, "> /etc/ipsec.conf") || die "Nao consegui abrir o arquivo";
print ARQ "/usr/sbin/setkey -c spddelete 192.168.0.0/24 192.168.1.0/24 any -P out;\n";
print ARQ "/usr/sbin/setkey -c spddelete 192.168.1.0/24 192.168.0.0/24 any -P in;\n";
print ARQ "spdadd 192.168.0.0/24 192.168.1.0/24 any -P out ipsec 
esp/tunnel/ip_interno_do_server-$ipaddr/require;\n";
print ARQ "spdadd 192.168.1.0/24 192.168.0.0/24 any -P in  ipsec 
esp/tunnel/$ipaddr-ip_interno_do_server/require;\n";
close ARQ;

}

sub geravpn
{
open (ARQ, "> /usr/local/etc/rc.d/vpn.sh") || die "Nao consegui abrir o arquivo";
print ARQ "/sbin/ifconfig gif0 destroy\n";
print ARQ "/sbin/ifconfig gif0 create\n";
print ARQ "/sbin/ifconfig gif0 tunnel ip_externo_do_server $ipaddr\n";
print ARQ "/sbin/ifconfig gif0 inet ip_interno_do_server ip_interno_do_adsl netmask 
255.255.255.255\n";
print ARQ "/usr/sbin/setkey -f /etc/ipsec.conf\n";
close ARQ;

}

sub geralog
{
open (ARQ, ">>/var/log/vpn.log") || die "nao consegui abrir o arquivo";
print ARQ " VPN  - reiniciada com o IP $ipaddr em $dmy";
print ARQ 
"--------------------------------------------------------------------------\n";
close ARQ;
}

sub restartvpn
{
system `/usr/local/etc/rc.d/vpn.sh`;
}

_______________________________________________________________
Sair da Lista: http://lists.fugspbr.org/listinfo.cgi
Historico: http://www4.fugspbr.org/lista/html/FUG-BR/

Responder a