Visite também: Br-Linux ·  VivaOLinux ·  LinuxSecurity ·  Dicas-L ·  NoticiasLinux ·  SoftwareLivre.org ·  [mais]
Voltar   Under-Linux.org Fóruns > UnderLinux Wiki
Wiki Classificados Galeria Reviews Jogos Comunidades RSS Feeds FAQ Termos de Uso Sobre
Cadastre-se FotosBlogs Lista de Membros Calendário Pesquisar Mensagens de Hoje Marcar Fóruns Como Lidos

Ferramentas pessoais
Publicidade

From UnderLinux Wiki

Cluster de Firewall com carp + pfsync

Tabela de conteúdo

Introdução

Para quem não conhece o assunto, com carp + pfsync é possível criar um cluster de firewalls de uma forma que elimine um único ponto de falha, e ainda por cima é totalmente transparente, uma máquina pode explodir que a outra irá assumir instantaneamente e você não vai perder se quer um misero pacote de seu download. CARP = Common Address Resolution Protocol, o carp é o principal responsável pelo compartilhamento de IP entre o cluster. É com ele que faremos a redundância das máquinas, se uma cair a outra irá assumir o ip setado no carp. Além do carp iremos utilizar o PFSYNC para fazer a sincronia de estados das conexões entre as máquinas, é por causa dele que se uma máquina cair e o tráfego for redirecionado para a outra a conexão não será cortada.

Requerimentos

Neste exemplo vou criar um cluster apenas entre duas máquinas, então vamos precisar de duas máquinas duh :P, cada uma delas com 3 placas de rede. Porque 3 placas? Simples, uma para a rede válida, outra para a rede privada, e a última como meio de sincronia dos estados das conexões entre as duas máquinas. Além disso iremos precisar de 8 IPs diferentes, 4 para cada máquina, 1 ip válido para cada máquina, 1 ip privado para cada máquina, mais 1 ip privado para cada máquina para sincronia (pfsync) e mais 2 ips virtuais que serão setados em cada carp, um público e outro privado. Não se assustem com a quantidade de ips utilizados, logo tudo isso irá ficar mais claro.

Configurações

CARP

Primeiro vamos criar as interfaces do carp, sim, elas funcionam como uma interface virtual :).

Um pequeno resumo dos ips:

fw01:

  • xl0 - 200.x.x.2
  • xl1 - 192.168.0.2
  • rl0 - 10.10.10.1
  • carp0 - 200.x.x.1
  • carp1 - 192.168.0.1

fw02:

  • xl0 - 200.x.x.3
  • xl1 - 192.168.0.3
  • rl0 - 10.10.10.2
  • carp0 - 200.x.x.1
  • carp1 - 192.168.0.1

Execute isso nas duas máquinas, não se preocupe com os parâmetros, irei explica-los:

# ifconfig carp0 create
# ifconfig carp1 create

Máquina 1:

# ifconfig carp0 vhid 1 pass senha carpdev xl0 advskew 0 200.x.x.1 netmask 255.255.255.0
# ifconfig carp0 vhid 2 pass senha carpdev xl1 advskew 0 192.168.0.1 netmask 255.255.255.0

Máquina 2:

# ifconfig carp0 vhid 1 pass senha carpdev xl0 advskew 128 200.x.x.1 netmask 255.255.255.0
# ifconfig carp0 vhid 2 pass senha carpdev xl1 advskew 128 192.168.0.1 netmask 255.255.255.0

Parâmetros

  • vhid: O Virtual Host ID. Este é um número único que é usado para identificar o grupo de redundância de outros nós na rede. Valores aceitos são 1 à 255.
  • pass:É a senha de comunicação entre os nós, evitando que algum engraçadinho entre na rede afim de snifar o tráfego.
  • carpdev: Aqui é especificado a qual interface o carp está conectado.
  • advskew: Ele define a prioridade da máquina, quanto menor o valor maior a prioridade, em nosso caso, se as duas máquinas estiverem no ar, a primerira irá funcionar como master.

PFSYNC

Agora vamos configurar o meio de sincronia entre os nós:

  • Máquina 1:
# ifconfig rl0 10.10.10.1 netmask 255.255.255.252
  • Máquina 2:
# ifconfig rl0 10.10.10.2 netmask 255.255.255.252
  • Nas duas máquinas:
# ifconfig pfsync0 syncdev rl0

Como estou utilizando apenas 2 máquinas eu interliguei as 2 através de um cabo cross, com isso eu evito que alguém tente conectar um cabo na rede (caso houvesse).

SYSCTL

