#  > Servidores >  > Servidores de Rede >  >  Balanceamento de carga entre links com iproute2 - mini-howto

## PEdroArthurJEdi

Como muitos tem dúvidas de como balancear o acesso a Internet por diversos links, resolvi escrever esse mini-howto para evitar a necessidade de novos post no fórum.

Vamos ao problema. Imaginemos um roteador rodando kernel GNU/Linux com as opções de roteamento avançado ativado. Este computador está conectado a N links dedicados. Desejamos balancear a carga das requisições entre esses N links. Sejam LIP0, LIP1, ... , LIPN os endereços IP atribuidos aos links, LIF0, LIF1, ... , LIFN as interfaces de rede, LNTW, LNTW1, ... , LNTWN as redes e LGW0, LGW1, ... , LGWN os gateways de cada link.

Primeiramente devemos criar N tabelas de roteamento, onde N é o número total de links que o gateway possui:echo 10 tb0 >> /etc/iproute2/rt_tables
echo 11 tb1 >> /etc/iproute2/rt_tables
...
echo XX tbN >> /etc/iproute2/rt_tablesFeito isso, devemos atribuir as redes dos links as suas respectivas tabelas de roteamento:ip route add LNTW0 dev LIF0 src LIP0 table tb0
ip route add to 0/0 via LGW0 table tb0

ip route add LNTW1 dev LIF1 src LIP1 table tb1
ip route add to 0/0 via LGW1 table tb1
...
ip route add LNTWN dev LIFN src LIPN table tbN
ip route add to 0/0 via LGWN table tbNdeve-se, também, incluir informações sobre a rede local:ip route add LOCALNET dev IFLOCALNET table tb0
ip route add LOCALNET dev IFLOCALNET table tb1
...
ip route add LOCALNET dev IFLOCALNET table tbNobs: todas as redes locais devem estar presentes em todas as tabelas!!!

Agora, devemos definir as rotas das redes através da tabela padrão:ip route add LNTW0 dev LIF0 src LIP0
ip route add LNTW1 dev LIF1 src LIP1
...
ip route add LNTWN dev LIFN src LIPNobs: se você está com seus link configurados através dos arquivos de configuração das distribuiçoes, a etapa anterior pode ser omitida. Basicamente se ao tentar inserir uma rota na tabela padrão, e a mesma já existir você receberá a seguinte mensagem:
RTNETLINK answers: File exists

Agora você adiciona regras que decidem por onde os pacotes de vem passar:ip rule add from LIP0 table tb0
ip rule add from LIP1 table tb1
...
ip rule add from LIPN table tbNPor ultimo, porém o não menos importante, na verdade escencial pois até agora não fizemos nada... Devemos definir o balanceamento de carga:ip route add to 0/0 nexthop via LGW0 dev LIF0 weight 1 nexthop via LGW1 dev LIF1 weight 1 ... nexthop via LGWN dev LIFN weight 1Note que o parâmetro weight pode ser explorado para atribuir maior prioridade de envio por um provedor. E você também pode (deve) atribuir um link padrão:ip route add to 0/0 via LGWPBem, pronto... Agora apenas algumas considerações...

O kernel mantém tabelas de roteamento estátcas, portanto, se N pessoas tentarem acessar o site Google por exemplo, todas as tentativas de conexão sairão pelo mesmo link.

Existem alguns patchs disponíveis para melhorar o mecanismo de roteamento. Procurem, informem-se e vejam se são adequados as suas realidades.

Com o uso de regras de roteamento (ip rule) você pode definir qual link padrão para a saída de pacotes de uma determinada rede. Ex:ip rule add from 10.1.0.0/24 table tb0
ip rule add from 10.2.0.0/24 table tb1Pode-se. também, dividir por seviços. ex:iptables -t mangle -A PREROUTING -i LOCALNET -p tcp --dport 21 -j MARK --set-mark 0x60
ip rule add fwmark 0x60 table tbNSó isso... fiz este post com o intuíto dele se tornar permanente... espero que os moderadores aceitem...

----------


## erickwa

> Pode-se. também, dividir por seviços. ex:iptables -t mangle -A PREROUTING -i LOCALNET -p tcp --dport 21 -j MARK --set-mark 0x60
> ip rule add fwmark 0x60 table tbNSó isso... fiz este post com o intuíto dele se tornar permanente... espero que os moderadores aceitem...


Amigo isso seria para poder dividir por portas certo???
entendi essa regra só ñ entendo esse 0x60. foi um nome qualquer q vc deu somente para registrar a marcação?
obrigado...

