OpenVPN
Script Instalação
wget http://www.hesolucoes.com.br/arquivos/linux/openvpn/install_openvpn.zip unzip install_openvpn.zip chmod +x install_openvpn.sh sh install_openvpn.sh
Servidor
1 - Instalar a biblioteca de compressão LZO
mkdir /usr/local/openvpn/ cd /tmp wget http://www.hesolucoes.com.br/arquivos/linux/openvpn/lzo-2.03.tar.gz tar -zxvf lzo-2.03.tar.gz cd lzo-2.03 ./configure --prefix=/usr/local/openvpn/ --enable-shared && make && make install cd /usr/local/openvpn/lib/ ln -s liblzo2.so.2.0.0 liblzo.so echo "/usr/local/openvpn/lib/" >> /etc/ld.so.conf ldconfig
2 - Instalar o OpenVPN
cd /tmp wget http://www.hesolucoes.com.br/arquivos/linux/openvpn/openvpn-2.0.9.tar.gz tar -zxvf openvpn-2.0.9.tar.gz cd openvpn-2.0.9 ./configure --prefix=/usr/local/openvpn/ \ --with-lzo-headers=/usr/local/openvpn/include/lzo/ \ --with-lzo-lib=/usr/local/openvpn/lib/ && make && make install ldconfig mkdir /etc/openvpn/ cp -avf easy-rsa/2.0/ /etc/openvpn/ vi /etc/openvpn/2.0/openssl.cnf (comentar as linhas 282 e 283)
3 - Seguir a documentação oficial para gerar as chaves [1]
4 - Liberar o firewall (somente servidor)
$iptables -A INPUT -p udp --dport 5000 -i $IF_EXTERNA -j ACCEPT
5 - Colocar na inicialização "/etc/rc.local"
echo "carregando vpn..." /sbin/modprobe tun cd /etc/openvpn /usr/local/openvpn/sbin/openvpn --config openvpn.conf > /var/log/openvpn.log 2>&1 &
6 - Instalar a monitoração do serviço
wget http://www.hesolucoes.com.br/arquivos/linux/openvpn/monitor_vpn.sh -O /bin/monitor_vpn.sh chmod 755 /bin/monitor_vpn.sh echo -e "*/1 * * * *\t/bin/monitor_vpn.sh" >> /var/spool/cron/root /etc/init.d/crond restart
Cliente Linux
1 - Repetir os passos 1 e 2 do servidor
2 - Copiar as chaves geradas pelo passo 3 de acordo com a documentação oficial [2]
3 - Repetir o passo 5 do servidor
Cliente Windows
1 - Instalar a versão para MS Windows [3] com as opções padrão
2 - Descompactar as chaves [4] dentro do diretório "C:\Arquivos de programas\OpenVPN\bin"
3 - Editar o arquivo "openvpn.ovpn" de acordo com o nome da chave
4 - Mover o arquivo "vpn.bat" para a área de trabalho e executa-lo
Openvpn no Windows como Serviço
1 - Pelo Prompt do DOS:
> cd C:\Arquivos de programas\OpenVPN\bin > openvpnserv -install (Aguarde enquanto é instalado o serviço)
2 - Windows Explorer
Copiar: openvpn.ovpn, certs, keys
De: C:\Arquivos de programas\OpenVPN\bin
Para: C:\Arquivos de programas\OpenVPN\config
3 - Configurar o serviço de "manual" para "automático" (tela abaixo)
Fonte: http://openvpn.net/index.php/open-source/documentation/install.html?start=1
Arquivos de configuração
[Servidor]
[Cliente Linux]
[Cliente Windows]
Script de criação automática de chaves
Necessário criar o diretório "/root/chaves" e os arquivos modelo utilizados pelo script. Download aqui.
#!/bin/bash if [ -z $1 ] then echo "cria_chave.sh <nome>" exit 1 fi # # nome=$1 # # cd /etc/openvpn/2.0/ . ./vars ./build-key $nome ./revoke-full $nome mv keys/$nome* /etc/openvpn/keys/ mkdir /root/chaves/$nome mkdir /root/chaves/$nome/certs mkdir /root/chaves/$nome/keys cp -f /root/chaves/padrao/vpn.bat /root/chaves/$nome cp -f /root/chaves/padrao/openvpn.ovpn /root/chaves/$nome cp -f /root/chaves/padrao/keys/ca.crt /root/chaves/$nome/keys cp -f /etc/openvpn/keys/$nome*.crt /root/chaves/$nome/keys cp -f /etc/openvpn/keys/$nome*.csr /root/chaves/$nome/keys cp -f /etc/openvpn/keys/$nome*.key /root/chaves/$nome/keys sed -i "s/NOME/$nome/g" /root/chaves/$nome/openvpn.ovpn cd /root/chaves/$nome zip -r ../$nome.zip . killall -s 9 openvpn killall -s 9 openvpn cd /etc/openvpn/ /usr/local/openvpn/sbin/openvpn --config openvpn.conf > /var/log/openvpn.log 2>&1 &
Monitoração do serviço
#!/bin/bash # parado="false" # /sbin/pidof openvpn > /dev/null # if [ $? != 0 ] then parado="true" fi # # grep "^10.10" /etc/openvpn/status.log > /dev/null # if [ $? != 0 ] then parado="true" fi # # if [ $parado == "true" ] then killall -s 9 openvpn > /dev/null killall -s 9 openvpn > /dev/null /sbin/modprobe tun cd /etc/openvpn/ /usr/local/openvpn/sbin/openvpn --config openvpn.conf > /var/log/openvpn.log 2>&1 & /bin/fire.sh fi
Agendar no crontab com intervalo de 1 minuto
Monitoração do link
O seguinte script faz a verificação do link frame relay e caso este estaja inativo, faz o chaveamento entre o link da VPN
#!/bin/bash # # ROUTER_MATRIZ="192.168.10.1" GW_TELEMAR="172.16.50.1" GW_VPN="10.10.0.25" # # ping -c 1 $ROUTER_MATRIZ >/dev/null 2>&1 # resultado_ping=$? # if [ $resultado_ping != 0 ] then /sbin/route -n | grep 192.168.0.0 | grep $GW_VPN >/dev/null 2>&1 if [ $? == 0 ] then exit 0 fi /sbin/route del -net 192.168.0.0 netmask 255.255.255.0 gw $GW_TELEMAR /sbin/route add -net 192.168.0.0 netmask 255.255.255.0 gw $GW_VPN elif [ $resultado_ping == 0 ] then /sbin/route -n | grep 192.168.0.0 | grep $GW_TELEMAR >/dev/null 2>&1 if [ $? == 0 ] then exit 0 fi /sbin/route del -net 192.168.0.0 netmask 255.255.255.0 gw $GW_VPN /sbin/route add -net 192.168.0.0 netmask 255.255.255.0 gw $GW_TELEMAR fi
Enviando comandos e arquivos pela rede
envia_comandos.sh
#!/bin/bash if [ -z $1 ] then exit 1 fi # # for i in 20 30 40 50 do echo "$i" echo "ssh -p 5522 192.168.$i.253 \"$1\"" ssh -p 5522 192.168.$i.253 "$1" echo "---" done
envia_arquivos.sh
#!/bin/bash for i in 20 30 40 50 do scp -P 5522 $1 192.168.$i.253: done