segunda-feira, 10 de janeiro de 2011

FreeBSD: Multiplos gateways usando FIB.

Recentemente fiz a separação de tráfego de links aqui na empresa, e resolvi usar uma funcionalidade do FreeBSD (Linux também faz).

Verifique se há a linha contendo ROUTETABLES no arquivo de configuração do seu Kernel.

arquivo - /usr/src/sys/i386/conf/SEUKERNEL

device pf
device pflog
options ROUTETABLES=6 #Max FIBs 16


Partindo do princípio de que todos que estão lendo saibam compilar o kernel do FreeBSD, seguiremos.

link1=200.200.200.2/32 GW1=200.200.200.1
link2=189.189.189.2/32 GW2=189.189.189.1
interna=192.168.0.0/24



Digamos que eu queira que o tráfego de email trafegue no $link1 (não mailserver, p/ mailserver use RDR mesmo), e que a internet passe pelo $link2.

no arquivo /etc/rc.local :

defaultrouter="200.200.200.1"

será o nosso gateway padrão.

e no arquivo /etc/rc.local insira a chamada FIB.

setfib 1 route add default 189.189.189.1

então teremos a saida principal no ip 200.200.200.1 e o segundo link saindo por 189.189.189.1.

Teste usando setfib:

# setfib 1 netstat -rn
Routing tables

Internet:
Destination Gateway Flags Refs Use Netif Expire
default 189.189.189.1 UGS 0 3717628 rl1



Agora, vamos ao redirecionamento de portas usando PF.

link1_portas = "{ 25 110 143 995 465 993 53 }"
link2_portas = "{ 20 21 1723 47 491 1024><65000 }"
.
.
.
pass in quick on $int_if proto { tcp udp } to any port $link2_portas rtable 1
pass in quick on $int_if proto { tcp udp } to any port $link1_portas keep state

A grosso modo, declare as variáveis e após crie as regras de in e out a seu gosto.


Fonte:
http://daniloegea.wordpress.com/2009/11/17/usando-pf-com-fibs-no-freebsd/