Firewall Linux - Roteamento avançado usando iproute2 e iptables (load balance)

Tutorial completo e detalhado sobre roteamento avançado no Linux. Explica como fazer "balanceamento de carga" em 2 ou mais links de internet usando iproute2 e iptables no Linux, bem como rotear pacotes pela origem, pela porta e etc.

[ Hits: 165.712 ]

Por: Fabricio Ferreira - Guzzy em 28/03/2007


Implementando o firewall



Abaixo descrevo detalhadamente como fazer cada configuração no script para que você tenha sucesso na implementação.

Entendam que os IPs aqui utilizados são fictícios, bem como seus default gateways. Você deverá trocá-los pelos IPs da sua rede conforme a necessidade.

Eis um exemplo de um script pronto em um firewall com 3 interfaces apenas. A primeira - ETH0 é a interface conectada à rede interna. A interface ETH1 é a interface ligada ao LINK1, e por último, a interface ETH2, ligada ao LINK2.

Vejamos:

# Nesta parte denominamos variáveis para as interfaces como segue.
# Denominamos que o nome LAN seja referente à Interface ETH0 que no nosso
# script é a da rede interna. Verifique no seu Firewall qual é a interface
# correta.


IF_LAN='eth0'

# Aqui denominamos as variáveis dos LINKS 1 e 2, e os chamamos de LINK1 e LINK2
# É claro que você poderá chamá-los do que quiser. Exemplo: ADSL1 e ADSL2,
# mas não esqueça de alterar as variáveis no restante do script.

IF_LINK1='eth1'
IF_LINK2='eth2'

# Aqui colocamos os Gateways dos Links de Internet.
# Geralmente, os Default Gateways dos Links são os IP´S dos roteadores de
# Internet.
GW_LINK1='200.70.0.1'
GW_LINK2='200.80.0.1'

# Nesta parte, utilizamos o comando IPTABLES para mascarar os IPs, ou seja,
# fazemos um NAT (Network Address Translation) para que os pacotes que venham da
# Interface ETH0 com IPs da rede interna, ou mesmo pacotes gerados dentro do
# próprio Firewall, possam sair para a Internet com endereços trocados, usando
# os IPs das interfaces ligadas aos Links de Internet.
# O MASQUERADE ao final do comando faz exatamente isto.
# Caso contrário, utilizaria ACCEPT, mas aí os pacotes sairiam para a Internet
# com IPs da rede interna e jamais retornariam ao Firewall.

iptables -t nat -A POSTROUTING -o $IF_LINK1 -j MASQUERADE
iptables -t nat -A POSTROUTING -o $IF_LINK2 -j MASQUERADE

# Aqui começamos a marcar os pacotes diferenciando-os pela porta utilizada.
# Observe que escolhemos os pacotes com destino às portas 80 (HTTP) 443 (HTTPS)
# 25 (SMTP) 110 (POP)
# Todo pacote que passar pelo Firewall com estas particularidades receberão
# uma "marca", uma espécie de carimbo. Pacotes destinados à porta 80
# recebem "carimbo" de número 2, pacotes com destino à porta 25
# recebem "carimbo" número 3.
# Desta forma, podemos diferenciá-los para que mais à frente no script tenhamos
# controle do que saiu/entrou e por onde saiu/entrou.

iptables -t mangle -A PREROUTING -i $IF_LAN -p tcp --dport 80 -j MARK --set-mark 2

iptables -t mangle -A PREROUTING -i $IF_LAN -p tcp --dport 443 -j MARK --set-mark 2

iptables -t mangle -A PREROUTING -i $IF_LAN -p tcp --dport 25 -j MARK --set-mark 3

iptables -t mangle -A PREROUTING -i $IF_LAN -p tcp --dport 110 -j MARK --set-mark 3

# A diferença entre o PREROUTING e o OUTPUT é que, PREROUTING abrange os
# pacotes que foram originados fora do FIREWALL, por exemplo Interface ETH0
# ($IF_LAN), enquanto OUTPUT são os pacotes originados no Firewall, ou seja, na
# própria console.

iptables -t mangle -A OUTPUT -p tcp --dport 80 -j MARK --set-mark 2
iptables -t mangle -A OUTPUT -p tcp --dport 443 -j MARK --set-mark 2
iptables -t mangle -A OUTPUT -p tcp --dport 25 -j MARK --set-mark 3
iptables -t mangle -A OUTPUT -p tcp --dport 110 -j MARK --set-mark 3

# Aqui montamos as tabelas dinâmicas a partir das marcas (carimbos) que fizemos
# lá em cima no nosso script.
# Pacotes que foram marcados com 2 vão para a tabela "table 20" e os marcados
# com 3, vão para a tabela "table 21", com a mesma prioridade. Perceba o PRIO 20
# após os comandos.

ip rule add fwmark 2 table 20 prio 20
ip rule add fwmark 3 table 21 prio 20

# se quisermos condicionar esta marcação de outra forma, podemos utilizar o
# comando das seguintes formas:

# Este condiciona que todos os pacotes que vierem da rede 192.160.0.0 vão para
# a tabela 20.
# O comando está comentado. Caso queira utilizá-lo, apenas retire o sinal de "#"
# da frente.

# ip rule add from 192.160.0.0/24 table 20

# Este outro condiciona os pacotes da rede 192.170.0.0 a irem para a tabela 21
# O comando está comentado. Caso queira utilizá-lo, apenas retire o sinal de
# "#" da frente do comando.

# ip rule add from 192.170.0.0/24 table 21

# Agora sim daremos rumo aos pacotes que foram marcados e cadastrados na tabela
# dinâmica.
# Veja que os pacotes que foram enviados para a tabela 20 têm como DEFAULT
# GATEWAY o LINK1. Sendo assim, os pacotes serão enviados para o LINK1 na
# Interface ETH1 com o IP 200.70.0.1.
# Já os pacotes da tabela 21 serão enviados para o LINK2 na Interface ETH1, com
# o IP 200.80.0.1


ip route add default via $GW_LINK1 dev $IF_LINK1 table 20
ip route add default via $GW_LINK2 dev $IF_LINK2 table 21


# Este último comando limpa a tabela, caso ela já tenha sido utilizada
# anteriormente, ou apenas para termos certeza de que quando você resetar as
# regras todas, o Firewall não guarde nenhum tipo de informação na
# memória (cache). Daí o nome FLUSH CACHE.

ip route flush cache

Você pode utilizar parte do script, se necessário. Por exemplo, se quiser apenas rotear pacotes pela origem, utilize:

ip rule add from 192.160.0.0/24 table 20
ou
ip rule add from 192.160.0.0/24 table 21

Conforme o Link que deseja utilizar.

Onde 192.160.0.0/24 é a origem. Neste exemplo, a rede em questão tem a máscara 255.255.255.0 (/24).

Desta forma, não há necessidade de marcar pacotes e você poderá deletar as linhas do script.

É isso aí...
Espero que o SCRIPT seja útil....

Até a próxima...

Fabrício Ferreira - GUZZY
Especialista em Segurança Digital
MCP - Microsoft Certified Professional
Linux Specialist

Página anterior    

Páginas do artigo
   1. Introdução
   2. Implementando o firewall
Outros artigos deste autor
Nenhum artigo encontrado.
Leitura recomendada

Zentyal 2.0 - Solução completa de segurança open source

Abrindo e fechando portas com o BlockOutTraffic

Balanceamento de link + redundância

IPFire - Um Firewall Open Source

IPset - Bloqueie milhares de IPs com o iptables

  
Comentários
[1] Comentário enviado por dtux em 28/03/2007 - 07:11h

Show de bola, mto bom cara!!!

[2] Comentário enviado por fabmas em 28/03/2007 - 08:44h

parabéns!!

com certeza será de muiiitissima utilidade pra galera!

