Você está na página 1de 12

Balanceamento de links

Utilizando iptables e iproute2


Leandro R.
bolinh0@click21.com.br

Introduo
!om o barateamento de links de acesso a internet e o aparecimento da cone"o de banda#lar$a a um %alor acess&%el' muitas empresas' e edi(&cios residenciais' comearam a utilizar solu)es para pro%er o acessos a internet atra%*s de pe+uenos ser%idores ,routers- +ue (aziam a comunica o entre a rede do cliente com a internet. .esse momento sur$iu a id*ia de se /untar duas cone")es com a internet de modo +ue um unico canal de sa&da (osse %isto' (azendo com +ue a %elocidade da cone"o (osse duplicada' conse+uentemente barateando o custo de uma cone"o de por e"emplo 10bps' saindo pelo %alor de 2 cone")es de 123L de 4125bps. 6ara por em pratica a id*ia de se utilizar o balancemento de cone"o com a internet' e at* mesmo o ser%io de redundancia a (alhas contra +ueda de cone"o (oi elaborado este 7mini 89:#;9< +ue demonstra de (orma simples e clara de como este tipo de con(i$urao pode ser (eita' e dar o chute inicial para +ue outros scripts com mais (uncionalidades e mais comple"os possam ser criados.

Re+uisitos
1l$uns re+uisitos so %itais para o (uncionamento deste tipo de con(i$urao tais como os /a descritos no t&tulo do arti$o

Iptables Iproute2 3cripts de inicializao das cone")es ,caso se/a %elo"' ou ser%io parecido-

!en=rio
9 cen=rio utilizado para a demonstrao do e"emplo' * o de um edi(&cio residencial' no +ual e"istem duas cone")es com a internet atra%*s de assinaturas de acesso a banda#lar$a ,>elo"-' os dois modems 123L esto con(i$urados como R9;?129R?3' e"iste um ser%idor linu" ,distribuio a escolha- com @ placas de rede' +ue esto con(i$uradas da se$uinte maneira eth0 Rede interna ,Rede do edi(&cio- # ,1A2.1BC.0.1D244.244.244.0eth1 !one"o >elo" E1 # ,1A2.1BC.1.2D244.244.244.0eth2 !one"o >elo" E2 # ,1A2.1BC.2.2D244.244.244.09 dispositi%o de rede eth0 est= li$ado a um sFitch' onde as demais m=+uinas dos apartamentos esto li$adas.

9B3 6or este dia$rama * %is&%el a con(i$urao de +ue todos os computadores da rede interna podero se 7en"er$ar<' pois esto na mesma rede.

!on(i$ura)es
Primeiro Passo Inicializando as cone")es. .este ponto comearei a mostrar os scripts utilizados para a con(i$urao do ser%idor. >ou comear mostrando al$umas con(i$ura)es +ue (oram (eitas dentro do DetcDrc.local' +ue acabaram sendo de $rande a/uda para +ue o ser%io (uncionasse corretamente. ################################## DetcDrc.local #################################
EGDbinDsh E E ;his script Fill be e"ecuted Ha(terH all the other init scripts. E Iou can put Jour oFn initialization stu(( in here i( Jou donKt E Fant to do the (ull 3Js > stJle init stu((. touch D%arDlockDsubsJsDlocal echo LInicializando cone"ao com a internet..L DsbinDi(doFn eth1 DsbinDi(doFn eth2 echo LIniclizando >?L9M E1L DsbinDi(up eth1 DsbinDroute add de(ault $F 1A2.1BC.1.1 DetcD(ireFallDip#%elo".pl echo LInicializando >?L9M E2L DsbinDi(up eth2 DsbinDroute del de(ault $F 1A2.1BC.1.1 DsbinDroute add de(ault $F 1A2.1BC.2.1 DetcD(ireFallDip#%elo".pl DsbinDroute del de(ault $F 1A2.1BC.2.1 echo L!on(i$urando o (ireFallL DetcD(ireFallD(ireFall.sh

################################## DetcDrc.local ################################# ?ssas con(i$ura)es (oram (eitas para +ue o %elo" pudesse se conectar automaticamente' usando o script ip#%elo".pl ,2esen%ol%ido pelo Nabio >ilan' e pode ser encontrado em http DDFFF.isec.com.brD%elo"9B3 .o sei in(ormar se este script ainda conse$ue se conectar ao %elo"' o le$al dele' * a parte de teste de cone"o ,testa se est= ati%a ou no-.

1s con(i$ura)es das rotas (oram necessarias para +ue cada %elo" pudesse se conectar e autenticar' pois o problema +ue $eralmente acontece +uando se tem duas cone")es no mesmo computador' * de +ue' +uando a primeira cone"o * estabelecida' a rota padro * $erada' assim a se$unda cone"o (ica perdida' tentando en%iar pacotes +ue usam a rota padro' no caso' pela primeira +ue /= est= estabelecida' assim no conse$uiamos autenticar a se$unda cone"o do %elo". Lendo#se o script * poss&%el identi(icar os passos para o estabelecimento das cone")es 1- 2erruba as duas cone")es ,uma de cada %elo"-O 2- Le%anta a placa do primeiro %elo" ,>elo" E1-O @- 1diciona uma rota padro para esta placa +ue (oi inicializadaO P- ;enta se conectar e autenticar utilizando o script ip#%elo".pl 4- Le%anta a placa do se$undo %elo" ,>elo" E2-O B- 2eleta a rota padro criada para o primeiro %elo" ,>elo" E1-O Q- 1diciona a rota padro para o se$undo %elo" ,>elo" E2-O C- Utiliza o script de cone"o e autenticao para o se$undo %elo" ,>elo" E2-O A- 2eleta a rota padro criada para o se$undo %elo" ,>elo" E2-O 10-Le%anta o (ireFall. 9B3 ?ste script termina por no estabelecer uma rota padro' pois estas con(i$ura)es de%em ser (eitas dentro do script +ue * chamado pelo rc.local' no caso o DetcD(ireFallD(ireFall.sh. Segundo Passo !riando tabelas de cone")es para roteamento. Ruando o iproute2 est= instalado' * criado um ar+ui%o dentro do diretSrio DetcDiproute2 ,ou Detc-' chamado rtTtables. 9 ar+ui%o onde as tabelas ,de re$ras- de roteamento so de(inidas. !ada tabela * de(inida por seu nUmero identi(icador e nome. 1 ordenao %ai de 0 V 244 ,24B %alores W C bits- e a (ai"a de 24@ V 244 * reser%ada Vs tabelas do sistema ,local' main e de(ault-. 9 kernel trabalha e"clusi%amente com o identi(icador nUmerico da tabela. 1ssim 6odemos estabelecer no%as tabelas e de(inir situa)es especiais de roteamento.

?"emplo de ar+ui%o ,DetcDiproute2DrtTtables- utilizado para a con(i$urao do balanceamento de links de acordo com o cen=rio proposto. ############################ DetcDiproute2DrtTtables ########################
E
E reser%ed %alues E E244 local E24P main E24@ de(ault E0 unspec E E local E E1 inr.ruhep 10 %elo"1 11 %elo"2

@0

%elo"

############################ DetcDiproute2DrtTtables ######################## .este e"emplo (oram criadas @ tabelas +ue sero utilizadas para a criao das re$ras de roteamento a%anadas' necess=rias para o (uncio# namento do balanceamento de links. 1s tabelas cridas no ar+ui%o rtTtables (oram >alorTTTTT.ome 10 %elo"1 11 %elo"2 @0 %elo" 2e acordo com o ar+ui%o' uma tabela tem 7peso< 10' outra tem 7peso< 11 e outra tabela' com %alor mais acima tem 7peso< @0. 1 criao dessas tabelas (oram necess=rias' pois so utilizadas no momento em +ue sero criadas as re$ras de roteamento. 6ara maiores e"plica)es sobre rtTtables' e roteamento a%anado' procure pelos documentos da R.6 ,X;?R-' http DDen$.re$istro.brD$ter1QD%ideosD04# roteamento#a%ancado#linu".pd(' em sites de busca ,$oo$leFFF.$oo$le.com..br' tambem %ale a pena dar uma olhada no hoF#to do iproute2' al*m disso e"iste uma empresa chamada 1lto Rio 6reto In(ormatica' +ue disponibilizou um e"celente 7case< em seu site. http DDFFF.altoriopreto.com.brDcase1Ttech2.php

Terceiro Passo 2esen%ol%endo o script do (ireFall e criando o roteamento. .osso script do (ireFall' +ue * chamado pelo DetcDrc.local' est= localizado no nosso e"emplo dentro do diretSrio DetcD(ireFall' o ar+ui%o ser= chamado de (ireFall.sh' onde esto inseridas todas as re$ras para (uncionamento do prSprio (ireFall' +uando as re$ras para balanceamento' utilizando#se a (erramenta ,comando- 7ip<. 9 (ireFall est= baseado no iptables' e (oi escrito com base na documenta# o do (ireFall de e"emplo do 0=rcio 9li%eira ,marcio@netkra(t.com.br-' +ue pro%e acesso a internet' para uma rede interna' atra%*s do s+uid' mas neste e"emplo' no ser= usado o s+uid' nem mesmo para a utilizao de pro"J transparente' por bom senso dei"amos apenas o .1; puro. 1o lon$o do script e"istiro coment=rios sobre as re$ras' do +ue o script est= e"ecutando' mantendo assim uma linha lS$ica de con(i$ura# o' simpli(icando a identi(icao de comandos. ############################ DetcD(ireFallD(ireFall.sh ##########################
EGDbinDsh
EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE E NireFall (or 123L >elo" ;elemar E E BJ Leandro R. # bolinh0@click21.com.br E E 9B3 Balanceamento de tra(e$o para E E 2 links 123L E EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE E Le$enda E E eth0 #Y Rede interna ,1A2.1BC.0.1D2PE eth1 #Y >elo" E1 ,1A2.1BC.1.2D2PE eth2 #Y >elo" E2 ,1A2.1BC.2.2D2PE >aria%eis 2.31WL200.202.A@.Q4L 2.32WL200.202.0.@PL E !arre$ando os modulos basicos echo #n L!arre$ando os modulos...L modprobe ipTtables modprobe iptableT(ilter modprobe ipTconntrack modprobe ipTconntrackT(tp modprobe iptableTnat modprobe ipTnatT(tp

modprobe iptTL9X modprobe iptTstate modprobe iptT013RU?R12? echo L Z95[L E Resetando o NireFall echo #n LResetando o (ireFall...L iptables #N iptables #\ iptables #M iptables #t nat #N iptables #6 I.6U; 2R96 iptables #6 N9R:1R2 2R96 iptables #6 9U;6U; 1!!?6; echo L Z95[L E 8abilitando o roteamento de pacotes echo #n L8abilitando o roteamento...L echo L1L Y DprocDsJsDnetDip%PDipT(orFard echo L1L Y DprocDsJsDnetDip%PDicmpTechoTi$noreTbroadcasts echo L Z95[L E Liberando a chain I.6U; para o localhost echo #n LLiberando acesso do localhost...L iptables #1 I.6U; #p 1LL #s 12Q.0.0.1 #i lo #/ 1!!?6; iptables #1 I.6U; #p 1LL #s 1A2.1BC.0.1 #i lo #/ 1!!?6; iptables #1 I.6U; #p 1LL #s 1A2.1BC.1.2 #i lo #/ 1!!?6; iptables #1 I.6U; #p 1LL #s 1A2.1BC.2.2 #i lo #/ 1!!?6; echo L Z95[L E 9timizando o (ireFall echo #n L9timizando o roteamento...L iptables #1 I.6U; #m state ##state R?L1;?2'?3;1BLI38?2 #/ 1!!?6; echo L Z95[L E Liberando resposta dos ser%idores 2.3 echo #n LLiberando ser%idores 2.3...L iptables #1 I.6U; #p udp #s 1A2.1BC.0.0D2P ##sport 4@ #d ]2.31 #/ 1!!?6; iptables #1 I.6U; #p udp #s 1A2.1BC.0.0D2P ##sport 4@ #d ]2.32 #/ 1!!?6; echo L Z95[L E 28!6 3er%er echo #n LLiberando ser%idor 28!6...L iptables #1 I.6U; #p udp #s 1A2.1BC.0.0D2P ##sport QA #d 1A2.1BC.0.1 #/ 1!!?6; echo L Z95[L

E 2escartar pacotes (ra$mentados echo #n LBlo+ueando pacotes (ra$mentados...L iptables #1 I.6U; #i eth1 #( #/ L9X ##lo$#pre(i" L6acote (ra$mentado L iptables #1 I.6U; #i eth1 #( #/ 2R96 iptables #1 I.6U; #i eth2 #( #/ L9X ##lo$#pre(i" L6acote Nra$mentado L iptables #1 I.6U; #i eth2 #( #/ 2R96 echo L Z95[L E Blo+ueando ata+ues do tipo 3699N de I6 echo #n LBlo+ueando spoo(in$...L iptables #1 I.6U; #i eth1 #s 10.0.0.0DC #/ 2R96 iptables #1 I.6U; #i eth1 #s 1Q2.1B.0.0D12 #/ 2R96 iptables #1 I.6U; #i eth1 #s 1A2.1BC.0.0D1B #/ 2R96 iptables #1 I.6U; #i eth1 #s 22P.0.0.0DP #/ 2R96 iptables #1 I.6U; #i eth1 #s 2P0.0.0.0D4 #/ 2R96 echo L Z95[L E Liberando al$uns acessos por pin$ echo #n LLiberando acesso por pin$...L iptables #1 I.6U; #p icmp ##icmp#tJpe C #i eth0 #/ 1!!?6; iptables #1 I.6U; #p icmp ##icmp#tJpe 0 #/ 1!!?6; iptables #1 I.6U; #p icmp #s 1A2.1BC.0.0D2P #d 0D0 #/ 1!!?6; echo L Z95[L E Re$ra para 338 ,opcionalecho #n LLiberando acesso ao 338...L iptables #1 I.6U; #p ;!6 ##dport 22 #/ 1!!?6; echo L Z95[L E Re$ras do N9R:1R2 E 2escarta pacotes in%alidos echo #n L2escartando pacotes in%alidos para reen%io...L iptables #1 N9R:1R2 #m state ##state I.>1LI2 #/ 2R96 echo L Z95[L E 0antendo cone"oes ati%as echo #n L0anutencao de cone"oes ati%as...L iptables #1 N9R:1R2 #m state ##state R?L1;?2'?3;1BLI38?2 #/ 1!!?6; echo L Z95[L

E Liberando acesso ao 2.3 para a rede interna ,?mailecho #n LLiberando 2.3 para rede interna...L iptables #1 N9R:1R2 #s 1A2.1BC.0.0D2P #/ 1!!?6; iptables #1 N9R:1R2 #p udp #s 1A2.1BC.0.0D2P #d ]2.31 ##dport 4@ #/ 1!!?6; iptables #1 N9R:1R2 #p udp #s 1A2.1BC.0.0D2P #d ]2.32 ##dport 4@ #/ 1!!?6; iptables #1 N9R:1R2 #p udp #s ]2.31 ##sport 4@ #d 1A2.1BC.0.0D2P #/ 1!!?6; iptables #1 N9R:1R2 #p udp #s ]2.32 ##sport 4@ #d 1A2.1BC.0.0D2P #/ 1!!?6; echo L Z95[L E Nazendo mascaramento de enderecos I6 ,.19 .1;E 9B3 essa re$ra eh mutuamente e"cludente com a pro"ima' a do .1; E ou se/a' escolha uma das duas echo #n L8abilitando o mascaramento...L Eiptables #t nat #1 693;R9U;I.X #/ 013RU?R12? iptables #t nat #1 693;R9U;I.X #o eth1 #/ 013RU?R12? iptables #t nat #1 693;R9U;I.X #o eth2 #/ 013RU?R12? echo L Z95[L E 0arcando pacotes echo #n L0arcando pacotes...L iptables #1 6R?R9U;I.X #t man$le #s 1A2.1BC.0.0D2P #d 0D0 #/ 01R5 ##set#mark @ echo L Z95[L E 2esabilitando o (iltro de pacotes do martian source echo #n L2esli$ando rpT(ilter...L (or eee in DprocDsJsDnetDip%PDcon(DHDrpT(ilterO do echo 0 Y ]eee done echo L Z95[L E 2e(inindo re$ras de balanceamento de Link echo #n LBalanceando links %elo"...L E %elo" E1 ip route add 1A2.1BC.1.0D2P de% eth1 src 1A2.1BC.1.2 table %elo"1 Eip route add 1A2.1BC.0.0D2P %ia 1A2.1BC.0.1 table %elo"1 ip route add de(ault %ia 1A2.1BC.1.1 table %elo"1 E %elo" E2 ip route add 1A2.1BC.2.0D2P de% eth2 src 1A2.1BC.2.2 table %elo"2 Eip route add 1A2.1BC.0.0D2P %ia 1A2.1BC.0.1 table %elo"2 ip route add de(ault %ia 1A2.1BC.2.1 table %elo"2 E setando %elo" na tabela principal de roteamento ip route add 1A2.1BC.1.0D2P de% eth1 src 1A2.1BC.1.2 ip route add 1A2.1BC.2.0D2P de% eth2 src 1A2.1BC.2.2

E setando a rota pre(erencial ip route add de(ault %ia 1A2.1BC.1.1 E re$ras das tabelas ip rule add (rom 1A2.1BC.1.2 table %elo"1 ip rule add (rom 1A2.1BC.2.2 table %elo"2 E balanceamento de link ip rule add (Fmark @ lookup %elo" prio @ ip route add de(ault table %elo" ne"thop %ia 1A2.1BC.1.1 de% eth1 Fei$ht 1 ne"thop %ia 1A2.1BC.2.1 de% eth2 Fei$ht 1 E9B3 o comando assima de%e ser di$itado em uma sS linha' no de%e ser dado Zenter[. E (lush no roteamento ip route (lush cache echo L sleep @

Z95[L

############################ DetcD(ireFallD(ireFall.sh ########################## 9 script ainda libera o acesso para +ue o nosso ser%io de 28!6 rodando neste mesmo ser%idor' possa (ornecer o pool de enderos I6 para os apartamentos do edi(&cio e"emplo do nosso cen=rio. .o (inal do script' ou se/a' na parte onde * (eita as con(i$ura)es e(eti%as para o (uncionamento do balanceamento dos links' * importante a obser%ao +ue (az re(erencia ao comando de balanceamento' +ue de%e ser di$itado em somente uma linha' no apertando a tecla Z?nter[ Re$ra
ip route add de(ault table %elo" ne"thop %ia 1A2.1BC.1.1 de% eth1 Fei$ht 1 ne"thop %ia 1A2.1BC.2.1 de% eth2 Fei$ht 1

9utra importante considerao sobre o script' e a utilizao da marcao de pacotes' para +ue os mesmos (ossem roteados pelas tabelas de roteamento das duas cone")es 123L. 6rimeiramente (oi criada uma re$ra para o (ireFall' atra%*s do iptables' dizendo para marcar todos os pacotes com destino de sa&da da rede. Re$ra
iptables #1 6R?R9U;I.X #t man$le #s 1A2.1BC.0.0D2P #d 0D0 #/ 01R5 ##set#mark @

?m se$undo lu$ar (oi utilizada essa marcao nos pacotes' para ser%ir de entrada como uma 7!lassi(icao< para a tabela de roteamento ,@0 >elo"-. Re$ra
ip rule add (Fmark @ lookup %elo" prio @

9utro detalhe importante * a con(i$urao da primeira rota padro' as cone")es' mesmo estando balanceadas' neste caso de 1 1 ,soma dos links-

precisam de ter uma rota padro' pois est= ser= por onde o balanceamento de%er= ser iniciado' ou se/a' a primeira cone"o +ue che$ar ao ser%idor' ser= transmitida para a internet pela rota padro' a prS"ima cone"o +ue (or solicitada' ser= transmitida pelo outro link ,balanceamento de 1 1' uma cone"o para cada link-. 1ssim um e"emplo seria' o doFnload de um ar+ui%o de 2000Bs' se (osse iniciado o doFnload deste ar+ui%o a partir de um $erenciador de doFnloads' e utilizando#se op)es +ue permitam a di%iso do doFnload em outras cone")es' seria poss&%el por e"emplo 7bai"ar< 100mbs a partir de cada cone"o' le%ando#se em considerao +ue (oi escolhida a opo de di%idir o doFnload em duas partes. ?m nUmeros 3e o doFnload atra%*s de uma cone"o est= sendo (eito a 20kbps' di%idindo este doFnload' e utilizando o balanceamento para usar a cone"o do outro modem 123L' * poss&%el +ue o doFnload possa ser (eito ao dobro da %elocidade' como no e"emplo' P0kbps. 1l*m do balanceamento este script /= pro%e redundancia de cone")es' ou se/a se uma cone"o cair' ele automaticamente redireciona todo o tr=(e$o apenas para a cone"o +ue continuou ati%a. Recomenda#se o uso de al$uma (erramenta +ue possa monitorar as cone")es' uma e"celente alternati%a * o Ip;ra(. http DDcebu.mozcom.comDrikerDiptra(DdoFnload.html .ele ser= poss&%el %er as cone")es ati%as dos usu=rios' a %elocidade real das cone")es 123L' e %er o balanceamento em (uncionamento. Quarto Passo 3imples con(i$urao de um ser%idor 28!6. ?ste * um e"emplo de con(i$urao do ser%idor 28!6 no Linu"' utilizando o ser%io 28!62' atra%*s do ar+ui%o de con(i$urao dhcpd.con(' localizado dentro do diretSrio Detc. .o entrarei em detalhes sobre a sua con(i$urao' as in(orma)es nele con(i$uradas' mostram' a ati%ao deste ser%io para a rede 1A2.1BC.0.M' os endereos por ele distribuidos esto na (ai"a de .10 a .240' e al$umas outras op)es muito importantes tambem no poderiam dei"ar de ser setadas' como a rota padro e os ser%idores de 2.3.

##################################### DetcDdhcpd.con( ##############################


E############################################### de(ault#lease#time P@200O ma"#lease#time P@200O option domain#name Lminharede.intranetLO option domain#name#ser%ers 200.M.M.M' 200.M.M.MO ddns#update#stJle ad#hocO subnet 1A2.1BC.0.0 netmask 244.244.244.0 ^ ran$e 1A2.1BC.0.10 1A2.1BC.0.240O option routers 1A2.1BC.0.1O option subnet#mask 244.244.244.0O alloF unknoFn#clientsO _ E###############################################

##################################### DetcDdhcpd.con( ############################## 6ara maiores in(orma)es sobre o ser%io 28!6' * aconselha%el o uso do 7man<' pois e"istem muitas in(orma)es e parametros de con(i$ura)es contidas nele.

!onsidera)es Ninais
?ste script est= em (uncionamento e"tamente do /eito +ue (oi posto a+ui. ` claro +ue milhares de outras con(i$ura)es podem ser (eitas e utilizadas com o balanceamento de links' como por e"emplo a di%iso de utilizao de links por portas' ou aplica)es' mas este .a9 * o ob/eti%o deste pe+ueno arti$o' +ue se resume a demonstrar de (orma simpli(icada o balanceamento de cone")es. 2U%idas ou su$est)es b email bolinh0@click21.com.br 1$radecimento 2ou$las !oelho 3. 63 1ntes de criticar o trabalho dos outros' pense em (azer melhor.

Leandro R.

0@D0BD200P

Você também pode gostar