|
|||||||
| Wiki | Classificados | Galeria | Reviews | Jogos | Comunidades | RSS Feeds | FAQ | Termos de Uso | Sobre |
| Cadastre-se | Fotos | Blogs | Lista de Membros | Calendário | Pesquisar | Mensagens de Hoje | Marcar Fóruns Como Lidos |
FerramentasPublicidade |
From UnderLinux WikiCluster de Firewall com carp + pfsync
[editar] IntroduçãoPara 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. [editar] RequerimentosNeste 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. [editar] Configurações[editar] CARPPrimeiro vamos criar as interfaces do carp, sim, elas funcionam como uma interface virtual :). Um pequeno resumo dos ips: fw01:
fw02:
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 [editar] Parâmetros
[editar] PFSYNCAgora vamos configurar o meio de sincronia entre os nós:
# ifconfig rl0 10.10.10.1 netmask 255.255.255.252
# ifconfig rl0 10.10.10.2 netmask 255.255.255.252
# 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). [editar] SYSCTLOutra coisa importante é ativar o carp com o sysctl, estas são as possíveis entradas:
Precisamos ativar o preempt, para isso execute nas duas máquinas: # sysctl -w net.inet.carp.preempt=1 [editar] Salvando as ConfiguraçõesComo 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:
# inet 200.x.x.2 255.255.255.0 200.x.x.255 vhid 1 advskew 0 carpdev xl0 pass senha
# inet 192.168.0.2 255.255.255.0 192.168.0.255 vhid 2 advskew 0 carpdev xl0 pass senha
# inet 10.10.10.1 255.255.255.252 NONE
# up syncdev rl0 E para finalizar habilite o preempt do carp no /etc/sysctl.conf [editar] TestandoDepois 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:
[editar] FirewallOutra 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. [editar] Autor
|