[3] Comentário enviado por mbmaciel em 29/03/2007 - 08:22h

Nota 10 e já foi para os favoritos!

[4] Comentário enviado por coffani em 29/03/2007 - 18:44h

Rapaiz... isso que é um trabalho legal, ja ta nos meus favoritos

[5] Comentário enviado por auditor em 30/03/2007 - 16:42h

zz

[6] Comentário enviado por Douglas Santos em 30/03/2007 - 18:06h


Tenho um problema com meu rc.firewall,ele tem vontade própria!!!

Quando libero o acesso total a um usuário, a regra só entra em vigor, quando reinicio a maquina!!

O que será isso????

Me ajudem por favor!!!

[7] Comentário enviado por geovannyjs em 30/03/2007 - 22:09h

E ai chefe?

Cara, tem muito tempo que estou cadastrado no forum, e este é o primeiro artigo que defino como favorito(não que os outros não sejam muito bons), mas o conteudo desse artigo não é muito comum, muito bom cara!

Geovanny Junio

[8] Comentário enviado por Bique em 01/04/2007 - 11:16h

Excelente artigo. Um abraco

[9] Comentário enviado por fernandoamador em 08/04/2007 - 23:43h

Ótimo artgo...

[10] Comentário enviado por worksoft em 15/04/2007 - 18:57h

Parabéns Guzzy,

Artigo muito bom e muito bem explicado.

[11] Comentário enviado por brunosalmito em 10/05/2007 - 10:27h

Sem comentarios, já está nos favoritos

[12] Comentário enviado por linux.vitor em 27/05/2007 - 15:47h

Amigo,
Fiz tudinho que esta falando ai, mas to com um problema,
Os clientes não conseguem acessar paginas novas, como por exemplo, a UOL, so acesso paginas que estao abertas no meu Broswser quando tento abrir um pagina nova ele não acha a pagina???
e tem tambem como eu determinar assim: ip=172.16.0.1 passa pelo link1 ip=172.16.0.3 passa pelo link2???

[13] Comentário enviado por fabricioguzzy em 27/05/2007 - 16:01h

Vitor,
Não faz muito sentido ter aberto uma vez e depois não abrir mais. Cuidado com as variáveis. Muitas pessoas erram nelas. mas na Dúvida limpe os caches logo depois do erro.

ip route flush cache


Quanto à sua pergunta: SIM, É POSSÌVEL.
Veja no final do script, lá tem uma parte que fala exatamente disso, veja:

Você pode utilizar parte do script, se necessário. Por exemplo, se quiser apenas rotear pacotes pela origem, utilize:

ip rule add from 192.160.0.0/24 table 20
ou
ip rule add from 192.160.0.0/24 table 21

Conforme o Link que deseja utilizar.

Onde 192.160.0.0/24 é a origem. Neste exemplo, a rede em questão tem a máscara 255.255.255.0 (/24).

Desta forma, não há necessidade de marcar pacotes e você poderá deletar as linhas do script.

Espero que vc consiga executar corretamente todo o script. Qualquer dúvida me escreva.

Abraço.

Fabrício.

[14] Comentário enviado por linux.vitor em 27/05/2007 - 16:17h

Entaum fabricioguzzy,

Eu fiz tudo ai que vc falou, mas o problema de abrir as paginas não resolvel, so resolve se eu colocar essa comando: route add default gw ip_do_roteador, mas com esse comando tudo vai passar so por 1 roteador o do primeiro link.
O que eu reparei e o seguitne, as portas 25,110 que são do meus e-mails que uso no outlook, quando abro o outlook, eu vejo o moden do Link2 piscando, quer dizer que os pacotes estão passando por lah, e outra coisa se coloco em fez de http://www.uol.com.br coloco o IP ele abre normal.
o que pode estar acontecendo... sera que tem q abrir tambem a porta 53 do DNS..
Obrigado pela Atenção

[15] Comentário enviado por fabricioguzzy em 27/05/2007 - 16:39h

Isso mesmo... Toda vez que vc digita um IP ele abre a página, e quando vc digita o nome/dominio ele não abre, trata-se de um problema de DNS (resolução de nomes)

Pode verificar DNS port 53 que é isso mesmo!!!
É isso ai meu amigo...

Abraço

Fabrício.

[16] Comentário enviado por linux.vitor em 27/05/2007 - 16:53h

Entaum, consegui resolver.....
e tambem fiz o eskema do link em cada IP, foi facil, era DNS mesmo o problema, agora so to com 1 problema, não consigu accessar o Servidor pelo ssh (22) pelo ip dele 10.0.0.1 que e da minha rede Interna, so acesso ele pelo ip da placa eth0 172.16.0.7, e tambem não consigo pingar nada pelo servidor??


[17] Comentário enviado por fabricioguzzy em 27/05/2007 - 16:59h

vc quer dizer acessar o FIREWALL por SSH...
para as duas coisas verifique suas regras de (iptables)
Libere apenas o necessário.. cuidado pra não abrir o firewall pra WAN, ok?!

Depois me diga...

Até

Fabrício.

[18] Comentário enviado por linux.vitor em 27/05/2007 - 17:01h

hehe.. .intaum... não rodei me firewall ainda no servidor, ta tudo liberado, somente rodei o seu script... e ele travou o meu acesso ao ssh.. muito estranho...

[19] Comentário enviado por linux.vitor em 27/05/2007 - 21:58h

fabricioguzzy...
vc poderia me ajudar em outra coisa??
Seguinte deu certo aki.. ta tudo blz... mas o que eu percebi e o seguinte, pra funcionar tenho q definir um Router padrão... rout add default gw Ip_de_um_dos_roteadores, se não não navega, so que com eese problema, não consigo acessar de outro lugar pela porta 3389 nos 2 Links Simultaneos?? vc sabe o prq...
Valew..

[20] Comentário enviado por fabricioguzzy em 28/05/2007 - 15:58h

Vitor,
Vc precisa pensar no seguinte.
Você quer acessar 2 lugares diferentes remotamente e simultaneamente.
Então temos 3 locais: Um deles é você e os outros dois vamos chamar de maquina A e maquina B.
Você tem que decidir como vai rotear, por exemplo: DE você PARA máquina A, DE você PARA maquina B. A origem é a mesma, portanto vc tem que criar uma regra de DESTINO. Quando o destino for máquina A saia pelo LINK 1, quando destino for máquina B, saia pelo LINK 2. Entendeu? para isso você nem precisa do meu Script, basta você adicionar regras simples de roteamento.
Quanto à sua pergunta sobre o DEFAULT GATEWAY, está correto, toda máquina tem um DEFAULT GATEWAY. DEFAULT significa NA FALTA. portanto se, não existir regra ou qualquer outra politica de roteamento na máquina o gateway que assumirá é o DEFAULT GATEWAY... Fácil?
Sugiro vc ler algum documento sobre roteamento básico. Você poderá enriquecer seus conhecimentos. Você está tendo dúvidas sobre coisas mais simples do que este script. Confesso que este script é um tanto dificil pra quem não está habituado com roteamento no Linux.
Boa leitura e qualquer coisa escreve ai...

Abraço.

Fabrício.

[21] Comentário enviado por cadastro.sites em 23/06/2007 - 16:50h

Como que eu faço pra fazer o seguinte:

Pelo Link1 apenas a porta 80 e o restante das portas pelo Link2

Grato

[22] Comentário enviado por fabricioguzzy em 23/06/2007 - 20:53h

Olá caro colega...
Coloque o DEFAULT GATEWAY do firewall pra usar o LINK2, e use o comando até a linha:

iptables -t mangle -A OUTPUT -p tcp --dport 80 -j MARK --set-mark 2