----------


## PEdroArthurJEdi

> Amigo isso seria para poder dividir por portas certo???
> entendi essa regra só ñ entendo esse 0x60. foi um nome qualquer q vc deu somente para registrar a marcação?
> obrigado...


Veja que eu pus uma regra de roteamento, fwmark, e o valor era 0x60. Então, na regra do iptables deve colocar o valor que escolhi na regra de roteamento.

----------


## erickwa

> Veja que eu pus uma regra de roteamento, fwmark, e o valor era 0x60. Então, na regra do iptables deve colocar o valor que escolhi na regra de roteamento.


Legal...
Vou tentar usar seu topico ja instalei iproute2 e tudo mais, estou precisando justamente disso, preciso mandar para um link trafego nobre e para o outro preciso mandar o resto, vou tentar qualquer duvidade posso entrar em contato denovo? mas seu tutorial esta bem elaborado e bem feito, agradeço, e repito era justamente o q precisava...

Abraços tudo de bom...

----------


## erickwa

Minhas condições aqui é a seguinte....

eth0 - 172.16.1.2 (rede local) ligo essa eth para outro server de monitoramento...
eth1 - 192.168.1.2 (rede ADSL) direto em um modem
eth2 - 201.xx.xx.xxx (rede cisco) 

Antes do Roteamento...

[[email protected] rc.d]# route
Tabela de Roteamento IP do Kernel
Destino Roteador MÃ¡scaraGen. OpÃ§Ãµes MÃ©trica Ref Uso Iface
201.xx.xx.xxx * 255.255.255.248 U 10 0 0 eth2
192.168.1.0 * 255.255.255.0 U 10 0 0 eth1
link-local * 255.255.0.0 U 10 0 0 eth2
link-local * 255.255.0.0 U 10 0 0 eth1
default 201-xx-xx-xxx.c 0.0.0.0 UG 10 0 0 eth2

isso sem executar as regras...

agora executando tais regras, criei um script com todas dentro...


[[email protected] rc.d]# cat /etc/rc.d/rc.routes

ip route add 172.16.1.0/24 dev eth1 src 192.168.1.1 table tb0
ip route add to 0/0 via 192.168.1.2 table tb0
ip route add 172.16.1.0/24 dev eth2 src 201.xx.xx.xxx table tb1
ip route add to 0/0 via 201.xx.xx.xxx(router cisco) table tb1

ip route add 172.16.1.0/24 dev eth0 table tb0
ip route add 172.16.1.0/24 dev eth0 table tb1

ip route add 172.16.1.0/24 dev eth1 src 192.168.1.1
ip route add 172.16.1.0/24 dev eth2 src 201.28.77.162

iptables -t mangle -A PREROUTING -i eth0 -p udp --dport 1024:65535 -j MARK --set-mark 0x60
ip rule add fwmark 0x60 table tb0
iptables -t mangle -A PREROUTING -i eth0 -p tcp --dport 1024:65535 -j MARK --set-mark 0x61
ip rule add fwmark 0x61 table tb0
iptables -t mangle -A PREROUTING -i eth0 -p udp --dport 1:1023 -j MARK --set-mark 0x50
ip rule add fwmark 0x50 table tb1
iptables -t mangle -A PREROUTING -i eth0 -p tcp --dport 1:1023 -j MARK --set-mark 0x51
ip rule add fwmark 0x51 table tb1


[[email protected] rc.d]# ./rc.route
RTNETLINK answers: Invalid argument
RTNETLINK answers: File exists
RTNETLINK answers: Invalid argument

Agora apos executar as regras...

[[email protected] rc.d]# route
Tabela de Roteamento IP do Kernel
Destino Roteador MÃ¡scaraGen. OpÃ§Ãµes MÃ©trica Ref Uso Iface
201.xx.xx.xxx * 255.255.255.248 U 10 0 0 eth2
192.168.1.0 * 255.255.255.0 U 10 0 0 eth1
172.16.1.0 * 255.255.255.0 U 0 0 0 eth2
link-local * 255.255.0.0 U 10 0 0 eth2
link-local * 255.255.0.0 U 10 0 0 eth1
default 201-xx-xx-xxx.c 0.0.0.0 UG 10 0 0 eth2


Pelo q percebi existe algum erro... c pudesse me dizer onde pequei... obrigado...

 :Boxing:

----------


## PEdroArthurJEdi