Outra coisa importante é ativar o carp com o sysctl, estas são as possíveis entradas:

  • net.inet.carp.allow: Aceita entrada de pacotes CARP ou não. Padrão é 1 (sim).
  • net.inet.carp.preempt: Permite hosts dentro de um grupo de redundância ter um melhor advbase e advskew para tomar o lugar (preempt) do master. Adicionalmente, esta opção habilita failing over em todas as interfaces caso uma interface caia (down). Se uma interface física CARP cair, o CARP trocará o advskew para 240 em todas as outras interfaces CARP, em essência o failing termina por si mesmo. Esta opção é 0 (desabilitada) por padrão.
  • net.inet.carp.log: Loga pacotes CARP. O padrão é 0 (desabilitado).
  • net.inet.carp.arpbalance: Carrega balanceamento de tráfego entre múltiplos hosts no grupo de redundância. O padrão é 0 (desabilitado). Veja carp(4) para mais informações.

Precisamos ativar o preempt, para isso execute nas duas máquinas:

# sysctl -w net.inet.carp.preempt=1

Salvando as Configurações

Como o carp e o pfsync são tratados como interfaces, o arquivo de configuração a ser criado para eles é quase igual ao de uma placa de rede.

Crie os respectivos arquivos em cada uma das máquinas com os respectivos IPs:

  • /etc/hostname.carp0:
# inet 200.x.x.2 255.255.255.0 200.x.x.255 vhid 1 advskew 0 carpdev xl0 pass senha
  • /etc/hostname.carp1:
# inet 192.168.0.2 255.255.255.0 192.168.0.255 vhid 2 advskew 0 carpdev xl0 pass senha
  • /etc/hostname.rl0:
# inet 10.10.10.1 255.255.255.252 NONE
  • /etc/hostname.pfsync0:
# up syncdev rl0

E para finalizar habilite o preempt do carp no /etc/sysctl.conf

Testando

Depois de tudo configurado você verá algo do tipo em sua máquina:

[root@firewall01 admin]$ ifconfig 
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 33224
        groups: lo 
        inet 127.0.0.1 netmask 0xff000000 
xl0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
        lladdr 00:50:04:42:f1:c1
        groups: egress 
        media: Ethernet 100baseTX full-duplex
        status: active
        inet 200.x.x.2 netmask 0xfffffff0 broadcast 200.x.x.255
xl1: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
        lladdr 00:50:04:42:aa:bb
        media: Ethernet 100baseTX full-duplex
        status: active
        inet 192.168.0.2 netmask 0xffffff80 broadcast 192.168.0.255
rl0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        lladdr 00:15:f2:b0:80:3d
        media: Ethernet 100baseTX full-duplex
        status: active
        inet 10.10.10.1 netmask 0xfffffffc broadcast 10.10.10.3
pflog0: flags=141<UP,RUNNING,PROMISC> mtu 33224
pfsync0: flags=41<UP,RUNNING> mtu 1460
        pfsync: syncdev: rl0 syncpeer: 224.0.0.240 maxupd: 128
enc0: flags=0<> mtu 1536
carp0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        carp: MASTER carpdev xl0 vhid 1 advbase 1 advskew 0
        groups: carp 
        inet 200.x.x.1 netmask 0xfffffff0 broadcast 200.x.x.255
carp1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        carp: MASTER carpdev xl1 vhid 2 advbase 1 advskew 0
        groups: carp 
        inet 192.168.0.1 netmask 0xffffff80 broadcast 192.168.0.255

Caso você execute ifconfig carp0 down, ou tirar um cabo de rede o carp0 da segunda máquina irá mudar de BACKUP para MASTER.

Existem três estados para uma interface do carp:

  • MASTER: Acho que dispensa comentários :)
  • BACKUP: Esse também :D
  • INIT: INIT é quando a interface ainda não está no ar, é o que irá acontecer se você executar o ifconfig carpX down.

Firewall

Outra coisa importante a se fazer é liberar o tráfego do carp e pfsync no firewall :D Sem isso tudo o que foi feito anteriormente é inútil.

Não irei entrar em detalhes sobre o firewall agora, apenas insira isto no inicio de suas regras para garantir que tudo vai funcionar como esperado:

#libera carp entre as maquinas fw
pass quick on { $pfsync_if } proto pfsync
pass quick on { $ext_if $int_if } proto carp keep state

Não se esqueça de criar as variáveis definindo as interfaces para pfsync_if,etc.

Autor

  • Rafael M. Capovilla - 1c3m4n - (rafael@underlinux.com.br)
Horários baseados na GMT -3. Agora são 9:44.


Powered by vBulletin®
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd
SEO by vBSEO 3.2.0 ©2008, Crawlability, Inc.