[freebsd-am] Load Balance no FreeBSD: Aprenda à ter dois links de Internet gerenciados de forma inteligente com PF.

Flávio Barros flaviobarros_us em yahoo.com.br
Quarta Janeiro 31 20:07:16 BRST 2007


Pessoal, não tive a oportunidade de testar mas acredito pode ser a solução dos problemas de algum membro.

AUTOR: André Chiodi (com ajuda de João Predevello)                                                                             PUBLICAÇÃO: 29/01/2007                                                                              CATEGORIA: Redes                                                                                                                                                            Este tutorial pretende resolver ou senão ajudar à finalmente entender como distribuir a carga entre dois links de Internet, de forma organizada e funcional.
Este trabalho foi desenvolvido com a ajuda do incansável João Predevello , que me passou muitas orientações à respeito da implementação do Load Balance.

Cenário

Com a necessidade de contratar mais um link de outra operadora, sentimos a necessidade de fazer a distribuição de todo o tráfego através destes dois links. Porém, é necessário haver a separação da máquina que realiza o cache (squid), para não haver nenhuma interferência no load balance.

Aplicação

Com o script abaixo , foi possível fazer o controle de tráfego nas duas saídas (link) de acordo com a necessidade do provedor.

Arquivo /etc/pf.conf
------------ Corte aqui --------------
lan_net = "192.168.1.0/24"
int_if  = "rl0"
ext_if1 = "vr0"
ext_if2 = "vr1"
ext_gw1 = "192.168.201.254"
ext_gw2 = "192.168.200.254"
ips_msn = "{ 207.68.178.0/24, 207.46.0.0/24, 65.54.211.0/24, 64.124.83.0/24, 62.72.8.0/24, 65.54.239.0/24, 62.146.66.0/24, 65.54.142.0/24,
 65.54.239.0/24, 207.68.1.0/24, 207.46.1.0/24 }"
batlefield_tcp = "{ 30 4711 29900 29901 1024:1124 29920 28910 }"
batlefield_udp = "{ 14567,14690,23000:23009 }"
 #  faz nat em ambas as interfaces da internet
nat on $ext_if1 from $lan_net to any -> ($ext_if1)
nat on $ext_if2 from $lan_net to any -> ($ext_if2)
 pass out on $int_if from any to $lan_net
pass in quick on $int_if from $lan_net to $int_if
 block in quick on $int_if proto { tcp } from any to any port $batlefield_tcp flags S/SA label batlefield
block out quick on $int_if proto { tcp } from any to any port $batlefield_tcp flags S/SA label batlefield
block in quick on $int_if proto { udp } from any to any port $batlefield_udp label batlefield
block out quick on $int_if proto { tcp } from any to any port $batlefield_tcp flags S/SA label batlefield
 #MSN sai por um lado
pass in quick on $int_if route-to ($ext_if1 $ext_gw1) proto tcp from $lan_net to $ips_msn flags S/SA modulate state label msn
 #CONECTIVIDADE SOCIAL sai por um lado
pass in quick on $int_if route-to ($ext_if1 $ext_gw1) proto tcp from $lan_net to 200.201.174.207 flags S/SA modulate state label conect
 #HTTPS sai por um lado
pass in quick on $int_if route-to ($ext_if1 $ext_gw1) proto tcp from $lan_net to any port 443 flags S/SA modulate state label https
 #PPTP sai por um lado
pass in quick on $int_if route-to ($ext_if1 $ext_gw1) proto {tcp udp} from $lan_net to any port 1723 flags S/SA modulate state label pptp
 #SSH sai por um lado
pass in quick on $int_if route-to ($ext_if1 $ext_gw1) proto tcp from $lan_net to any port 22 flags S/SA modulate state label ssh
 #TELNET sai por um lado
pass in quick on $int_if route-to ($ext_if1 $ext_gw1) proto tcp from $lan_net to any port 23 flags S/SA modulate state label telnet
 #FTP sai por um lado
pass in quick on $int_if route-to ($ext_if1 $ext_gw1) proto tcp from $lan_net to any port {20, 21}  flags S/SA modulate state label ftp
 #  faz balanceamento de carga no trafego da rede interna.
pass in on $int_if route-to { ($ext_if1 $ext_gw1), ($ext_if2 $ext_gw2) } round-robin proto tcp from $lan_net to any flags S/SA modulate st
ate
 #  balanceamento de carga em pacotes udp e icmp vindos da rede interna
pass in on $int_if route-to { ($ext_if1 $ext_gw1), ($ext_if2 $ext_gw2) } round-robin proto { udp, icmp } from $lan_net to any keep state
 #  regras gerais "pass out" para as interfaces externas
pass out on $ext_if1 proto tcp from any to any flags S/SA modulate state
pass out on $ext_if1 proto { udp, icmp } from any to any keep state
pass out on $ext_if2 proto tcp from any to any flags S/SA modulate state
pass out on $ext_if2 proto { udp, icmp } from any to any keep state
 #  roteia pacotes de qualquer IP na $ext_if1 para $ext_gw1 e o mesmo para
#  $ext_if2 e $ext_gw2
pass out on $ext_if1 route-to ($ext_if2 $ext_gw2) from $ext_if2 to any
pass out on $ext_if2 route-to ($ext_if1 $ext_gw1) from $ext_if1 to any

----------------- Corte aqui ---------------



Desde já agradeço,
*********************************************************************
Flávio de Oliveira Barros 
Manaus - Amazonas - Brasil
Linux Registered User# 278223                 LPI ID:   LPI000056610
Amsn flaviobarros_us em hotmail.com  ICQ 3649766 Skype: flaviobarros_us
 ...	   
 ºvº       
/(_)\              
 ^ ^       
Powered by FreeBSD® 6.0  GNU/Linux & GNU/Slackware® 10.2
"Linux is for people who hate Windows,
 BSD is for people who love UNIX"
*********************************************************************
 __________________________________________________
Fale com seus amigos  de graça com o novo Yahoo! Messenger 
http://br.messenger.yahoo.com/ 
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: http://www.fug.com.br/historico/html/freebsd-am/attachments/20070131/870f3dd7/attachment.html 


Mais detalhes sobre a lista de discussão freebsd-am