para marcar os pacotes de porta 80 pra sair pelo LINK1.
Depois o resto das marcas de pacotes vc não precisa colocar...
Cuidado, existem Sites que se utilizam em parte da porta 443 (ssl) e 80 (http), bancos por exemplo, se vc sair com IP´s diferentes poderá ter problemas.
Aconselho vc a usar 80, 443 e 53 pelo mesmo Link.


Fácil? Abraços!!

Fabrício Guzzy

[23] Comentário enviado por sandrocarva em 01/08/2007 - 12:01h

?comentario=
Fabricio,

Primeiramente parabéns pelo artigo, muito util.
Adaptei ele para minha realidade, mas estou tendo problema.
CentOS 4.4 e tenho 4 interfaces:
etho = link gvt
eth1 = link copel
eth2 = 192.168.1.0/24 - sair pela gvt (eth0)
eth3 = 192.168.2.0/24 - sair pela copel (eth1)

qndo rodo o script da o seguinte erro:

printk: 1 messages suppressed.
MASQUERADE: Route sent us somewhere else.

O script ficou assim:

IF_LAN="eth3"

IF_LINK1="eth0"
IF_LINK2="eth1"

GW_LINK1="192.X.X.253"
GW_LINK2="200.X.X.49"

/sbin/iptables -t nat -A POSTROUTING -o $IF_LINK1 -j MASQUERADE
/sbin/iptables -t nat -A POSTROUTING -o $IF_LINK2 -j MASQUERADE

/sbin/ip rule add from 192.168.1.0/24 table 20
/sbin/ip rule add from 192.168.2.0/24 table 21

/sbin/ip route add default via $GW_LINK1 dev $IF_LINK1 table 20
/sbin/ip route add default via $GW_LINK2 dev $IF_LINK2 table 21

/sbin/ip route flush cache


Onde foi que errei??



[24] Comentário enviado por fabricioguzzy em 01/08/2007 - 13:56h

Olá Sandro... Muito Obrigado pelas palavras!
Vamos lá...
Você tem 4 interfaces ai certo?
Duas dos Links e duas da rede interna...
Não vejo a variável da ETH2 no seu script... mas td bem...
Se o seu problema é rotear pela origem está mais fácil do que vc imagina...Percebi uma coisa... O gateway do Link1 é um IP frio (inválido)...vc está mascarando o que nele? tem alguém que está mascarando após esse firewall? (NAT)
Você fez no SLACKWARE? CENTOS 4.4??
O Kernel está para suportar roteamento avançado nessa distro?
para maiores dúvidas sobre isso sugiro vc ler esse artigo aqui: http://www.rnp.br/newsgen/9809/rot-linux.html ...postado pelo colega IVO DE CARVALHO...

Qualquer dúvida me escreva novamente.

ABraços...

Fabrício.

[25] Comentário enviado por sandrocarva em 02/08/2007 - 10:54h

Fabricio,

Eu de novo,
sim tenho 4 interfaces, 2 dos links e 2 das redes internas.
sobre a ETH2 o script não faz menção a interface da rede interna.
o gateway do link1, é o ip frio que o modem da GVT manda pro servidor, no modem direcionei todas as portas para o servidor linux, estoiu usando o CentOS 4.4 - kernel 2.6.9.

[26] Comentário enviado por xbrennox em 22/08/2007 - 10:39h

Parabéns pelo Artigo Fabricio,

Amanhã estarei implementando ip_route2 aqui na empresa, como já tenho conhecimento avançado em linux firewall e rotas, acredito que não terei problemas, mas tenho 1 duvida. Vamos supor que tenho 2 links WAN e um LAN. se um desses LINKS cai, o que irá acontecer?

se LINK 1 fira fora do ar (link onde está meu gw) , o que irá acontecer com minha rede?
todos passaram a usar o link2 automáticamente?

e se o LINK 2 sair fora do ar? todos que estão na segunda tabela irão usar o link1?

depois que cair o LINK e logo em seguida voltar, as rotas irão permanecer?

Antes de implantar iproute2, queria ter +- essa noção do que irá acontecer nas situações abrangidas acima.

Agradeço dez de já.

[27] Comentário enviado por fabricioguzzy em 22/08/2007 - 14:00h

Brenno..
Vamos lá.
Este script não faz AUTO BALANCE..ou seja, ele não verifica se os LINKS cairam ou não.. ele porporciona rotas e divisão de carga entre dois ou mais links... O que vc quer é uma solução de LOAD BALANCE AUTOMATICA... Este script é estático. a Solução que vc procura é um tanto mais complicada de se desenhar.. inclusive no mercado as empresas vendem estes produtos a um custo altíssimo...
Não é muito dificil de fazê-lo não... dá trabalho... quem sabe eu desenhe uma solução desses e posto aqui pra galera...
Se um link cair, vc fica sem aquele acesso...já que é um roteamento estático.
Qualquer coisa me escreva!
abraços
Fabrício

[28] Comentário enviado por xbrennox em 22/08/2007 - 15:11h

Obrigado por responder Fabricio,


Por gentileza, você conhece alguma documentação de Load balance automática? pode ser inglês.

Vou procurar no google, mas agradeço dez de já.

Att,.

[29] Comentário enviado por xbrennox em 22/08/2007 - 16:01h

Fabricio, eu to lendo mais sobre esse assunto, e fiquei em duvida em relação ao seu script.

No seu script você pde os 2 GW das WAN certo?, a tabela main só aceita um GW, se os 2 GW dos links das WAN ficarem ativos, qual o comando que terei que usar para tabela main aceitar os dois GW da minhas WAN?

[30] Comentário enviado por xbrennox em 22/08/2007 - 16:13h

Fabricio, não precisa responder, já entendir tudo.

Amanhã estarei colocando essa solução na pratica, qualquer problema estarei postando.

[31] Comentário enviado por fabricioguzzy em 23/08/2007 - 10:43h

Brenno ou quem mais se interessar.

leiam este artigo:
http://lartc.org/howto/lartc.rpdb.multiple-links.html
Creio que ajudará na solução de FAILOVER e AUTO BALANCE.
Abraços!
Fabrício Guzzy;

[32] Comentário enviado por N0fx em 24/09/2007 - 09:31h

Reservei um link apenas para trafego do emule. Sei que a porta do emule varia, mas por enquanto vou testar apenas com a porta 4662 que foi onde detectei mais trafego.
No script adicionei o seguinte:
IP_INET="numero ip 1"
IP_ALIAS1="numero ip 2"
IP_ALIAS2="numero ip 3"
IP_ALIAS3="numero ip 4"
IP_ALIAS4="numero ip 5" #Passar emule por aqui
IF_INET="eth0"
IF_NET1="eth1"
IF_NET2="eth2"

iptables -t mangle -A PREROUTING -i $IF_INET -p tcp --dport 4662 -j MARK --set-mark 2
iptables -t mangle -A OUTPUT -p tcp --dport 4662 -j MARK --set-mark 2
ip rule add fwmark 2 table 20 prio 20
ip route add default via $IP_ALIAS4 dev $IF_INET1 table 20
ip route flush cache

Quando inicio meu firewall da o seguinte erro:
Error: either "to" is duplicate, or "20" is a garbage.

Estou utilizando apenas um table, no restante do script não contém mais nenhum.
O que poderia ser?

Abraços!

[33] Comentário enviado por N0fx em 24/09/2007 - 10:02h

Obrigado...
já identifiquei o erro!
Eu tenho sempre que tirar da minha tabela para poder cadastrar.
Coloquei no stop do meu script o seguinte:
ip rule del fwmark 2 table 20 prio 20

Aí sempre que eu der um restart ele deletará o table 20 para poder adicionar novamente.

[34] Comentário enviado por renatopradop em 15/11/2007 - 22:23h

