quarta-feira, 4 de março de 2009

VPN utilizando VIVO-3g em Clientes Debian + VTun

A um bom tempo havia a necessidade de acesso em um local de estrutura deficiente, operadoras não passavam "cabos" e ninguém operava nada com qualidade, até que insisti muito com meu chefe e ele aceitou o desafio de colocar uma vpn usando vtun em cima de um sinal VIVO-3g.

- Debian 5.0 (basic install) como Cliente
IP - 192.168.1.1

- FreeBSD 6.4 como Servidor Matriz
IP - 192.168.0.1

Adicionar apenas o source:
deb http://http.us.debian.org/debian stable main contrib

Em servidores debian:
#apt-get update && apt-get install openssh-server vtun vim squid -y

Em FreeBSD (minha Opção como servidor em um Link de verdade)
cd /usr/ports/net/vtun && make install clean

SERVIDOR

Adicione no final do arquivo /etc/rc.conf a entrada:

vtund_enable="YES"

Editando o vtund.conf no servidor

#####vtund.conf
# vtund.conf - servidor

options {
port 5000;
ifconfig /sbin/ifconfig;
route /sbin/route;
}

default {
type tun;
proto tcp;
compress lzo:9; #
encrypt yes; #por sua conta e risco :D
keepalive yes;
stat no;
speed 0;
multi killold;
}
joaocep {
passwd ;
up {
# configura interface ponto-a-ponto
ifconfig "%% 192.168.0.1 192.168.1.1 mtu 1450 netmask 255.255.0.0";
# adiciona rota para a rede da filial
route "add -net 192.168.1.0 192.168.1.1 255.255.255.0";
};
# se houver desconexao derruba rota e a interface tunX
down {
ifconfig "%% delete down";
route "delete 192.168.1.0";
};
}

#####EOF


CLIENTE

#####vtund.conf
#/etc/vtund.conf
riodejaneiro {
passwd ;
proto tcp;
compress yes;
type tun;
up {
ifconfig "%% 192.168.1.1 pointopoint 192.168.0.1 netmask 255.255.255.0";
route "add -net 192.168.0.0/24 gw 192.168.0.1";
};
down {
ifconfig "%% down";
route "del -net 192.168.0.0/24 gw 192.168.0.1";
};
}

####EOF

A vez do VIVO:

Configurado o vtun, passaremos a conexão com Vivo-3G.

No arquivo /etc/wvdial.com

####wvdial.com
[Dialer 3g]
Modem = /dev/ttyUSB0
Baud = 921600
DialCommand = ATDT
Check Def Route = on
FlowControl = Hardware(CRTSCTS)
Username = vivo
Password = vivo
Phone = *99#
Stupid mode = 1
Auto Reconnect = on
Auto DNS = on
Init1 = ATZ
Init2 = ATQ0 V1 E1 S0=0 &C1 &D2
Init3 = AT+CGDCONT=1,"IP","zap.vivo.com.br"
ISDN = 0
Modem Type = Analog Modem
####EOF

adicione no final do arquivo /etc/ppp/options as 4 linhas abaixo:

####options
asyncmap 0xa0000
mru 1500
refuse-chap
ipcp-max-failure 30
####EOF

Feito isso teste se seu Vivo está OK.

#wvdial 3g

Com o vivo em perfeito funcionamento, vamos a conexão com a Matriz:

#vtund joaocep [IP-REAL-DA-MATRIZ]
*Sim, há a necessidade de um IP Válido! ou seu DNS (no-ip, cjb ou seja lá a gambiarra que você use)

Teste com um ping para o servidor Matriz

#ping 192.168.0.1


Se aceitou, trafegue pela sua rede - Belezura Meio caminho andado.

Basta acertar os Roteamentos se for o caso, isso não é necessário se for para uma única rede.

No servidor FreeBSD (adicione ao /etc/rc.local) :
#route add -net 192.168.1.0/24 192.168.1.1

No Cliente Linux
Adicione apenas as entradas no rc.local ou bootmisc.sh
echo "1" > /proc/sys/net/ipv4/ip_forward
echo "1" > /proc/sys/net/ipv4/conf/all/rp_filter

Até ai, não há muito mistério...

Fazendo o VIVO subir no Boot

Crie um arquivo /etc/init.d/discador.sh

####matriz
#!/bin/bash
wvdial 3g &
####EOF

Crie outro arquivo /etc/init.d/vtun (remova o anterior se for o caso)

####vtun
sleep 30
vtund joaocep
[IP-REAL-DA-MATRIZ]
####EOF

OK, é uma Gambi! mas funciona, o sleep 30 faz o tempo da discagem para a Vivo e sem isso o vtund não conseguiria acessar o destino, pois daria uma bela mensagem de timeout no seu syslog.

Agora facilitando tudo no seu Cliente:

#cd /etc/rc2.d
#ln -s ../init.d/discador.sh S98discador
#ln -s ../init.d/vtun S99vtun

Teste com o reboot

um abraço.

Isso era para ser extremamente casual, mas o serviço é relativamente barato e dá para Rotear umas 12 máquinas em cima de um Vivo-3g, há inconvenientes certos com essa Gambiarra que eu não sugiro... mas quebra-se o maior galho para uma contingência.

Referência:
http://www.vivaolinux.com.br/artigo/Como-configurar-um-tunel-com-Vtun/?pagina=1