> [[email protected] rc.d]# cat /etc/rc.d/rc.routes
> 
> ip route add 172.16.1.0/24 dev eth1 src 192.168.1.1 table tb0
> ip route add to 0/0 via 192.168.1.2 table tb0
> ip route add 172.16.1.0/24 dev eth2 src 201.xx.xx.xxx table tb1
> ip route add to 0/0 via 201.xx.xx.xxx(router cisco) table tb1
> 
> ip route add 172.16.1.0/24 dev eth0 table tb0
> ip route add 172.16.1.0/24 dev eth0 table tb1
> ...


As saídas dos seguintes comandos podem ajudar mais:

ip route show table all
iptables -t mangle -L -n -v

Porém, numa primeira vista, não parece haver nenhum erro no seu script. Testei algumas coisas aqui nos meu servidores e deu certo. Como disse, a saída ajudará mais...

----------


## rndrama

Pedro,
fiz tudo que está no tuto, mas o cliente não encherga o servidor.

Tenho:

FEDORA 8
3 links
2 WIMAX(512 cada) - embratel
192.168.10.x - gw1 - saida para a porta 80 e 443
192.168.10.x - gw2 - saida para a porta 25 e 110
1 link dedicado(1 mb, para acesso ao terminal service) - embratel
192.168.16.x - gw3 - só passa por aqui acesso ao ts, saída pela interface interna pela porta 3389


será o que posso ta errando?

----------


## PEdroArthurJEdi

Antes de realizar o balanceamento os clientes estavam funcionando?

----------


## rndrama

Sim, todos estão funcionando.

Pedro, LOCALNET refere-se á rede local(192.168.160.0/24), é isso?

Vlw

----------


## PEdroArthurJEdi

Sim, localnet é o endereço da rede local...

Seria de grande ajuda a saida dos seguintes comandos:

# ip route show table all
# iptables -t mangle -L -n -v

----------


## rndrama

Amanha vou fazer novos teste e posto a saída dos comandos.
Vlw Pedro

Agradecido

----------


## mtec

> Como muitos tem dúvidas de como balancear o acesso a Internet por diversos links, resolvi escrever esse mini-howto para evitar a necessidade de novos post no fórum.
> 
> Vamos ao problema. Imaginemos um roteador rodando kernel GNU/Linux com as opções de roteamento avançado ativado. Este computador está conectado a N links dedicados. Desejamos balancear a carga das requisições entre esses N links. Sejam LIP0, LIP1, ... , LIPN os endereços IP atribuidos aos links, LIF0, LIF1, ... , LIFN as interfaces de rede, LNTW, LNTW1, ... , LNTWN as redes e LGW0, LGW1, ... , LGWN os gateways de cada link.
> 
> Primeiramente devemos criar N tabelas de roteamento, onde N é o número total de links que o gateway possui:echo 10 tb0 >> /etc/iproute2/rt_tables
> echo 11 tb1 >> /etc/iproute2/rt_tables
> ...
> echo XX tbN >> /etc/iproute2/rt_tablesFeito isso, devemos atribuir as redes dos links as suas respectivas tabelas de roteamento:ip route add LNTW0 dev LIF0 src LIP0 table tb0
> ip route add to 0/0 via LGW0 table tb0
> ...



Não seria mais interessantes postar este nos blogs??

Att  :Tee:

----------


## PEdroArthurJEdi

Os blogs não existiam quando postei...

----------


## Beraldo

> Sejam LIP0, LIP1, ... , LIPN os endereços IP atribuidos aos links, LIF0, LIF1, ... , LIFN as interfaces de rede, LNTW, LNTW1, ... , LNTWN as redes e LGW0, LGW1, ... , LGWN os gateways de cada link.


Olá PEdroArthurJEdi, achei muito interessante a solução, só fiquei em dúvida em uma coisa, no meu caso eu tenho dois links, sendo que é ponto-a-ponto dedicado e outro é uma Speedy Business, ambos IP fixo, sendo que no Speedy existe uma VPN com a matriz. A idéia é configurar um LB para que quando um dos links caiam a filial não fique sem comunição com a matriz.

Estou pensando em refazer a toda a estrutura e remontar a VPN que não fui que fiz, e configurar ela nos dois links, ou deixar como está, mas o que está pegando é LB, sem contar que depois tem Samba, Squid etc..etc...e terei que mecher com IP Route que ainda não manjo muito. 

