Alta Disponibilidade de Link |
Por Danilo Neves | |||
22/12/2011 | |||
Introdução Muitas vezes, provedores de internet ou até mesmo empresas, não têm 2 servidores para ter uma alta disponibilidade de link e servidor. E com isso, eles apenas garantem a disponibilidade de link em único servidor, isso garante que o usuário não vá ligar reclamando que não consegue navegar e bla bla bla, caso o link principal venha ficar indisponível. Para fazer isso, vou usar 2 ferramentas no FreeBSD, uma vai ser o Ifstated para fazer o monitoramento dos link e alterar a rota. E a outra vai ser o Packet Filter, o famoso PF. Caso o link venha ficar indisponível, o Ifstated vai alterar a rota para o outro link. Caso o link indisponível venha ficar disponível automaticamente, a rota vai voltar para a rota default, para o link principal. Já com o PF, vou usar para criar os NAT dos clientes em uma única linha. Ele também pode ser usado como Firewall, redundância de link (round-robin ou source-hash), redirecionamento de portas, e etc. Vamos ao trabalho. Clique abaixo para continuar lendo o artigo todo. Preparando o Ambiente Precisamos compilar o KERNEL para o PF e instalar o Ifstated. Primeiro vou compilar o Kernel e para isso vou descobrir qual o nome do meu Kernel atual. #uname -a /usr/obj/usr/src/sys/GENERIC Veja que no final temos o nome do Kernel que no meu caso o nome padrão GENERIC. Precisamos agora editar e adicionar algumas opções para que o PF funcione corretamente. Para editar: # ee /usr/src/sys/i386/conf/GENERIC
device pf Feito isso é só salvar, agora vamos compilar o Kernel modificado. #cd /usr/src Espere porque isso demora um pouco, assim que termina execute o comando abaixo # make installkernel KERNCONF=GENERIC Depois é só reiniciar o servidor. # cd /usr/ports/net/ifstated/ # make install clean Finalizamos o ambiente e agora vamos para configuração. Configurações No ambiente que estou configurando o servidor tem 3 interfaces, duas interfaces do link e uma dos clientes. Ip da interface #ifconfig re1 187.64.174.186/30 Gateway #route add default 187.64.174.85 Obs: Devemos configuar o DNS # ee /etc/resolv.conf nameserver 8.8.8.8 Feito isso o servidor já deve está disponível para internet e agora devemos configurar o segundo link em uma outra interface, que no meu caso é a bge0. #ifconfig bge0 186.68.173.182/30 Nesse momento não precisamos colocar o rota default porque já colocamos no passo anterior e no momento não precisamos dessa rota default. Por fim vamos configurar a interface do gateway do seus clientes, no meu caso a re2. # ifconfig re2 192.168.1.1/24 Agora todas as interfaces estão com IP, agora vou colocar todas essas configurações no rc.conf, não coloquei antes para fins didático. Não é preciso fazer as configurações das interfaces que eu fiz acima, basta apenas seguir o exemplo do rc.conf e reiniciar o servidor que o mesmo já vai iniciar com todas as configurações das interfaces. Meu rc.conf ficou da seguinte forma: #ee /etc/rc.conf # CONFIGURACAO DAS INTERFACES #Link 1 #Link 2 #Clientes #GATEWAY DEFAULT Pronto, agora estão todas as interfaces configuradas. Vamos agora configura o PF, para fazer o NAT dos clientes e assim eles poderem sairem para a internet. #ee /etc/rc.conf pf_enable=”YES” Feito isso vamos fazer backup do arquivo de configuração do pf.conf e criar um novo. Vamos criar um novo arquivo com as seguintes configurações. # ee /etc/pf.conf nat on re1 from 192.168.1.0/24 to any -> 187.64.174.186 nat on bge0 from 192.168.1.0/24 to any -> 186.68.173.182 Agora só salvar, para carregar o arquivo de configurações devemos digitar # pfctl -f /etc/pf.conf # pfctl -e /etc/pf.conf A primeira regra no arquivo de configuração fazem que os clientes da faixa 192.168.1.0/24 saiam nateado pelo ip 187.64.174.186 que é meu IP do link principal. A outra regra só vai funcionar caso o primeiro link fique indisponível e assim o segundo link vai assumir e todos os clientes vão sair pelo ip 186.68.173.182. Neste momento todos seus clientes estão navegando. Agora vem o Ifstated a parte mais importante desse artigo. #mv /usr/local/etc/ifstated.conf /usr/local/etc/ifstated.conf.old Vamos criar um novo ifstated.conf com as novas configurações. #ee /usr/local/etc/ifstated.conf init-state master if_up="re1.link.up" net = '( "ping -q -c 1 -t 1 187.64.174.85 > /dev/null" every 5 )' state master { run "route delete default && route add default 187.64.174.85" } } Veja que o arquivo de configuração não tem segredo nenhum. Ele faz uma checagem de ping no seu gateway principal 187.64.174.85 a cada 5 segundos e caso nesse tempo o gateway fique indisponível ele vai alterar a rota para o 186.68.173.181. Depois de 5 segundo ele faz um checagem novamente o gateway principal e caso ele volte a ficar disponível, automaticamente vai alterar a rota para o gateway principal. Você pode escolher para fazer a checagem de ping no gateway do seu roteador e também diminuir ou aumentar o tempo de checagem, isso depende de você. Feito tudo isso preciso colocar daemon para fazer a checagem, digitando: #ifstated -f /usr/local/etc/ifstated.conf Pronto, agora o daemon está rodando e checando seu link a cada 5 segundos e assim temos um alta disponibilidade. Mas agora você se pergunta, e se o servidor reiniciar o que vai acontecer? Assim você precisa carregar ele manualmente. Dentro do diretório de inicialização edite o seguinte script #ee /usr/local/etc/rc.d/link.sh #!/bin/sh #echo -n ' link ' case "$1" in start) else fi ;; stop) stop=`ls -la /var/run/link.pid 2>&1` if [ $? -eq 0 ] rm /var/run/link.pid echo "Usage: `basename $0` {start|stop}" >&2 exit 64 esac exit Agora só salvar e alterar permissões do arquivo e permissão de execução: #chmod 755 /usr/local/etc/rc.d/link.sh Agora vou explicar o que o script faz de uma forma rápida e simples. Todo daemon tem um PID, então eu usei esse PID para poder matar o processo e com esse script posso dar um start ou stop na hora que eu quiser, além de ele carregar automaticamente na hora da inicialização do servidor. Ao iniciar o script ele gera um arquivo chamado de /var/run/link.pid dentro desse arquivo está o PID do daemon Ifstated. Quando você quer para o serviço ele vai ler esse arquivo verificar qual o PID que está dentro dele e matar esse PID e excluir o arquivo /var/run/link.pid . É isso que o script faz, sem segredo nenhum. Start no serviço #/usr/local/etc/rc.d/link.sh start Stop no serviço #/usr/local/etc/rc.d/link/sh stop Pronto, agora é só fazer os testes. Espero que gostem e aceito críticas, sugestões e elogios. :)
|
|||
ltima Atualizao ( 22/12/2011 ) |