eu teria como fazer esse balanceamento via URL ? por exemplo... quero que qualquer solicitacao em que o sufixo da URL for .gov.br ele saia pelo Link1 e qualquer outro pelo Link2 ?

Obrigado

[35] Comentário enviado por Feltes em 03/12/2007 - 16:35h

Olá Fabricio,
Como os demais achei mt o seu script..
Mas o problema que eu tenho é o seguinte, tenho 3 modens:
eth0 - rede interna
eth1 - adsl1
eth2 - adsl2
eth3 - adsl3

O modem 1 é o default Gateway de toda rede.. o 2 sai e entra apenas e-mails e o 3 vai entrar duas vpn com as 2 filiais, mas configurei td e as requisiçoes para montar a vpn entra pelo certo 3, mas sai pelo 1, mesmo depois de eu marcar os pacotes pela porta!?
Minha pergunta é tem como eu definir que, quem entrar pelo modem X sai apenas pelo modem X??

Abraço, e desde já, Obrigado.

[36] Comentário enviado por cristyangiovane em 16/01/2008 - 17:03h

Otimo Artigo....

Caso eu tenha dois links, e toda a rede saia pelo link1, e apenas uma determinada maquina vai sair pelo link2, como devo fazer a regra?

Seria isso???

ip rule add from 192.168.0.10/24 table 21

[37] Comentário enviado por guigsilva em 17/01/2008 - 18:09h

Muito Bom o artigo !!!!!!
Dos mais interessantes que vi no VOL ultimamente!
Apenas um parênteses, quem estiver utilizando 2 IPs numa placa de rede (alias) tem que definir a var LINKx como ethx -d endereço-ip-da-alias, fiz isso pq aqui no meu deu erro quando tentei aplicar direto

Valeu!!!

[38] Comentário enviado por mauromx em 31/01/2008 - 16:47h

Excelente artigo !!!!!
Esse tutorial funciona com o squid transparente?
No meu iptables eu direciono a porta 80 para 3128
Fedora Core 6 + squid transp. + iptables
eth0
eth1
eth2
Mas ainda nao consegui ativar o eth2, em rede eu adiciono um novo e pronto? Preciso instalar o iproute2? Alguém, poderia me ajudar nessa jornada?

Valeu!!!



[39] Comentário enviado por lavoie em 12/03/2008 - 18:00h

muito bom o artigo.
queria te perguntar:
se pelo link 1 eu setar sites bancos
e pelo link2 o restante,
o link1 vai ser somente para site dos bancos?
existe a possibilidade dos dois links trabalharem na rede, quando um estiver com muito uso, utilizar o que estiver com mais folga ?, nao somando como 2mb + 2mb = 4mb, e sim se uma maquina da rede entra pelo link1 e outra pelo link2 mas aleatorio sem setar ip.

se eu consegui explicar direito eh isso
valeu.

[40] Comentário enviado por fabricioguzzy em 14/03/2008 - 03:39h

Lavoie,
Sim, basta vc criar as regras para os Ip´s dos Sites dos bancos e rotear pelo link 1 ou 2 (ou 3 e etc) isso é roteamento simples.

Ex: route add 200.0.0.1 netmask 255.255.255.255 gw 201.0.0.1 (onde, 200.0.0.1 é o IP do site do banco, depois a máscara, depois o Gateway do seu Link, neste caso o exemplo é 201.0.0.1) Veja, são IP´s fictícios. vc precisa trocar pelos que vc tem ai na sua rede... Você pode fazer esta rota ficar persistente também, ou seja, ela ficará no Firewall mesmo depois de um Boot. Edite o /etc/sysconfig/network/routes

Quanto a fazer um balanceamento automático ai a coisa muda. Este script não é tão inteligente assim a ponto de "saber" quanto tráfego vc tem no Link 1 e trocar para o 2. Pretendo desenvolver algo assim mais pra frente, mas preciso de tempo..o que ultimamente está faltando.
Você precisa tomar cuidado ao usar 2 links, pois vc pode ter um roteamento assimétrico, ou seja, pacotes entram por um Link e saem por outro. Isto é bem chato de arrumar depois.

Abraços e Boa Sorte...

Fabrício,

[41] Comentário enviado por juno em 03/06/2008 - 17:47h

Boa tarde
Fabricio,

Parabéns pelo artigo me esclareceu muitas dúvidas, fiz a implementação aqui na empresa mas estou com o problema, será que pode me ajudar ?
Cenário :
Tenho 3 links de internet e a minha rede:
eth0 - rede local
eth1 - gvt
eth2 - virtua
eth3 - ajato

Configurei as tabelas de roteamento conforme o script e funciona perfeitamente para eu poder desviar o tráfego das portas 25, 110, 143 para o virtua e 20 e 21 para o ajato.

Mas quando eu peço para determinado host (192.168.0.22/32) sair pelo link2 (virtua) não acontece nada.

Eis a regra que estou usando:

iptables -t mangle -I PREROUTING -i eth0 -s 192.168.0.22/32 -j MARK --set-mark 3

Segue os meus MARKS:

mark 1 GVT
mark 2 VIRTUA
mark 3 AJATO

OBS. Estou usndo o Debian Etch com o kernel 2.6 SMP

Desde já agradeço a sua colaboração e de quem mais puder me ajudar.

abs,

Juno

[42] Comentário enviado por diegonsf em 19/06/2008 - 14:23h

?comentario=Ola.... muito bom o seu artigo... so tenho uma duvida... quando eu realizo esse balanciamento de carga... de que forma eu posso fazer o controle de banda? pois quando eu aplico essas regra meu controle de banda fica maluco... so consigo controla o download mais o upload não controlo mais... vc teria alguma ideia sobre isso?

[43] Comentário enviado por rdopke em 27/07/2008 - 14:31h

Gostei do seu artigo. Tenho uma duvida. No caso do adsl mudar o ip como ficam as regras de roteamento ? Estou usando o modem adsl como bridge e o slack via ppoe na eth2 recebe o endererço ip da GVT.

[44] Comentário enviado por sleck_sc em 14/08/2008 - 15:45h

Ola pessoal, primeiramente parabéns pelo sctipt Fabricio, apliquei aqui e esta funcionando bela no trafego de saída, mas estou com um problema e gostaria de saber se alguem pode me ajudar, tenho 2 links, eth0 e eth1, na eth2 esta a minha rede local, na minha rede interna tem um srv Wts na porta 3389, gostaria liberar o acesso a esta porta nos dois links de acesso, quando alguem precisar acessar o wts poderá entrar por qualquer um dois 2 links, hoje não consigo fazer isso , apenas entra por um link e pramim seria fundamental este recurso!

desde já fico grato pela atenção

grande abraço


[45] Comentário enviado por srf em 04/06/2009 - 23:04h

Olá Fabricio, estou com um problema... +/- parecido com o que o pessoal da lista passou...
Tenho dois links, um para navegação ou para serviços web...

Segue meu script baseado no q vc passou:

IF_LAN='eth0'
IF_ADSL='eth1'
IF_LINK='eth2'
GW_ADSL='10.0.0.5'
GW_LINK='187.4.253.5'
iptables -t nat -A POSTROUTING -o $IF_ADSL -j MASQUERADE
iptables -t nat -A POSTROUTING -o $IF_LINK -j MASQUERADE

iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

iptables -t mangle -A PREROUTING -i $IF_LAN -p tcp --dport 80 -j MARK --set-mark 2
iptables -t mangle -A PREROUTING -i $IF_LAN -p tcp --dport 443 -j MARK --set-mark 2
iptables -t mangle -A PREROUTING -i $IF_LAN -p tcp --dport 53 -j MARK --set-mark 3
iptables -t mangle -A PREROUTING -i $IF_LAN -p tcp --dport 25 -j MARK --set-mark 3
iptables -t mangle -A PREROUTING -i $IF_LAN -p tcp --dport 110 -j MARK --set-mark 3
iptables -t mangle -A PREROUTING -i $IF_LAN -p tcp --dport 4321 -j MARK --set-mark 3