Bem no caso da minha rede onde eu seto as interface eth0, eth1 eth2, sendo as duas primeiras para os links e útima para lan. O que seria esses LIP0, LIP1, LNTW, LNTW1, LGW0, LGW1. Fiquei confuso.
Mais uma coisa esse seu exemplo funciona para o que eu quero fazer ou tem uma solução mais simples. Andei vendo algo sobre o Bonding, mas acho que não serve.

Agradeço a atenção!
Abraços.

----------


## PEdroArthurJEdi

O que estamos fazendo aqui é um balanceamento de carga, ou seja, estamos dividindo os acessos de hosts/redes distintas por diferentes enlaces. O que você procura é um mecanismo de fail-over. Acho que encontrará alguns exemplos interessantes no sessão Alta Disponibilidade do Under-Linux.org.

Quanto as variáveis, LIP0, .... LIPN seria um acrônimo para Link Internet Address, o endereço IP atribuido ao seu link. Tipo no seu caso, o IP dedicado e o IP do speedy. LNTW0, ..., LNTWN seria um acrônimo para Link NeTWork. Esses são as redes as quais os links pertencem. Seja o endereço do link 0 10.2.0.2/24, sua rede, ou LNTW0, 10.2.0.0. Já LGW0, ...., LGWN são os gateways das redes.

Epero ter ficado claro...

----------


## Beraldo

Entendi...depois olhando com mais calma percebi isso!!!

Seria bem isso mesmo, na verdade o direitor só quer que saia pelo link ponto-a-ponto se esse cair então entra a vpn que usa a internet.

A VPN, e o link P2P, já se falam, mas não estou conseguindo rotear as redes para usar o P2P. Vou postar abaixo minhas configurações se puder dar umas dicas ou se eu tiver que criar um novo tópico me avise. 
Eu agradeço.
Abs.

P2P entre matriz e filial, tenho seguinte cenário.
São dois servidores com três placa de rede cada.
O servidor da matriz está asssim:

Eth0: 192.168.0.3 - Rede local
Eth2: Ip público fixo
Eth3: 172.16.1.253 - Link ponto a ponto com a filial.
Tun0: 10.1.1.1 - Tunel VPN que sai pela internet para filial

O servidor da filial esta'assim:
Eth0: Ip publico fixo
Eth2: 192.168.1.1 - Rede local
Eth3: 172.16.2.253 - Link ponto a ponto com a matriz.
Tun0: 10.1.1.2 - Tunel VPN que sai pela internet para matriz

- O túnel e as redes via VPN se enxergam se problemas.
- Agora é necessário fazer com que as redes 192.168.0.0 e 192.168.1.0 se enxergem via P2P.
- Do IP 172.16.1.253 eu pingo o 172.16.2.253 e vice versa.
- Da rede 192.168.0.0 quando pingo a rede 192.168.1.0, para no 172.168.1.254 que o Gateway, logo algo nas regras está errado e ainda não consegui entender.

Quais regras devo configurar para que funcione esse roteamento? A idéia também é manter o a VPN (10.0.0.0) ativa e criar um backup, se cair o ponto a ponto a VPN assume.

Abaixo as configurações da MATRIZ

###Route -n (servidor Matriz)###

Tabela de Roteamento IP do Kernel
Destino Roteador MáscaraGen. Opções Métrica Ref Uso Iface
10.1.1.2 0.0.0.0 255.255.255.255 UH 0 0 0 tun0
200.15.124.100 0.0.0.0 255.255.255.240 U 0 0 0 eth2
172.16.2.0 172.16.1.254 255.255.255.0 UG 0 0 0 eth3
192.168.1.0 10.1.1.1 255.255.255.0 UG 0 0 0 tun0
192.168.0.0 192.168.0.3 255.255.255.0 UG 0 0 0 eth0
172.16.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth3
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo
0.0.0.0 200.15.124.101 0.0.0.0 UG 0 0 0 eth2

###IPTABLES MATRIZ###

#! /bin/bash

#Inicializa modulos
echo 1 > /proc/sys/net/ipv4/ip_forward
modprobe iptable_nat

#Flush all
iptables -F
iptables -X

#drop all
iptables -A INPUT -p tcp --syn -s 192.168.0.0/255.255.255.0 -j ACCEPT
iptables -A INPUT -p tcp --syn -j DROP
iptables -A INPUT -p icmp -i eth2 -j DROP

#Libera acesso a VPN somente para os ips abaixo
iptables -A FORWARD -s 192.168.0.3 -d 192.168.1.0/24 -j ACCEPT
iptables -A FORWARD -s 192.168.0.1 -d 192.168.1.0/24 -j ACCEPT
iptables -A FORWARD -s 192.168.0.133 -d 192.168.1.0/24 -j ACCEPT
iptables -A FORWARD -s 192.168.0.83 -d 192.168.1.0/24 -j ACCEPT

