Tiago Ribeiro nos trás um artigo de como preparar uma redundância de links, onde visa obter uma alta disponibilidade do link, em caso de algum problema com um ou mais links existentes. Utilizando uma das combinações mais conhecidas para esta ação, ele nos mostra de forma prática e rápida como fazer.
Primeiramente, quero mostrar o que abordo ou não neste documento:
Não abordo:
- Como instalar o FreeBSD;- Como atualizar o FreeBSD;- Regras de firewall;- Aprofundamento técnico. Abordo:
- Configurando o kernel;- Configurando o CARP; - Introdução ao Ifstated.
Ferramentas:
- 2 Computadores e 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
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 do Ambiente
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 estações 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:
/etc/sysctl.conf:
net.inet.carp.allow=1 net.inet.carp.preempt=1 net.inet.carp.log=1 net.inet.carp.arpbalance=1
CARP:
- /etc/rc.conf do SRV01 adicionar as linhas:
cloned_interfaces="carp0" ifconfig_carp0="vhid 1 advskew 1 pass SENHAXXX 192.168.1.254"
- /etc/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
Instalando em SRV01 e configurando /usr/local/etc/ifstated.conf
# cd /usr/ports/net/ifstated && make install # cat /usr/local/etc/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 utéis, espero ajudar. |