iptables -t mangle -A OUTPUT -p tcp --dport 80 -j MARK --set-mark 2
iptables -t mangle -A OUTPUT -p tcp --dport 443 -j MARK --set-mark 2
iptables -t mangle -A OUTPUT -p tcp --dport 53 -j MARK --set-mark 3
iptables -t mangle -A OUTPUT -p tcp --dport 25 -j MARK --set-mark 3
iptables -t mangle -A OUTPUT -p tcp --dport 110 -j MARK --set-mark 3
iptables -t mangle -A OUTPUT -p tcp --dport 4321 -j MARK --set-mark 3

ip rule add fwmark 2 table 20 prio 20
ip rule add fwmark 3 table 21 prio 20

ip route add default via $GW_ADSL dev $IF_ADSL table 20
ip route add default via $GW_LINK dev $IF_LINK table 21

ip route flush cache

iptables -I FORWARD -s 192.168.0.100 -j ACCEPT
iptables -t nat -A PREROUTING -s 192.168.0.100 -p tcp --dport 80 -j ACCEPT

Se alterar o default route para 10.0.0.5 aí navega e td mais... mas não consigo acessar o Servidor de fora via ssh porta 4321
Se alterar o default route para 187.4.253.5 aí consigo acessar de fora, mas não navega...

Acredito que a marcação de pacotes não esteja funcionando de acordo...
Tens alguma idéia do que devo verificar...

Qualquer dica é bem vinda...

[46] Comentário enviado por halleybr em 05/06/2009 - 12:12h

Fala amigo beleza?
Rapaz, parabens pelo artigo me adiantou e muito, porém não funcionou da forma esperada... poderia me dar um help?

Vamos lá...

Temos 2 links agora:

1 Embratel ----> Vlan 192.168.0.0/16 irá acessar por aqui...

2 Mundivox ----> Vlan 192.168.211.0/26 irá acessar por aqui...

Só que, configurei como está no seu script e muito bem explicado mas não vai de forma alguma.... eu vou trafegar ele só me joga pelo default gateway que no caso é a MUNDIVOX...

Segue o meu route -n

[root@firewall ~]# route -n
Tabela de Roteamento IP do Kernel
Destino Roteador MáscaraGen. Opções Métrica Ref Uso Iface
201.73.46.55 0.0.0.0 255.255.255.240 U 0 0 0 eth1 ---------------> ebt
10.10.10.0 0.0.0.0 255.255.255.224 U 0 0 0 eth0 -----------------> local
200.196.54.44 0.0.0.0 255.255.255.224 U 0 0 0 eth2 ------------> mundivox
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth2
192.168.0.0 10.10.10.5 255.255.0.0 UG 0 0 0 eth0 ------------------> local
0.0.0.0 200.196.54.33 0.0.0.0 UG 0 0 0 eth2 ---------------------------------------> aqui q ta saindo....
[root@firewall ~]#

Saberia me dizer como resolver isso amigo? Obrigadao mesmo e parabens


[47] Comentário enviado por fabricioguzzy em 06/06/2009 - 10:53h

Resposta ao amigo SRF:
Amigo,
Vamos lá... Estou vendo que um dos seus Links não sofre NAT, que é o: 187.4.253.5 - tudo bem.
Já o outro Link: ADSL 10.0.0.5 usa um IP frio, ou seja, o IP quente com certeza está no seu roteador.
Você precisa de uma regra de NAT no Roteador, fazendo forward pra dentro da rede, no caso para a máquina que vc quer acessar. (ex: O próprio Firewall, o que acho péssimo, pois não se deve liberar acesso remoto externo, mesmo que por SSH, para o firewall.)
No seu caso, o pacote nem está chegando no firewall, está morrendo no roteador...
Porque o outro Link funciona? Porque vc não tem NAT nele. O pacote chega diretamente na interface do Firewall.. Uma forma de vc tirar a dúvida é capturando pacotes direto na máquina com o comando TCPDUMP... Faça o teste, mas pelo que vejo, é isso mesmo...

qq coisa me escreve.
Grande Abraço!

Fabrício .

[48] Comentário enviado por fabricioguzzy em 06/06/2009 - 10:55h

HalleyBR.
Cola o seu script pra gente dar uma olhada...
Se quiser, mude os IP´s para Ip´s ficticios Ok!?

Grande Abraço!

Fabrício.

[49] Comentário enviado por halleybr em 07/06/2009 - 10:55h

Fala Fabricio, os meus ips estão alterados... pode ficar tranquilo rsrs...

Seguinte o meu scritp está assim, o que queremos basicamente, quem estiver na Vlan 192.168.211.0/24 sai pelo link1(mundivox) e quem estiver na 192.168.0.0/16 sai pela link2 (Embratel) só que não vai... sempre sai pelo default gateway que é da mundivox...

IF_LAN='eth0'
IF_LINK1='eth2'
IF_LINK2='eth1'
GW_LINK1='200.196.54.55'
GW_LINK2='201.73.46.55'
iptables -t nat -A POSTROUTING -o $IF_LINK1 -j MASQUERADE
iptables -t nat -A POSTROUTING -o $IF_LINK2 -j MASQUERADE
ip rule add from 192.168.211.0/24 table 20
ip rule add from 192.168.0.0/16 table 21
ip route add default via $GW_LINK1 dev $IF_LINK1 table 20
ip route add default via $GW_LINK2 dev $IF_LINK2 table 21

Aí fica o meu route -n

[root@firewall Desktop]# route -n
Tabela de Roteamento IP do Kernel
Destino Roteador MáscaraGen. Opções Métrica Ref Uso Iface
201.73.46.11 0.0.0.0 255.255.255.240 U 0 0 0 eth1
10.10.10.0 0.0.0.0 255.255.255.224 U 0 0 0 eth0
200.196.54.11 0.0.0.0 255.255.255.224 U 0 0 0 eth2
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth2
192.168.0.0 10.10.10.5 255.255.0.0 UG 0 0 0 eth0
0.0.0.0 200.196.54.12 0.0.0.0 UG 0 0 0 eth2



Valeu amigo... se puder me ajudar, estou precisando disso pra caramba, só falta isso pra gente colocar em teste os links.. obrigadão amigo!!!


[50] Comentário enviado por riroxi em 14/07/2009 - 15:00h

Em primeiro lugar parabéns pelo seu artigo.

Gostaria de tirar uma dúvida.

Para que seu script funcione é necessário criar a tabela no /etc/iproute2/rt_tables?

No meu caso, gostaria de fazer o seguinte:

ETH0 - > LAN
ETH1 -> VELOX1
ETH2 -> VELOX2
EHT3 -> RADIO

Ip x vai para VELOX1
Ip y vai para VELOX2
Ip z vai para RADIO


Isso inclue todas as portas de origens e destinos.

Bastaria apenas mudar a linha que vc falou no fim?

ip route add default via $GW_VELOX1 dev $IF_VELOX1 table 20
ip route add default via $GW_VELOX2 dev $IF_VELOX2 table 21
ip route add default via $GW_RADIO dev $IF_RADIO table 22

Desde já agradeço a ajuda!!!

[51] Comentário enviado por oneide em 06/08/2009 - 09:53h

Bom dia Fabrício e demais amigos da lista, tenho um servidor mais ou menos nos mesmos moldes mas com a diferença que é o uso de "nexthop" para fazer load balance entre os links. E uma outra diferença é que eu tenho apenas uma placa de rede de saída, e uso alias na placa para que ela possa ter comunicação com várias redes dos gateways.
O que me ocorre é que os download param na metade, ou até antes... Não consigo que os clientes baixem arquivos sem o auxílio de um gerenciador de download. Pelo que vi, antes do final do download, ele entra em outro nexthop e troca a conexão para outro link e então o download cai.

Alguém tem experiência com isso??? Alguma dica do que pode estar acontecendo???

Segue abaixo o meu script reduzido para não ficar muito grande na lista:

echo -e "######## Setando variaveis \n"
# INTERFACES DE REDE
INT_EXT1=eth3
INT_EXT2=eth2
INT_INT=eth4

# LINKS DE INTERNET
GW_LINK1=200.230.183.129 # EMBRATEL
GW_LINK2=10.1.1.1 # ADSL 1
GW_LINK3=172.10.1.1 # ADSL 2
GW_LINK4=192.168.254.1 # ADSL 3
GW_LINK5=192.168.253.1 # ADSL 4
GW_LINK6=192.168.252.1 # ADSL 5

# FAZ SNAT NAS PLACAS DE REDE DE SAIDA
iptables -t nat -I POSTROUTING -o eth2 -j MASQUERADE
iptables -t nat -I POSTROUTING -o eth3 -j MASQUERADE

# CRIA TABELA DE ROTEAMENTO PARA BALANCEAMENTO
ip route add default table 210 nexthop dev $INT_EXT2 via $GW_LINK2 weight 1 nexthop dev $INT_EXT2 via $GW_LINK3 weight 1 weight 1 nexthop dev $INT_EXT2 via $GW_LINK6 weight 1


# MARCA PACOTES GERADOS PELO FIREWALL
# SE NAO MARCADOS SAEM PELO GATEWAY PADRAO DO FIREWALL
# MUDAR O GATEWAY PADRAO VERIFICAR PROBLEMAS EM LINKS DE INTERNET
iptables -t mangle -I OUTPUT -p tcp --dport 80 -j MARK --set-mark 10

# MARCA OS PACOTES PARA ROTEAMENTO EM CASOS ESPECIFICOS DA REDE INTERNA
iptables -t mangle -I PREROUTING -i $INT_INT -p tcp --dport 80 -j MARK --set-mark 2

# CRIANDO REGRAS PARA REDIRECIONAMENTO PARA AS TABELAS
# BALANCEAMENTO DE LINK ADSLs
ip rule add fwmark 10 table 210 prio 208


echo -e "######## Setando default gateway \n"
route add default gw $GW_LINK1

echo -e "######## Ativa roteamento de pacotes \n"
echo 1 > /proc/sys/net/ipv4/ip_forward

# REGRAS DE FILTRO DE PACOTES - FIREWALL

# PREROUTING
iptables -t nat -I PREROUTING -i eth4 -p tcp --dport 80 -j REDIRECT --to-port 3128




Agradeço desde já qualquer dica!

[52] Comentário enviado por fabricioguzzy em 06/08/2009 - 21:31h

Riroxi,
Vc olhou o arquivo e não estava lá????

Abraços...

[53] Comentário enviado por fabricioguzzy em 06/08/2009 - 21:33h

Oneide,
Quando o server encontra uma métrica menor, ele troca... isso derruba sua conexão...
isso ai funciona como um "fail over" claro que com suas devidas resalvas....
Nunca fiz assim não...
Abraços

Fabricio.

[54] Comentário enviado por nox6000 em 30/08/2009 - 17:52h

Ola fabricioguzzy,
Primeiramente: parabéns pelo Artigo de excelente qualidade me deu uma luz.

Eu não to conseguindo realizar o balanceamento entre dois links de internet

Minha situação:

Tenho um modem do velox 1MB de IP: 192.168.254.254
Tenho outro modem do velox 1MB de IP: 192.168.1.1

Meus modens não tem ip fixo eles recebem ip a cada nova conexão.

onde:

O primeiro modem é ligado na placa eth0 de ip: 192.168.254.1
O segundo modem é ligado na placa eth1 de ip: 192.168.254.2
e a terceira placa eth2 deve liberar o sinal de internet para a rede ela tem o ip 192.168.254.3

Bem o que eu desejo e receber os dois link's em suas repectivas placas de rede e libera-lo pela eth2 de ip 192.168.254.3


Utilizo o ubuntu desktop 9.04 tem como me passar o que devo fazer para solucionar minha situação especifica?

Eu não quero muita coisa dizer que tal maquina vai navegar por um link e que outra vai navegar por outra ou mesmo que stp e http vai ser por um link e smtp e etc vai ser por outro. Não preciso de nada disso só desejo ter os dois links funcionando e se caso um caia todos os meus computadores continue navegando normalmente.

Desde já muito Obrigado!

[55] Comentário enviado por pedroadf em 14/10/2009 - 18:12h

fabricio, show de bola o artigo....parabens....acho q vc iluminou mtas mentes desde de 2007.....depois de varias buscas e tentativas frustradas achei um q realmente pode resolver meu problema....

se puder me dar uma luz eh o seguinte:

meu cenario eh simples

eu tenho: 1 frame e um adsl ligado a um fw...


meu firewall tem 3 interfaces: eth0-->frame eth1-->adsl e eth2--> rede local


oque acontece eh o seginte hj meu trafego todo eh pelo frame(eth0) minha adsl eh boa e ta parada....

eu qeria que o pessoal da minha empresa navega-se pelo adsl, mas o gateway default do firewall eh meu frame...
ai a minha ideia eh, uma parte da minha rede (servidores e ips dos diretores) navegarem pelo frame e o restante sair pelo adsl


vc poderia me dizer como eu conseguiria fazer essa façanha??mas sem usar balanceamento?? se possivel no max eh o pessoal da adsl quando cair o link jogar para o frame?.


ficou show o artigo so n consegui visualizar essa ideia de determinado ips por exemplo: 192.168.0.3 sair pelo frame e o 192.168.0.10 sair pelo adsl
gratooo
aguado um apoio seu

[56] Comentário enviado por fabricioguzzy em 14/10/2009 - 21:57h

PedroAF,
Isso é Simples.. Basta vc fazer roteamento pela origem..
O artigo tem exemplos de como fazer isso... Lá no final dele...
Se preferir ler algo a respeito de Roteamento pela origem apenas, estou postando abaixo dois links de artigos que só falam disso. Os artigos são de outros colegas, não são meus, mas lendo, tenho certeza que funcionam pra vc.
Veja:

http://www.rnp.br/newsgen/9809/rot-linux.html

e

http://www.rnp.br/newsgen/0201/roteamento_linux.html#ng-6

Agora é só implementar...
Abraços

Fabrício.

[57] Comentário enviado por pedroadf em 15/10/2009 - 09:27h

opa...fabricio bom dia,
obrigado pelo apoiooo ja estou conferindo esses links...
gratooo pela ajuda

[58] Comentário enviado por pedroadf em 20/10/2009 - 15:35h

Fabricio td joia, cara tenho que te agradecer algo simples e funcionou coonforme eu pretendia, fiz um teste onde: parte da minha rede sai pelo frame e e o restante pelo adsl

funcionou legal, agora eu precisava resolver o seguinte ja explorando sua boa vontade, o ADSL como de custume pode falhar, ai eu precisava que o pessoal navega-se pelo frame, oque eu poderia fazer? tem alguma ideia..algo q solucionava.. so precisava disso
que o ADSL falhar vai pro frame e se possivel vice versa....mas se nao somente a primeira hipotese pq o frame so ficou uma vez fora do ar motivo (cortaram o cabo da fibra) hehehe...abracos

mas ja agradeco a ajuda
vlws

[59] Comentário enviado por brunovictor86 em 22/01/2010 - 17:11h

pessoal nao estou conseguindo receber conexao no link2, o meu server esta como o SRF, se mudo o default gatway pra eth1 ai consigo ..
iptables -t nat -F
iptables -t nat -X
iptables -F
iptables -X