#Bloqueia acesso a VPN para o restante da rede
iptables -A FORWARD -s 192.168.0.0/24 -d 192.168.1.0/24 -j DROP

#Nesse processo estou apontando uma rota para gateway filial
route del -net 192.168.1.0 netmask 255.255.255.0
route add -net 192.168.1.0 netmask 255.255.255.0 gw 10.1.1.1
route del -net 192.168.0.0 netmask 255.255.255.0
route add -net 192.168.0.0 netmask 255.255.255.0 gw 192.168.0.3

#Aqui estou liberando a máscara
iptables -t nat -A POSTROUTING -o tun+ -j MASQUERADE

#Ativa squid
iptables -t nat -A POSTROUTING -o eth2 -j MASQUERADE
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128

#E aqui estou permitindo a passagem de pacotes entre as redes
iptables -A FORWARD -i tun0 -s 192.168.1.0/24 -d 192.168.0.0/24 -j ACCEPT
#iptables -A FORWARD -i eth0 -j ACCEPT
#iptables -A FORWARD -i eth2 -j ACCEPT
#iptables -A FORWARD -i eth3 -j ACCEPT

#Libera acesso INTRANET
iptables -t nat -A PREROUTING -i eth2 -p tcp -m tcp --dport 24801 -j DNAT --to-destination 192.168.0.1:80

#Libera DNS
iptables -I INPUT -s 200.15.124.133 -j ACCEPT
iptables -I INPUT -s 200.15.124.134 -j ACCEPT

###IPTABLES -L (MATRIZ)###

Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT 0 -- 189.10.59.25.dsl.telesp.net.br anywhere
ACCEPT 0 -- web1.embratel.com.br anywhere
ACCEPT 0 -- mail.embratel.com.br anywhere
ACCEPT tcp -- 192.168.0.0/24 anywhere tcp flags:FIN,SYN,RST,ACK/SYN
DROP tcp -- anywhere anywhere tcp flags:FIN,SYN,RST,ACK/SYN
DROP icmp -- anywhere anywhere

Chain FORWARD (policy ACCEPT)
target prot opt source destination
ACCEPT 0 -- proxy.digivoice 192.168.1.0/24
ACCEPT 0 -- 192.168.0.1 192.168.1.0/24
ACCEPT 0 -- 192.168.0.133 192.168.1.0/24
ACCEPT 0 -- 192.168.0.83 192.168.1.0/24
DROP 0 -- 192.168.0.0/24 192.168.1.0/24
ACCEPT 0 -- 192.168.1.0/24 192.168.0.0/24

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

###Route -N (servidor Filial)###

Tabela de Roteamento IP do Kernel
Destino Roteador MáscaraGen. Opções Métrica Ref Uso Iface
10.1.1.1 0.0.0.0 255.255.255.255 UH 0 0 0 tun0
172.16.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eth3
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth2
200.203.154.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
192.168.0.0 10.1.1.2 255.255.255.0 UG 0 0 0 tun0
172.16.1.0 172.16.2.254 255.255.255.0 UG 0 0 0 eth3
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo
0.0.0.0 200.203.154.1 0.0.0.0 UG 0 0 0 eth0

###IPTABLES - FILIAL###
#! /bin/bash

echo 1 > /proc/sys/net/ipv4/ip_forward

#Nesse processo estou apontando uma rota para gateway filial
route del -net 192.168.0.0 netmask 255.255.255.0
route add -net 192.168.0.0 netmask 255.255.255.0 gw 10.1.1.2

#Flush all
iptables -F
iptables -X

#Drop all
iptables -P INPUT DROP

#Libera rede vinda da VPN
iptables -A INPUT -s 10.1.1.1 -p tcp -j ACCEPT
iptables -A INPUT -s 10.1.1.1 -p udp -j ACCEPT
iptables -A INPUT -s 10.1.1.1 -p icmp -j ACCEPT

#Libera rede com ip da DigiVoice
iptables -A INPUT -s 200.203.154.2 -p tcp -j ACCEPT
iptables -A INPUT -s 200.203.154.2 -p udp -j ACCEPT
iptables -A INPUT -s 200.203.154.2 -p icmp -j ACCEPT

#Libera SP acessar servidor local
iptables -I INPUT -s 192.168.1.0/24 -j ACCEPT

#Aqui estou liberando a máscara
iptables -t nat -A POSTROUTING -o tun+ -j MASQUERADE

#E aqui estou permitindo a passagem de pacotes entre as redes
iptables -A FORWARD -i tun0 -s 192.168.0.0/24 -d 192.168.1.0/24 -j ACCEPT

# Sinalizacao SIP
iptables -A INPUT -p udp --dport 5060 -j ACCEPT

# RTP
iptables -A INPUT -p udp --dport 10000:20000 -j ACCEPT

# IAX2
iptables -A INPUT -p udp --dport 4569 -j ACCEPT

#localhost
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

#NAT
iptables --table nat --append POSTROUTING --out-interface eth0 -j MASQUERADE
iptables --append FORWARD --in-interface eth0 -j ACCEPT

IPTABLES -L (FILIAL)
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT 0 -- 192.168.1.0/24 anywhere
ACCEPT tcp -- 10.1.1.1 anywhere
ACCEPT udp -- 10.1.1.1 anywhere
ACCEPT icmp -- 10.1.1.1 anywhere
ACCEPT tcp -- 200.203.154.2-dns-br.embratel.net.br anywhere
ACCEPT udp -- 200.203.154.2-dns-br.embratel.net.br anywhere
ACCEPT icmp -- 200.203.154.2-dns-br.embratel.net.br anywhere
ACCEPT udp -- anywhere anywhere udp dpt:sip
ACCEPT udp -- anywhere anywhere udp dpts:ndmp:dnp
ACCEPT udp -- anywhere anywhere udp dpt:iax
ACCEPT 0 -- anywhere anywhere
ACCEPT 0 -- anywhere anywhere state RELATED,ESTABLISHED

Chain FORWARD (policy ACCEPT)
target prot opt source destination
ACCEPT 0 -- 192.168.0.0/24 192.168.1.0/24
ACCEPT 0 -- anywhere anywhere

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

----------


## punxx

Ôpa Pedro...
Me tira uma dúvida... ou melhor... qual seria sua opinião hehe...
Tava testando o iproute2...
Testei mandando tudo de um IP para tal gateway...
A questão é o seguinte... temos uma rede interna... com servidor web, mail, dns, dhcp... blablabla...
Aí se quero acessar meu site como estou mandando tudo para tal gateway, minha conexão é realizada por fora... e não internamente...

invés de:
PC -> ACESSO HTTP REDE INTERNA

fica sendo:
PC -> VÁÁÁÁÁRIOS SALTOS -> ACESSO HTTP REDE EXTERNA

Teria como pelo iproute2 alterar isso?
Só veio a cabeça invés de mandar todo o tráfego da VLAN pelo gateway, utilizar o iptables para marcar pacotes com destino diferente da DMZ e esses irem pro gateway...

Espero que tenha dado pra entender hehe...
Valeu!!

----------


## PEdroArthurJEdi

Rapaz.. Pra ser sincero não entendi...

Faz um pequeno diagrama da sua rede com o Dia e põe aqui que fica mais claro a situação. Se puder, faz da topologia lógica e física. Mas lhe adianto que o IPRoute2 faz miséria! Ele é muito completo.

----------


## punxx

É o seguinte...

Algumas VLANs vão por tal gateway... e outras por outro...
Temos uma DMZ... com www e etc... DNS interno e tal...

Aí quando queremos acessar o site local acessamos internamente...
Meu dns diz que eh 10.algo por exemplo...

Só que quando coloco pra ir por tal gateway tudo vai por ele...
Aí se quero acessar meu WWW interno... eu "saio" por uma conexão pra acessar pela conexão externa de outro provedor...

Aí queria que tudo que fosse interno... "não saisse"... 
Se eu quiser acessar www.eu.com, acesse internamente... e não ir pelo gateway pra depois acessar como se fosse de fora....

Está algo tipo "ip rule add from 10.0.0.120 table 20"...
E essa tabela 20 manda tudo por um gateway pra fora...
E eu preciso que eu querendo acessar o www.eu.com acesse internamente...
Não que seja PC -> REDE_DE_FORA -> MEU_WWW_EXTERNO ... E sim PC -> MEU WWW_INTERNO

Consegui ou enrolei? hehe

Victor Hugo

----------


## PEdroArthurJEdi

Você já configurou seu DNS?

Quando você requisita Site.com.br, o DNS vai traduzir esse nome em um endereço. Se sua rede está indo pelo endereço externo, é por que o DNS o está enviando. Você já tentou usar o endereço IP para acessar o serviço? Se o problema pesistir, ai sim pode ser um problema de roteamento. Ai você volta por aqui. Mas coloque suas configurações. Endereços de rede, regras de roteamento, diagramas, etc.

