sexta-feira, 31 de janeiro de 2014

OpenBSD: Link redundante

Vamos fazer um sistema bem simplificado com OpenBSD para trabalharmos com dois links.
O que vamos usar:

- Um computador com 3 placas de rede
- OpenBSD 4.9:  pode ser um mais novo, porém o que tenho como exemplo aqui é este.
- shell script: o responsável por verificar e tomar a atitude de mudar o link
- PF: para fazer NAT, nada de filtragens mirabolantes, bloqueios nem nada, isto fica para outro post.
- Dois servidores de DNS: podem ser os dois do google 8.8.8.8 e 8.8.4.4

O que não vamos usar:

- pfSync e CARP, será apenas um servidor, então não vamos ter redundância de firewall/hardware

Mãos à obra:

Cenário:

                                  /---LINK A
LAN----OpenBSD--
                                  \---LINK B


Interfaces de rede do OpenBSD:


REDE INTERFACE IP GW
LAN vr0 192.168.0.254 **************
LINK_A vr1 192.168.1.253 192.168.1.254
LINK_B vr2 192.168.2.253 192.168.2.254


Arquivos de configurações:

LAN:
cat /etc/hostname.vr0
inet 192.168.0.254 255.255.255.0 192.168.1.255

LINK_A:
cat /etc/hostname.vr1
inet 192.168.1.253 255.255.255.252 192.168.2.255
!route add -inet 8.8.8.8 192.168.1.254

LINK_B:
cat /etc/hostname.vr2
inet 192.168.2.253 255.255.255.252 192.168.2.253
!route add inet 8.8.4.4 192.168.2.254

Agora o script para checar a conexão, depois insira ele no cron:

cat /home/scripts/checa_conexao.sh

#!/bin/sh

checa_linkb='ping -c1 8.8.4.4'
checa_linka='ping -c1 8.8.8.8'

$checa_linka >/dev/null
if [ `echo $?` -ne 0 ]; then
        echo "Link A falhou"
        route delete default 192.168.1.254
        route add default 192.168.2.254
        echo "Alterada rota para Link B"
else
        gw=`netstat -rn | grep default | cut -f13 -d" "`
        if [ $gw == 192.168.2.254 ]; then
                route delete default 192.168.2.254
                route add default 192.168.1.254
                echo "Alterada rota para Link A"
        else
                exit 0
        fi
fi




Basico do /etc/pf.conf

lan0="vr0"
wan0="vr0"
wan1="vr1"

match out on $wan0 inet from $lan0 to any nat-to ($wan0)
match out on $wan1 inet from $lan0 to any nat-to ($wan1)


Nenhum comentário: