Neste artigo mostrarei como fiz para dividir o tráfego de uma empresa entre dois links ADSL ligados em um mesmo servidor utilizando iptables e iptoute2.
Neste artigo mostrarei como fiz para dividir o tráfego de
uma empresa em dois links ADSL ligados em um mesmo servidor
utilizando iptables e iproute2. Como no meu caso
o grande problema era o acesso aos e-mails que ficam em um
provedor externo, dividi o tráfego de maneira que acessos POP
e SMTP saíssem por um dos links e o restante dos serviços por
outro. Nada impede que você personalize o script abaixo de
maneira que atenda às suas necessidades.
A configuração do meu servidor e dos meus links é a seguinte:
Ambiente testado:
Distribuição: Fedora Core 2
2 links ADSL de 1,5 Mb
A máquina possui 3 interfaces de rede:
Intranet: eth0 - 192.168.100.0/24
ADSL1: eth1 - 10.0.0.1/24 - Gateway: 10.0.0.138
ADSL2: eth2 - 10.1.1.2/24 - Gateway: 10.1.1.1
Neste exemplo, os serviços de e-mail passam pelo ADSL2 e os
demais serviços pelo ADSL1. O gateway padrão da máquina é o
10.0.0.138 (do ADSL1). Não há configuração de gateway específico
por interface. Segue o script que efetua a divisão dos links:
#!/bin/sh
# Interface da Intranet
IF_LAN='eth0'
# Interfaces ADSL
IF_ADSL1='eth1'
IF_ADSL2='eth2'
# Gateways dos ADSL (IPs dos roteadores)
GW_ADSL1='10.0.0.138'
GW_ADSL2='10.1.1.1'
# Mascarar saídas para os dois ADSL
------------------------------------------------------------
iptables -t nat -A POSTROUTING -o $IF_ADSL1 -j MASQUERADE
iptables -t nat -A POSTROUTING -o $IF_ADSL2 -j MASQUERADE
# Marca com "2" os pacotes que saem pelas portas 25 (SMTP) e 110 (POP)
------------------------------------------------------------
iptables -t mangle -A PREROUTING -i $IF_LAN -p tcp --dport 25 -j MARK --set-mark 2
iptables -t mangle -A PREROUTING -i $IF_LAN -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
# Joga serviços de e-mail (pacotes marcados com 2) para o ADSL2
------------------------------------------------------------
ip rule add fwmark 2 table 20 prio 20
ip route add default via $GW_ADSL2 dev $IF_ADSL2 table 20
# Atualiza tabela de roteamento
# ------------------------------------------------------------
ip route flush cache
[3] Comentário enviado por gustavo_marcon em 07/08/2004 - 17:22h
Excelente artigo cara... Mas fiquei com uma dúvida, se o modem não for roteador, e a autenticação PPPOE precisar ser feita no servidor como fica? Tem como fazer as duas autenticações PPPOE no mesmo server?
[4] Comentário enviado por rjacomel em 08/08/2004 - 12:33h
Sinceramente não sei se é possível duas autenticações PPPoE no mesmo servidor... Mas caso isto seja possível, o princípio do artigo continua o mesmo...
[5] Comentário enviado por bygga em 08/10/2004 - 10:27h
Cara muito bom o teu artigo, mas e se eu quiser que passe todo o trafego pelos dois não e-mails por um e o resto pelo outro é só não colocar as regras para os e-mails...
[6] Comentário enviado por rjacomel em 08/10/2004 - 11:24h
Desta maneira você teria que fazer um balanceamento dos links. Recomendo que você acesse o link abaixo, que explica como fazer este balanceamento automático.
[8] Comentário enviado por butkam em 08/03/2005 - 12:44h
será que tem como eu colocar.. ao invés de porta.. colocar por ip???
tipo assim... alguns ips saem pelo link adsl 1 e outros saem pelo link adsl 2.... criando 2 arquivos com os ips... aqui é tudo estático.
[10] Comentário enviado por marcosfnet em 07/11/2005 - 11:03h
Amigos, já tenho um Link ADSL 800kbps num servidor Conectiva 10 servindo como gateway de uma rede com 30 computadores, só que está lento o acesso, eu queria colocar mais 01 Link de 800kbps no mesmo servidor, ai o link ia ficar 1.6mbps, ai resolveria meu problema, será que tem como vocês me passarem as coordenadas para fazer isso. Tipo assim:
eth0 = 192.168.1.1 - Entrada ADSL 01
eth1 = 192.168.1.2 - Entrada ADSL 02
eth2 = 192.168.0.1 - Gateway com link final de 1.6mbps
[11] Comentário enviado por lanna_cf em 09/02/2006 - 11:31h
Bom dia,
fiz o balanceamento e esta ok, mas estou tento problemas p/ acessar um servidor que esta atras do firewall pela porta 3389 (Terminal Services).
alguem sabe pq?
[15] Comentário enviado por fontebon em 07/12/2006 - 22:55h
Muito bom ...vou testar...
Uma pergunta: Posso marcar pacotes que vem pela porta 80 e mandar sair pelo meu melhor link e deixar o resto que e meio transparente para o usuario saindo pelo outro link?
Outra coisa preciso mecher nas configuracoes do iproute? tipo rt_tables?
Ou e so alterar os ips e rodar o seu script?
[16] Comentário enviado por rjacomel em 08/12/2006 - 09:27h
No meu script marco os pacotes SMTP (25/TCP) e POP3 (110/TCP) para que saiam pelo segundo link. Você pode fazer isto com HTTP, apenas marcando a porta 80/TCP.
[18] Comentário enviado por gzanatta00 em 04/04/2007 - 21:17h
amigo tenho um link de 1 mb que entra e roteia pela eth0, e a eth1 sai pra minha rede com ip 10.1.1.0, quero colocar um adsl pra ajudar na porta eth2, mas eu quero definir que o ip 10.1.1.50 navegue pelo link e o 10.1.1.60 navegue pelo adsl, como eu faco, se vc souber de um artigo me indique
[19] Comentário enviado por alphamax em 05/05/2008 - 12:07h
cara se eu quiser fazer esse esquema com apenas uma placa respondendo para 2 link te internet tipo:
imaginemos dois links indo para um switch; vai... um speedy e um virtua e apenas um cabo indo do swuitch para e eth0, a qual também responde para a interface "virtual" eth0:1
eth0 200.200.x.y (speedy)
e
eth0:1 200.200.y.x (virtua)
será que funcionaria?
pois em meu pc já não tem mais espaço para espetar PCI, digamos que é um caso bastante especial.
[20] Comentário enviado por NADALETO em 17/05/2008 - 18:09h
17 DE MAIO DE 2008
JAÚ SP
Necessito conetar 2 pcs, em média distância, usando em cada um um modem adsl e estes sejam ligados por um par de fios. A ligação também poderá ser feita via LP da companhia telefônica local.
[24] Comentário enviado por jeff.jno em 19/09/2009 - 00:54h
Parabéns pelo artigo,
Está bem claro e consiso. Acho que vai me ajudar bastante. Por acaso alguem saberia me dizer, se teria como eu marcar apenas um endereço interno para utilizar a "ADSL2" e o restante para utilizar a "ADSL1"?
[25] Comentário enviado por jokerman em 05/11/2009 - 12:53h
Caro Ricardo,
parabéns pelo artigo. Pra mim funcionou tudo ok no CentOS 5.2, EXCETO....o squid!
Na verdade, pelos testes que eu fiz observei que todo o direcionamento que eu faço, vale para as estações, mas não para o proprio servidor.
Como teste fiz o seguinte:
Criei uma regra para a porta 23, para que o meu telnet para fora, saisse pelo LINK2:
100.100.1.100, ETH2
Se eu vou na estaçao de trabalho da rede e abro um putty, faço o telnet normal e vejo pelo "w" que realmente eu "vim" do ip ligado
na ETH2. Ate aí tudo bem.
Se eu tento fazer um telnet estando logado no proprio servidor, ele simplesmente trava.
Ora, como a origem do squid é o proprio servidor está acontecendo com ele o mesmo travamento.
A minha pergunta seria a seguinte: como criar regras no iptables para determinar a mudança de trafego não só para o que vem das estações de trabalho , mas também para o que vem do proprio servidor?
(tentei utilizar o comando tcp_outgoing_address no squid.conf mas nao funcionou....)
[26] Comentário enviado por fernanda.falcon em 07/03/2011 - 10:13h
Bom Dia,
Estou com um problema... Fiz as configurações e qdo me conecto via terminal server ele entra pela eth2 e se conecta na estação, mas qdo ele muda de link para a eth1(onde está meu outro link) a conexão com o terminal services cai.Preciso descobrir uma maneira de mesmo o link alterando a conexão se identifica pela porta pela qual foi aberta.
Muito Obrigada.
[28] Comentário enviado por joaopaulobiesek em 31/01/2014 - 11:00h
Bom dia,
muito bom gostei muito so que eu queria, fazer algo parecido sera que poderia me ajudar?
rjacomel, e possivel colocar o servidor para indentificar que quando caio um link ele puxa o outro?
tenho 2 link um de 10mb e um de 2mb um embratel e outro velox. so que o velox cai muito ai quando o velox caise ele jogase o trafego da rede toda no embratel de 2mb e possivel ??