----------


## punxx

Infelizmente não dá pra passar todas informações detalhadas pois estamos no final de semana hehe...
Mas é o seguinte... o dns está todo ok... Temos 2 zonas... quando se pede SITE.COM pela rede interna... recebe-se o ip interno do servidor...

Nisso pra falar a verdade nem o DNS interno eu fico tendo acesso... Pois quando o IP que coloquei na regra de roteamento chega no firewall já manda todo o tráfego pro gateway 150.150.150.150 por exemplo... Aí meu DNS interno é o 10.10.10.10... Um ping pra 10.10.10.10 não funciona =/


Resumindo, algo tipo:
meu ip: 10.0.7.15
meu dns: 10.10.10.10

ip route add default via 150.150.150.150 table embratel
ip rule add from 10.0.7.15 table embratel

Aí nem requisição dns pro 10.10.10.10 eu consigo fazer... tudo tudo tudo que vem do 10.0.7.15 vai direto pra fora... eu posso até acessar meu site pelo IP externo... mas aí eu "saio" pelo gateway e acesso o site externamente... não sendo uma opção.


Aí pensei em usar o --set-mark pra marcar tudo que não vá para os servidores da rede interna... Algo tipo: 
iptables -t mangle -A PREROUTING -s 10.0.7.15 -d ! REDE_INTERNA --set-mark 1
E aí os marcados mandar pro gateway...
ip rule add fwmark 1 table embratel

Não sei se funcionará ou se há outra opção...
Valeu mesmo pela atenção e respostas!!!!!!!!!

Victor Hugo

----------


## PEdroArthurJEdi

Bem cara, eu tenho uma DMZ configurada aqui. Vou tentar passar mais ou menos a configuração. Você adapta...

Eu possuo dois links de saída, o endereço IP dos links são SIPA e SIPB, e as próximas rotas são GW_SIPA e GW_SIPB. Tenhos duas redes, REDEI (eth2) e DMZ (eth3). Os gateways dessas redes são GW_REDEI e GW_DMZ. Também possuo duas tabelas de roteamento, redei e dmz.
# ip addr add SIPA/mascara dev eth0
# ip link set dev eth0 up

# ip addr add SIPB/mascara dev eth1
# ip link set dev eth1 up

# ip addr add GW_REDEI/mascara dev eth2
# ip link set dev eth2 up

# ip addr add GW_DMZ/mascara dev eth3
# ip link det dev eth3 up

# ip route add to default via GW_SIPA

# ip route add to REDEI dev eth2 table redei
# ip route add to DMZ via GW_DMZ dev eth3 table redei
# ip route add to default via GW_SIPA table redei

# ip route add to DMZ dev eth3 table dmz
# ip route add to REDEI via GW_REDEI dev eth2 table dmz
# ip route add to default via GW_SIPB table dmz

# ip rule add from REDEI table redei
# ip rule add from DMZ table DMZ

# iptables -t nat -A POSTROUTING -s REDEI -d !DMZ -j SNAT --to SIPA
# iptables -t nat -A POSTROUTING -s DMZ -d !REDEI -j SNAT --to SIPBNão estava com o arquivo aqui (também estou em casa aproveirando o FDS :-) ), mas pelo que lembro é isso.

----------


## punxx

Pô cara... sem palavras hehe...
Valeu mesmo pela atenção...
Vou dar uma sacada durante a semana direitinho...
Mas agora vai!! hehe
Volto quando estiver funcionando  :Wink: 

Valeu novamente!!

----------


## punxx

Ôpa Pedro,

Tirar mais uma dúvida contigo... Consegui colocar pra funcionar todo o esquema separando por VLANs e tal... Mas tudo só funciona pra tráfegos que não sejam pra porta 80 hehe =/

Pois na mesma máquina temos o proxy transparente...
Aí tudo da porta 80 vai pro squid... e o squid acessa usando o gateway padrão da máquina =/

Já visse alguma solução pra algo do tipo?
Valeu!!

----------


## punxx

Aiai... ou vidinha compliacada hehe...

Utilizando o tcp_outgoing_address do squid dá pra configurar essa questão...

acl admin src 10.0.1.0/24
tcp_outgoing_address ip_eth_link1 admin
acl alunos src 10.0.2.0/24
tcp_outgoing_address ip_eth_link2 alunos

