OpenVPN

De Printertux
Revisão de 18h30min de 21 de fevereiro de 2020 por Printertux (discussão | contribs) (Criou página com ''''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_op...')
(dif) ← Edição anterior | Revisão atual (dif) | Versão posterior → (dif)
Ir para: navegação, pesquisa

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