IF_LAN='eth2'
IF_LINK1='eth0'
IF_LINK2='eth1'
GW_LINK1='10.1.1.1'
GW_LINK2='201.223.203.1'
iptables -t nat -A POSTROUTING -o $IF_LINK1 -j MASQUERADE
iptables -t nat -A POSTROUTING -o $IF_LINK2 -j MASQUERADE
iptables -t mangle -A PREROUTING -i $IF_LAN -p tcp --dport 80 -j MARK --set-mark 2
iptables -t mangle -A PREROUTING -i $IF_LAN -p tcp --dport 443 -j MARK --set-mark 2
iptables -t mangle -A PREROUTING -i $IF_LAN -p tcp --dport 3128 -j MARK --set-mark 2
iptables -t mangle -A PREROUTING -i $IF_LAN -p tcp --dport 22 -j MARK --set-mark 3

iptables -t mangle -A OUTPUT -p tcp --dport 80 -j MARK --set-mark 2
iptables -t mangle -A OUTPUT -p tcp --dport 443 -j MARK --set-mark 2
iptables -t mangle -A OUTPUT -p tcp --dport 3128 -j MARK --set-mark 2
iptables -t mangle -A OUTPUT -p tcp --dport 22 -j MARK --set-mark 3
ip rule add fwmark 2 table 2 prio 2
ip rule add fwmark 3 table 3 prio 3
#ip rule add from 192.160.1.0/24 table 2
ip route add default via $GW_LINK1 dev $IF_LINK1 table 2
ip route add default via $GW_LINK2 dev $IF_LINK2 table 3
ip route flush cache

quando o default gateway esta na rede 10.1.1.1 eu nao consigo acessar de fora o ip '201.223.203.1' pela porta 22...
mas consigo sai pelo '201.223.203.1' na porta 22 pra fora
se alguem puder me ajudar ..

[60] Comentário enviado por mcs_22 em 02/03/2010 - 13:46h

Caro Fabricio,

em primeiro lugar parabens pelo artigo, me ajudou muito aki na empresa, porem estou com um cenario e com dúvidas.

Tenho um servidor linux

placa Eth0 conectado rede interna da empresa.
placa Eth1 conectado a uma de internet para acessos externos.

porem preciso que meu servidor acesse as duas redes, o acesso aos hosts da rede interna funciona normalmente porem preciso de roteamento para o acesso dos computadores da matriz, logo preciso de um GW para isso. Porem para que meu servidor tenha acesso a internet, para os serviços que utilizo preciso tbem do GW2 que esta na interface eth1.

Duvida,

sei que o servidor se perde com dois default gw.

preciso que meu servidor gerencie essas rotas para que o mesmo consiga acessar a rede interna e ter acesso a internet pela outra interface

por exemplo:

qd ping 10.1.1.21 que esta na matriz ele redirecione para eth0 df gw interno.

ping www.uol.com.br ou qualquer serviço que necessite da internet para eth1 df gw externo.

desde já obrigado pela ajuda.

[61] Comentário enviado por leandroamin em 05/03/2010 - 13:32h

Uma dúvida, vc deixa o default gateway setado na máquina? tipo route add default gw 200.70.0.1 por exemplo?

[62] Comentário enviado por demattos em 27/10/2010 - 18:20h

Boa tarde amigo, tenho um dilema para resolver e o seguinte tenho um link com a embratel e uso um roteador cisco 2801 e gostaria e subistituir este roteador por uma maquina linux, vc poderia me auxiliar ou me orinetar como fazer isto.



obrigado, conto com sua ajuda

[63] Comentário enviado por caradepastel em 15/11/2010 - 17:26h

cara muito obrigado por ensinar a gente, tudo de bom um abraço.

[64] Comentário enviado por willian.barker em 15/02/2011 - 10:11h

Porque quando eu uso (ip rule add from 192.168.1.1 table "tabela") a conexão e o ping ficam lentos?

Já quando eu uso marcação a conexão é perfeita.

Dê uma olhada nos testes.

Dê uma olhada nos dois testes que fiz com ping o primeiro teste é com marcação da porta 80 e o segundo teste é por ip rule add from ipestacao table tabela.

O problema é que quando eu coloco regra por marcação eu cosigo navegar beleza pela estação, mas quando eu coloco a regra acima a conexão fica lenta.

1º teste:
****************************************************************************
PING google.com (64.233.163.104) 56(84) bytes of data.
64 bytes from bs-in-f104.1e100.net (64.233.163.104): icmp_req=1 ttl=250 time=165 ms
64 bytes from bs-in-f104.1e100.net (64.233.163.104): icmp_req=2 ttl=250 time=166 ms
64 bytes from bs-in-f104.1e100.net (64.233.163.104): icmp_req=3 ttl=250 time=173 ms
64 bytes from bs-in-f104.1e100.net (64.233.163.104): icmp_req=4 ttl=250 time=175 ms
64 bytes from bs-in-f104.1e100.net (64.233.163.104): icmp_req=5 ttl=250 time=196 ms
64 bytes from bs-in-f104.1e100.net (64.233.163.104): icmp_req=6 ttl=250 time=182 ms

--- google.com ping statistics ---
6 packets transmitted, 6 received, 0% packet loss, time 26121ms
rtt min/avg/max/mdev = 165.395/176.541/196.477/10.622 ms
****************************************************************************

2º teste:
****************************************************************************
PING google.com (64.233.163.104) 56(84) bytes of data.
64 bytes from bs-in-f104.1e100.net (64.233.163.104): icmp_req=1 ttl=53 time=211 ms
64 bytes from bs-in-f104.1e100.net (64.233.163.104): icmp_req=2 ttl=53 time=63.3 ms
64 bytes from bs-in-f104.1e100.net (64.233.163.104): icmp_req=3 ttl=53 time=55.4 ms
64 bytes from bs-in-f104.1e100.net (64.233.163.104): icmp_req=4 ttl=53 time=57.4 ms
64 bytes from bs-in-f104.1e100.net (64.233.163.104): icmp_req=5 ttl=53 time=56.1 ms
64 bytes from bs-in-f104.1e100.net (64.233.163.104): icmp_req=6 ttl=53 time=57.5 ms
64 bytes from bs-in-f104.1e100.net (64.233.163.104): icmp_req=7 ttl=53 time=328 ms
64 bytes from bs-in-f104.1e100.net (64.233.163.104): icmp_req=8 ttl=53 time=57.4 ms
64 bytes from bs-in-f104.1e100.net (64.233.163.104): icmp_req=9 ttl=53 time=56.6 ms
64 bytes from bs-in-f104.1e100.net (64.233.163.104): icmp_req=10 ttl=53 time=71.8 ms
64 bytes from bs-in-f104.1e100.net (64.233.163.104): icmp_req=11 ttl=53 time=61.0 ms
64 bytes from bs-in-f104.1e100.net (64.233.163.104): icmp_req=12 ttl=53 time=56.4 ms
64 bytes from bs-in-f104.1e100.net (64.233.163.104): icmp_req=13 ttl=53 time=336 ms

--- google.com ping statistics ---
13 packets transmitted, 13 received, 0% packet loss, time 12036ms
rtt min/avg/max/mdev = 55.451/113.073/336.988/101.982 ms
****************************************************************************

Então observamos que o segundo teste a resposta do ping é mais rápida e consequentemente a navegação.

Se puder me dar uma dica do que preciso fazer, obrigado.

Obrigado.

[65] Comentário enviado por lpossamai em 06/03/2011 - 22:50h

Boa noite fabricioguzzy tudo bem?

estou usando seu script..
pode me orientar numa coisa?


Tenho assim:

$IPTABLES -t mangle -A PREROUTING -i NET_INT_INT0 -p tcp --dport 25 -j MARK --set-mark 2
$IPTABLES -t mangle -A PREROUTING -i NET_INT_INT0 -p tcp --dport 110 -j MARK --set-mark 2
$IPTABLES -t mangle -A OUTPUT -p tcp --dport 25 -j MARK --set-mark 2
$IPTABLES -t mangle -A OUTPUT -p tcp --dport 110 -j MARK --set-mark 2

$IP rule add fwmark 2 table 20 prio 20
$IP route add default via $NET_EXT_GW1 dev $NET_EXT_INT1 table 20

ok.
Isto faz com que: tudo que vier da rede interna com destino às portas 25 e 110 saia pelo link1

Preciso que tudo que chegue no servidor, ( externamente falando ) na porta 3389 vá pelo link2.

Como proceder?

Obrigado

[66] Comentário enviado por rafael_theo em 20/04/2011 - 08:41h

Bom Dia Fabricio!

Gostaria de uma força se puder ajudar.

Aqui na empresa estou usando o mesmo metodo do seu tutorial, um link direcionado para uso da internet e o outro para os e-mails.

Porem, quando executo o script me aparece esta mensagem:

RTNETLINK answers: File exists
RTNETLINK answers: File exists

O que pode ser?

Desde já Agradeço

[67] Comentário enviado por joorlando3 em 18/08/2011 - 13:51h

Bom dia!

Alguém conseguiu configurar o load Balance com o squid no mesmo servidor. Segui o guia e deu tudo certo, porém se habilito o squid a navegação para de funcionar.

O que pode ser ser? Tenho que colocar a linha que direciona a conexão para o squid (abaixo) antes do load balance
$IPTABLES -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128

Desde já agradeço.

Depois de um certo tempo pesquisando, consegui fazer o squid funcionar usando o PREROUTING e POSTROUNTING.

Os seguintes links auxiliam muito a entender esse problema:
http://www.vivaolinux.com.br/artigo/Balanceamento-de-links-+-redundancia-+-acesso-remoto-+-sites-de-...

http://blognu.wordpress.com/2010/06/15/controlando-2-links-de-internet-roteados-em-um-gateway-linux-...

http://www.vivaolinux.com.br/artigo/Controlando-2-links-de-internet-%28roteados%29-em-um-gateway-Lin...

http://www.vivaolinux.com.br/artigo/Configurando-2-%28dois%29-links-ADSL-no-mesmo-servidor

[68] Comentário enviado por rwsampaio em 10/08/2012 - 23:29h

Fabrício,

Preciso balancear dois links de 4Mb do mesmo backbone, onde minha rede interna é toda com IP Dinâmico, mas gostaria que os clientes ao acessarem fossem divididos. para que possa usar os dois link´s o mais homogeneos possíveis.

Pode me ajudar?

Abs

[69] Comentário enviado por thyagobrasileiro em 21/10/2012 - 14:30h

Adcionados ao meu favoritos.

[70] Comentário enviado por genaldo em 18/01/2013 - 00:55h

Parabens pelo trabalho de vcs aqui viu. isso he uma mao na roda e tudo de graça , he preciso agradecer realmente. Vcs sao demais. continuem nos ajudando., muito obrigado

[71] Comentário enviado por sergio_sousa em 01/02/2014 - 00:28h

Muito bom sua dica nota 10 parabéns.
Mas Fabrício usei seu script no meu firewall e acontece que também possuo 2 links um para internet e outro para acessar o sistema, só que, quando digito qualquer site ele navega normalmente, então estar saindo pelo link1, mas quando vou acessar o sistema dar a mensagem de como o meu proxy não deixasse sair, aparece a tela de como se fosse acessar o sistema depois cai. E ai como posso resolver isso. Estou por um fio pois pra semana vai ser aberta a empresa.

[72] Comentário enviado por fabricioguzzy em 02/02/2014 - 11:42h

Sergio Souza,
Você está usando Proxy? Se SIM, veja o comentário número 67] do joorlando3 acima.
Se NÃO, com toda certeza você esqueceu de alguma regra PREROUTING para as portas 80 e 443 (hhtp e https)
Cuidado, alguns sistemas, mesmo sendo Web Based (feitos para serem acessados via browser) usam portas não convencionais como as citadas acima (80 e 443). Verifique se não é o seu caso.
Se for, adicione uma regra para a porta que está faltando.
Boa Sorte ai!
Abraço
Fabricio.

[73] Comentário enviado por frodopuc em 06/04/2015 - 10:32h


Olá amigo, seguinte, ve se pode me ajudar (sou novato na parte de linux, fiquei um tempo sem trabalhar com linux e voltei agora, passando pelo seguinte problema).
Temos 3 ETH, eth0 lan, eth1 link1, eth2 link2.
Quero dizer que somente um computador vai sair pelo link2, por que? Por que ele faz acesso a página do banco do Bradesco na parte juridica e fica caindo pois fica trocando de IP, alternando o link de saida. O site nao aceita isso e derruba o usuário.
Mas somente um computador vai fazer uso desse esquema. O que eu posso fazer? =/

[74] Comentário enviado por schüler em 22/05/2015 - 13:36h


Olá... possuo no meu servidor 3 links (3 interfaces) eth0 = link1, eth1=link2 e eth2=lan... Quero fazer com que determinados sites sejam redirecionados para o link1(eth0) e o resto para o link2(eth1)...
ex, se um usuário da minha rede interna acessar o site www.vivaolinux.com.br o firewall vai jogar o acesso para o link1(eth0), mas se ele acessar o www.google.com.br o firewall vai jogar o acesso para o link2(eth1)...
você poderia me ajudar????

[75] Comentário enviado por hugolinux em 11/01/2017 - 11:16h

Fabrício, ótimo artigo!

Poderia me ajudar numa questão? Hoje tenho um rede da seguinte da seguinte forma:

ETH0: Link Internet 1
ETH1: Link internet 2
ETH2: REdeServidores (DMZ)
ETH3: RedeInterna

Qual seria minha implementação:

Fazer com que meu proxy que tem o ip 172.29.0.15 (rede servidores dmz), que autentica no meu ad 10.x.y.z (rede interna) saia pelo Link de Internet 2 (ETH1)

Quando faço a regra o mesmo sai normalmente, mas deixa de enxergar o autenticador e da rede interna não conseguímos mais acessar o ip da rede servidores.

Resumindo - Regras feitas
172.29.0.15 -> Link de internet 2 - OK
172.29.0.15 -> autenticador 10.x.y.z - NOOK
Rede Interna -> 172.29.0.15 - NOOK

Espero que tenha sido claro e fico grato pela atenção

Fabiano Hugo

[76] Comentário enviado por fabricioguzzy em 11/01/2017 - 21:56h

Olá Fabiano,
Já faz alguns anos que montei estes scripts, mas vou tentar te ajudar.

Pela descrição do seu problema me parece que está faltando rota no seu servidor/Firewall.
Faça um teste usando o comando traceroute e veja pra onde é que o firewall está mandando seus pacotes que deveriam ir para a rede Interna...Caso saiba mexer com o tcpdump, tente monitorar os pacotes usando ele.

Abraço
Fabricio.

[77] Comentário enviado por eragoke em 05/06/2017 - 10:58h

Boa tarde preciso de uma ajuda, tenho que implementar mais um link de internet em um servidor que já tem firewall e proxy, só que preciso fazer com que as maquinas usem apenas a internet mas continuem na mesma rede com acesso ao sistema e ao servidor de arquivos.

[78] Comentário enviado por carlos_julianoti em 23/06/2020 - 14:25h

Esses dias houve essa necessidade aqui na empressa que trabalho de usar 2 links de internet passando por um unico firewall, esse post foi uma mar de agua pra resolver esse problema. vlw amigo, continue compartilhando conhecimento.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts