terça-feira, 23 de setembro de 2008

Redundância de Link - FreeBSD + Carp + ifstated

O que tem e o que não tem neste documento:

Não tem:
- como instalar o FreeBSD
- como atualizar o FreeBSD
- regras de firewall
- aprofundamento técnico

Tem:
- o que colocar no kernel
- como configurar interface carp
- leve introdução ao ifstated com um exemplo que funcionou para meu caso
- a pratica da coisa

Motivação:
- Necessidade de ficar com o acesso a internet o menor tempo possivel indisponível.

Ferramentas:
- 2 computadores - 4 placas de rede
- 2 links de 2 provedores diferentes
- FreeBSD 7.0
- Pesquisa, e testes

Onde procurei:
- Google é seu amigo
- FUG - http://www.fug.com.br/content/view/124/77/
- HandBook FreeBSD

O que faz o que?
- Carp - interface virtual
- Ifstated - verifica o estado da conexao e executa uma ação predefinida

Começando:
- instalar o FreeBSD nos 2 computadores
- atualizar os fontes
- inserir a linha no KERNCONF:
device carp
- atualizar o FreeBSD
- inserir regras no PF para nat, roteamento e segurança

Visualização:

LINK PROVEDOR EMBRATEL = LEM
LINK PROVEDOR OI = LOI
ROUTER EMBRATEL = REM
ROTER OI = ROI
xl0 = Interface de rede externa
xl1 = Interface de rede interna
carp0 = Interface de rede virtual

Onde o LEM é o principal e LOI somente será utilizado caso LEM entre em inatividade.



Nas estacoes da rede local o gateway é o endereço 192.168.1.254, também configurei o DNS nos dois servidores configurando o DNS das estações para 192.168.1.254.


As configurações:

sysctl.conf:

net.inet.carp.allow=1
net.inet.carp.preempt=1
net.inet.carp.log=1
net.inet.carp.arpbalance=1

CARP:

- rc.conf do SRV01 adicionar as linhas:

cloned_interfaces="carp0"
ifconfig_carp0="vhid 1 advskew 1 pass SENHAXXX 192.168.1.254"

- rc.conf do SRV02 adicionar as linhas:

cloned_interfaces="carp0"
ifconfig_carp0="vhid 1 advskew 2 pass SENHAXXX 192.168.1.254"

Explicando:

vhid = indica qual o grupo a interface carp vai participar
advskew = qual o nivel de poder deste servidor quanto mais baixo maior o nivel 1>2 entao 1=MASTER
pass = qual a senha para o grupo "vhid"
192.168.1.254 = endereco ip do CARP
#man carp

IFSTATED:

Instalado em SRV01, visualização do arquivo ifstated.conf

init-state master # estado inicial
if_up="xl0.link.up" # esta opcao não funcionou para mim, o estado da conexao não mudou
net = '( "ping -q -c 1 -t 1 200.200.200.2 > /dev/null" every 3 )' # faz um ping para o endereco do GW de LEM a cada 3 segundos.

state master {
if ( $net) {
run "ifconfig carp0 vhid 1 advskew 1 pass CarpLan 192.168.1.254"
}
if ( ! $net) {
run "ifconfig carp0 vhid 1 advskew 5 pass CarpLan 192.168.1.254"
}
}
# state master é a indicação do estado
# if ( $net ) se o comando que foi indicado no inicio como ping estiver OK o carp # deste SRV01 continua com advskew 1 e continua como MASTER
# se ( ! $net ) se o comando der erro, o advskew vai para 5 e este servidor passa # ser BACKUP

Conclusões:

Quando o LEM sai do ar, ifstated em no máximo 3 segundos faz a troca do link, com isto há uma leve queda na conexão, não foi possivel utilizar o pfsync para transferir o estado de conexao pois estou saindo por links diferentes, então um download ou uma ligação VOIP será cortada, mas a conexao é reestabelecida em menos de 5 segundos.

Bem, fica por aqui a primeira postagem com informações reais e utéis, espero ajudar.

Nenhum comentário: