Realize as seguintes alterações no arquivo:
# VPN1 – Link Primário (WLAN)
# Endereço que o servidor matriz está em listening
remote 10.10.10.1
# Modo Cliente
tls-client
ifconfig 172.16.0.2 172.16.0.1
# Certificado do cliente
cert /etc/openvpn/certs/server_filial.crt
# Chave do cliente
key /etc/openvpn/keys/server_filial.key
ns-cert-type server
A ultima opção foi adicionada ao arquivo e conforme Morimoto, serve como proteção adicional para o que servidor filial (cliente VPN) realize a verificação do certificado do servidor matriz no momento da conexão, protegendo o cliente VPN de ataques do tipo man-in-the-middle. Esta verificação é semelhante aquela realizada pelo software cliente do OpenSSH, ao checar o arquivo known_hosts contido no subdiretório .ssh antes de realizar a conexão ao servidor SSH.
Continuando com as configurações, iremos copiar o arquivo referente a VPN1 para implementar a configuração da VPN2.
# vi /etc/openvpn/server_filial_vpn2.ovpn
# VPN2 – Link Secundário (ADSL)
# Interface VPN
dev tun1
# Endereço que o servidor matriz está em listening
remote 200.100.50.50
# Porta Origem e Destino (conexao ao servidor)
port 63010
ifconfig 172.31.0.2 172.31.0.1
Realizaremos as alterações no script vpn1.sh, salientando que, conforme citado anteriormente este script não substitui o script de firewall que deve existir em seu servidor, ele apenas insere regras para que o roteamento possa ocorrer entre a matriz e filial.
Além das alterações indicadas abaixo, você poderá excluir as linhas que inserem e excluem regras na chain INPUT, ou seja, “iptables -I INPUT ….” e “iptables -D INPUT …”, regras desnecessárias para o cliente.
# vi vpn1.sh
LAN_MATRIZ=”192.168.0.0/24″
…
/usr/local/sbin/openvpn –config /etc/openvpn/server_filial_vpn1.ovpn
sleep 3
route add -net $LAN_MATRIZ dev $LAN_VPN
…
Copie o arquivo acima para vpn2.sh:
# vi /etc/rc.d/vpn2.sh
Realize as seguintes modificações (em negrito). Conforme exposto no tópico de configuração do servidor matriz, este script não possui o comando route add -net $LAN_MATRIZ dev $LAN_VPN, por isso deixei ele comentado para enfatizar bem essa diferença entre o script vpn1.sh e vpn2.sh (utilizado em ambos servidores).
LAN_VPN=”tun1″
…
/usr/local/sbin/openvpn –config /etc/openvpn/server_filial_vpn2.ovpn
sleep 3
# route add -net $LAN_MATRIZ dev $LAN_VPN
…
O script de alta disponibilidade do servidor filial não necessitará de muitas modificações, portanto, vamos a elas:
Criaremos as alterações no arquivo de script de alta disponibilidade:
# vi ha-filial-matriz.sh
#
# por Waldemar Dibiazi Junior <waldemar_jr@hotmail.com>
#
LAN_MATRIZ=”192.168.0.0/24″
…
log=”/var/log/ha_vpn-filial-matriz.log”
…
# Interfaces VPN (filial) e enderecos IP das interfaces VPN (matriz)
if_addr_server[0]=”tun0:172.16.0.1″
if_addr_server[1]=”tun1:172.31.0.1″
…
drop_route(){
# Obtendo valor atual de Rota
get_tun
$r del -net $LAN_MATRIZ dev $tun 2> /dev/null
}
add_route(){
# Obtendo valor atual da Rota
get_tun
$r add -net $LAN_MATRIZ dev $tun 2> /dev/null
}
…
done
Para finalizar as configurações, realize a seguinte alteração no script rc.local:
sh /etc/rc.d/ha-filial-matriz.sh &
Conclusões
A alta disponibilidade de serviços é extremamente importante em ambientes, onde os mesmos são de vital importância para o desenvolvimento das atividades de uma empresa.
A indiscutível estabilidade e recursos do OpenVPN aliada ao uso de shell scripts permitiram a implementação de VPN’s redundantes utilizando recurso de alta disponibilidade.
Por Waldemar Dibiazi Junior <waldemar_jr [at] hotmail.com>
Deixe seu comentário