Já que o squid sabe o ip de origem dá pra fazer... Só que aqui mais uma complicação =/
Usamos o dansguardian (filtro de conteúdo)... Aí nesse caso o iptables manda a porta 80 pra porta do dansguardian... e o dansguardian se conecta ao squid (tudo mesma máquina)...
Aí no squid o ip de origem é 127.0.0.1 =/ ... Não dando pra utilizar o tcp_outgoing_address separando por origem...

Pense que não tem coisa pior chegar em um ponto e ser barrado das idéias hehe...

t+

----------


## PEdroArthurJEdi

Sim cara, desculpe... Não havia respondido mais nada por que já fugiu do meu domínio. Aqui usamos a política da consciência. Por isso não aplicamos filtros de conteúdos... Ai não sou muito ligado nessa área.

----------


## punxx

Quem dera se pudesse ser assim aqui também hehe...
Mas instituição federal de ensino de milhares de alunos... incluindo Ensino Médio...
Site de música, vídeo, pornografia e outras coisas que consomem banda não falta =/
O post anterior foi até pra deixar registrado a opção do squid pra caso alguem precise hehe...
Funciona legal (não tendo o dansguardian).
É isso aí. Valeu novamente!!

----------


## adriano171

Queria agradecer a vc pela ajuda que vc está dando!!!!
Pois pra nos que somos principiantes isso é de grande ajuda!!!!
Valeu, tenha um bom dia!!!

----------


## PEdroArthurJEdi

De nada! Que bom que estou atingindo meu objetivo. :-)

----------


## tiagoggsouza

O kernel mantém tabelas de roteamento estátcas, portanto, se N pessoas tentarem acessar o site Google por exemplo, todas as tentativas de conexão sairão pelo mesmo link.

como fazer com que o kernel exclua essas tabelas?

testei o balanceamento e deu certo,porém preciso que cada acesso feito ao google por exemplo saia por uma rota,poderia me auxiliar??

ABS

----------


## glaucioklipel

Até onde eu saiba cada tentativa de navegação sairá por um link diferente pois eles estão como mesmo peso. Tanto é que o MSN por exemplo, quando utilizado o esquema de balanceamento de links, cai a cada 1 minuto.

Lógico, essa situação do MSN e de outros serviços cair acontece se não for definido um link padrão para uma determinada rede ou ainda marcar pacotes por serviço e encaminhar por uma determinada tabela com somente um link.

A vantagem de se trabalhar com esse balanceamento é poder fazer NAT para qualquer endereço interno utilizando qualquer link para entrada, coisa que trabalhando sem o load balancing não seria possível pois contamos com apenas um link disponível por vez.

Há várias maneiras de fazer, esta sem dúvida é bem tranquila!

----------


## m4d3

> Como muitos tem dúvidas de como balancear o acesso a Internet por diversos links, resolvi escrever esse mini-howto para evitar a necessidade de novos post no fórum.
> 
> Vamos ao problema. Imaginemos um roteador rodando kernel GNU/Linux com as opções de roteamento avançado ativado. Este computador está conectado a N links dedicados. Desejamos balancear a carga das requisições entre esses N links. Sejam LIP0, LIP1, ... , LIPN os endereços IP atribuidos aos links, LIF0, LIF1, ... , LIFN as interfaces de rede, LNTW, LNTW1, ... , LNTWN as redes e LGW0, LGW1, ... , LGWN os gateways de cada link.
> 
> Primeiramente devemos criar N tabelas de roteamento, onde N é o número total de links que o gateway possui:echo 10 tb0 >> /etc/iproute2/rt_tables
> echo 11 tb1 >> /etc/iproute2/rt_tables
> ...
> echo XX tbN >> /etc/iproute2/rt_tablesFeito isso, devemos atribuir as redes dos links as suas respectivas tabelas de roteamento:ip route add LNTW0 dev LIF0 src LIP0 table tb0
> ip route add to 0/0 via LGW0 table tb0
> ...


Ainda não obtive exito utilizando uma unica interface para odos os links. 

A propósito, glaucio você é irmão do gustavo?

----------


## DanielVieceli775

Olá o único problema ao meu ver é que a cada pouco reseta as conexões e cai os serviços abertos.


















O único poblema com esse esquema com iproute

----------


## glaucioklipel

> Ainda não obtive exito utilizando uma unica interface para odos os links. 
> 
> A propósito, glaucio você é irmão do gustavo?


Sim! Vc é o Luciano Rampanelli de Realeza?

----------

