[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