[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Roteamento pela origem



2008/6/6 gunix <gustavo.grupos@gmail.com>:
Anderon, boa noite.

Olá Gustavo.
 

Estou aqui hoje na quase ultima tentatica de colocar o balancemaneto de carga funcionando.

Calma... apesar deste tópico não ser o topo da onda da alta tecnologia , também não quer dizer que seja simples e a maioria dos administradores linux ainda não foram expostos a estes problemas, então é uma questão de se acostumar com os termos e os conceitos, desistir agora significaria deixar de resolver toda uma classe de problemas e nós nunca sabemos quando teremos oportunidade de gastar tempo para aprender um tópico novo, assim aproveite a sensação de insegurança do não conhecimento e transforme na emoção da descoberta.
 

Para ficar mais facil resolvi fazer o seguinte

acessar o firewall e dele proprio tenar fazer balancemaneto.

Ou seja, no seu teste,  você tentará  a partir da própria máquina que faria o balanceamento usar cada um dos enlaces conforme o protocolo.
 

Porta 80 sair pelo EMBRATEL
Porta 443 sair pelo Velox

Como script que vc me passou executado, coloquei as segunte regras no firewall

iptables -t mangle -I OUTPUT -p tcp --dport 80 -j MARK --set-mark 102
iptables -t mangle -I OUTPUT -p tcp --dport 443 -j MARK --set-mark 101

Acessei o meu ip pela porta 80... e saiur no velox, sendo que esta marcado para sari embratel (102=embratel)
Acessei o ww.dyndns.org que é via 443 e tb pelo velox...

Alguma ideia do que posso tentar.
Todos os manuais que peguei na net, seguem a mesma ideia do que vc me passou.

Primeira coisa, só gostaria de lembrá-lo que a CHAIN OUTPUT só é chamada para os pacotes com origem no sistema local, essa chain não é verificada nos pacotes que estão sendo encaminhados.

Não entendi direito o que você quis dizer com "Acessei o meu ip pela porta 80...  e saiu  no velox", se  você estava  se conectando a partir da internet em um dos seus ips públicos e verificou com por exemplo o tcpdump que as requisições a porta 80 entravam por uma interface e saíam por outra, pode ser o caso de marcar os pacotes cuja porta de origem seja a 80, assim você teria o seguinte comando:
iptables -t mangle -I OUTPUT -p tcp --sport 80 -j MARK --set-mark 102.

Caso o seu teste, tenha sido de usar um enlace com um protocolo e o outro enlace com outro protocolo:
Podem existir vários motivos para esse comportamento, a tabela de roteamento embratel pode não estar completa, com uma rota default, assim a roteamento se daria pela tabela de roteamento main, você pode checar se a tabela de roteamento embratel está completa (ou seja, com rotas para todas as suas redes e com uma rota default) com o comando "ip route show table embratel"; pode ser o caso que haja outras marcações de pacotes DEPOIS da regra que você colocou na chain OUTPUT da table mangle, o que aconteceria seria que somente a última marcação teria efeito, esse caso teria efeito por exemplo quando uma regra de marcação tivesse seu domínio sobreposto com outra regra, você poderia marcar um destino1 pelo enlace 1 e um protocolo1 pelo enlace 2, se você tentasse acessar o destino1 com o protocolo1 a última regra seria a que teria efeito, alias por isso criei chains com nomes como MARK_EMBRATEL com um ACCEPT como última regra, para que as próximas regras de marcação não fossem verificadas; pode ser o caso de limpar o cache de rotas, uma necessidade depois da alteração na marcação de pacotes, caso você queira que suas alterações tenham efeito imediato, com "ip route flush cache", alias depois de cada teste você verificou se uma rota adequada está no cache de rotas, não é? "ip route show cache", isto pode determinar se sua marcação de pacotes está funcionando e se o kernel aceitou a sua rota; pode ser o caso de sua marcação não ter efeito  porque você esteja aplicando a regra incorreta de marcação de pacotes; pode ser o caso de você estar marcando os pacotes com uma tabela de roteamento inexistente;

Como você afirmou anteriormente que uma regra como  "ip rule add from  <ip> table embratel" funcionava,  você poderia fazer um  teste mais  simples para testar a marcação de pacotes:
Você faria requisições a partir da sua máquina na rede local para destinos com protocolos diferentes e verificaria o cache de rotas e a efetiva interface de saída com por exemplo o iftop (uma ferramente de preferência pessoal).

ip rule add fwmark 2 table embratel
ip rule add fwmark 1 table velox

iptables -t mangle -I PREROUTING -s IP_DA_SUA_MAQUINA -p tcp --dport 80 -j MARK --set-mark 2
iptables -t mangle -I PREROUTING -s IP_DA_SUA_MAQUINA -p tcp --dport 443 -j MARK --set-mark 1

ip route flush cache

você deveria abrir dois terminais para o seu firewall e em cada um executar o comando iftop, em um iftop -i eth0 e no outro iftop -i eth1.

A seguir você deveria realizar as requisições.
Por exemplo "http://www.uol.com.br" e "https://www2.bancobrasil.com.br/aapf/login.jsp?aapf.IDH=sim"


Reply to: