Redirecionamento de porta não funciona com o load balance

1. Redirecionamento de porta não funciona com o load balance

Glauco Perucchi
glaucoperucchi

(usa Debian)

Enviado em 30/09/2014 - 09:22h

Bom dia pessoal do VOL!

Estou com um problema a dias que estou apanhando muito para resolver.

Estou querendo fazer load balance com dois links, mas toda vez que ativo o load balance pelo script abaixo, o redirecionamento de portas hora funciona hora não funciona, verifiquei pelo comando tcptrack -i eth2 que quando a conexão entra pelo eth2, o redirecionamento não funciona, já tentei marcar os pacotes mas sem sucesso também.

O Sistema da empresa hora acessa hora não acessa externamente.

Tenho um link da Oi com 5 IP's e um link da GVT com 1 IP.

Lan -> eth0
Oi -> eth1
GVT -> eth2

#!/bin/bash

# variaveis
OI_IPA="187.xxx.xxx.xx"
OI_NET="187.xxx.xxx.xx/xx"
OI_GAT="187.xxx.xxx.xx"
OI_NIC="eth1"

GVT_IPA="10.1.1.2"
GVT_NET="10.1.1.0/29"
GVT_GAT="10.1.1.1"
GVT_NIC="eth2"

function start() {
# configuracoes tabela OI
ip route add $OI_NET dev $OI_NIC src $OI_IPA table OI
ip route add default via $OI_GAT table OI

# configuracoes tabela GVT

ip route add $GVT_NET dev $GVT_NIC src $GVT_IPA table GVT
ip route add default via $GVT_GAT table GVT

# trafico da eth1 sai pela tabela OI
ip rule add from $OI_IPA table OI

# trafico da eth2 sai pela tabela GVT
ip rule add from $GVT_IPA table GVT

# definindo regra para pacotes marcados sairem pela OI
ip rule add fwmark 1 table OI

# definindo regra para pacotes marcados sairem pela GVT
ip rule add fwmark 2 table GVT

# Criando load balance multilink
ip route del default

ip route add default scope global nexthop via $OI_GAT dev $OI_NIC weight 2 nexthop via $GVT_GAT dev $GVT_NIC weight 1

ip route flush cache

echo "load balance ativado..."
}

function stop() {

# limpando tabelas
ip route flush table OI
ip route flush table GVT

# limpando regras
ip rule del from $GVT_IPA table GVT
ip rule del from $OI_IPA table OI
ip rule del fwmark 0x1 table OI
ip rule del fwmark 0x2 table GVT

#Removendo load balance
ip route del default scope global nexthop via $OI_GAT dev $OI_NIC weight 2 nexthop via $GVT_GAT dev $GVT_NIC weight 1

#Adicinonando uma rota default
ip route add default via $OI_GAT

# fazendo flush no cache de rotas que foram deletadas
ip route flush cache

echo "load balance desativado..."
}

case $1 in
'start') start; exit ;;
'stop') stop; exit ;;
'restart') stop; start; exit ;;
*) start; exit ;;
esac


Estou marcando os pacotes da seguinte forma:

/sbin/iptables -A PREROUTING -t mangle -i eth0 -s 192.168.10.0/24 -d bradesco.com.br -p tcp -m multiport --dports 80,443 -j MARK --set-mark 1
/sbin/iptables -A PREROUTING -t mangle -i eth0 -s 192.168.10.0/24 -d banrisul.com.br -p tcp -m multiport --dports 80,443 -j MARK --set-mark 1
/sbin/iptables -A PREROUTING -t mangle -i eth0 -s 192.168.10.0/24 -d bb.com.br -p tcp -m multiport --dports 80,443 -j MARK --set-mark 1
/sbin/iptables -A PREROUTING -t mangle -i eth0 -s 192.168.10.0/24 -d caixa.gov.br -p tcp -m multiport --dports 80,443 -j MARK --set-mark 1
/sbin/iptables -A PREROUTING -t mangle -i eth0 -s 192.168.10.0/24 -d itau.com.br -p tcp -m multiport --dports 80,443 -j MARK --set-mark 1
/sbin/iptables -A PREROUTING -t mangle -i eth0 -s 192.168.10.0/24 -d 0/0 -p tcp -m multiport --dports 587,110,143,25 -j MARK --set-mark 2
/sbin/iptables -A PREROUTING -t mangle -i eth0 -s 192.168.10.0/24 -d 0/0 -p tcp -m multiport --sports 587,110,143,25 -j MARK --set-mark 2
/sbin/iptables -A PREROUTING -t mangle -p tcp -m multiport --dports 22,10050,10051,10053,10055 -j MARK --set-mark 1
/sbin/iptables -A PREROUTING -t mangle -p tcp -m multiport --sports 22,10050,10051,10053,10055 -j MARK --set-mark 1



  


2. Re: Redirecionamento de porta não funciona com o load balance

Natanael Henrique
n4t4n

(usa Arch Linux)

Enviado em 01/10/2014 - 21:57h

ip rule add from $OI_IPA table OI
ip rule add from $GVT_IPA table GVT
ip rule add fwmark 1 table OI
ip rule add fwmark 2 table GVT


Cara, só me ocorreu que você está usando regras sobrepostas, então o roteamento dos pacotes é feito obedecendo apenas uma das regras.

Faça o seguinte teste:

Deixe somente a regra dos pacotes marcados, comentando as regras do IP da rede, ficando assim:

#ip rule add from $OI_IPA table OI
#ip rule add from $GVT_IPA table GVT
ip rule add fwmark 1 table OI
ip rule add fwmark 2 table GVT


Caso funcione, você pode reativá-las, mas usando PRIOridade.

Boa sorte com isso.


3. Re: Redirecionamento de porta não funciona com o load balance

leonardo Souza
lejoso

(usa Debian)

Enviado em 02/10/2014 - 16:15h

Dá uma pesquisada sobre connmark que resolverá o seu problema.
No topico de conntrack já auxiliei um colega uma vez.
Dá uma olhada.

http://www.vivaolinux.com.br/topico/Conntrack/Marcando-Pacotes-com-DNAT/



glauco.skt escreveu:

Bom dia pessoal do VOL!

Estou com um problema a dias que estou apanhando muito para resolver.

Estou querendo fazer load balance com dois links, mas toda vez que ativo o load balance pelo script abaixo, o redirecionamento de portas hora funciona hora não funciona, verifiquei pelo comando tcptrack -i eth2 que quando a conexão entra pelo eth2, o redirecionamento não funciona, já tentei marcar os pacotes mas sem sucesso também.

O Sistema da empresa hora acessa hora não acessa externamente.

Tenho um link da Oi com 5 IP's e um link da GVT com 1 IP.

Lan -> eth0
Oi -> eth1
GVT -> eth2

#!/bin/bash

# variaveis
OI_IPA="187.xxx.xxx.xx"
OI_NET="187.xxx.xxx.xx/xx"
OI_GAT="187.xxx.xxx.xx"
OI_NIC="eth1"

GVT_IPA="10.1.1.2"
GVT_NET="10.1.1.0/29"
GVT_GAT="10.1.1.1"
GVT_NIC="eth2"

function start() {
# configuracoes tabela OI
ip route add $OI_NET dev $OI_NIC src $OI_IPA table OI
ip route add default via $OI_GAT table OI

# configuracoes tabela GVT

ip route add $GVT_NET dev $GVT_NIC src $GVT_IPA table GVT
ip route add default via $GVT_GAT table GVT

# trafico da eth1 sai pela tabela OI
ip rule add from $OI_IPA table OI

# trafico da eth2 sai pela tabela GVT
ip rule add from $GVT_IPA table GVT

# definindo regra para pacotes marcados sairem pela OI
ip rule add fwmark 1 table OI

# definindo regra para pacotes marcados sairem pela GVT
ip rule add fwmark 2 table GVT

# Criando load balance multilink
ip route del default

ip route add default scope global nexthop via $OI_GAT dev $OI_NIC weight 2 nexthop via $GVT_GAT dev $GVT_NIC weight 1

ip route flush cache

echo "load balance ativado..."
}

function stop() {

# limpando tabelas
ip route flush table OI
ip route flush table GVT

# limpando regras
ip rule del from $GVT_IPA table GVT
ip rule del from $OI_IPA table OI
ip rule del fwmark 0x1 table OI
ip rule del fwmark 0x2 table GVT

#Removendo load balance
ip route del default scope global nexthop via $OI_GAT dev $OI_NIC weight 2 nexthop via $GVT_GAT dev $GVT_NIC weight 1

#Adicinonando uma rota default
ip route add default via $OI_GAT

# fazendo flush no cache de rotas que foram deletadas
ip route flush cache

echo "load balance desativado..."
}

case $1 in
'start') start; exit ;;
'stop') stop; exit ;;
'restart') stop; start; exit ;;
*) start; exit ;;
esac


Estou marcando os pacotes da seguinte forma:

/sbin/iptables -A PREROUTING -t mangle -i eth0 -s 192.168.10.0/24 -d bradesco.com.br -p tcp -m multiport --dports 80,443 -j MARK --set-mark 1
/sbin/iptables -A PREROUTING -t mangle -i eth0 -s 192.168.10.0/24 -d banrisul.com.br -p tcp -m multiport --dports 80,443 -j MARK --set-mark 1
/sbin/iptables -A PREROUTING -t mangle -i eth0 -s 192.168.10.0/24 -d bb.com.br -p tcp -m multiport --dports 80,443 -j MARK --set-mark 1
/sbin/iptables -A PREROUTING -t mangle -i eth0 -s 192.168.10.0/24 -d caixa.gov.br -p tcp -m multiport --dports 80,443 -j MARK --set-mark 1
/sbin/iptables -A PREROUTING -t mangle -i eth0 -s 192.168.10.0/24 -d itau.com.br -p tcp -m multiport --dports 80,443 -j MARK --set-mark 1
/sbin/iptables -A PREROUTING -t mangle -i eth0 -s 192.168.10.0/24 -d 0/0 -p tcp -m multiport --dports 587,110,143,25 -j MARK --set-mark 2
/sbin/iptables -A PREROUTING -t mangle -i eth0 -s 192.168.10.0/24 -d 0/0 -p tcp -m multiport --sports 587,110,143,25 -j MARK --set-mark 2
/sbin/iptables -A PREROUTING -t mangle -p tcp -m multiport --dports 22,10050,10051,10053,10055 -j MARK --set-mark 1
/sbin/iptables -A PREROUTING -t mangle -p tcp -m multiport --sports 22,10050,10051,10053,10055 -j MARK --set-mark 1





4. Re: Redirecionamento de porta não funciona com o load balance

Glauco Perucchi
glaucoperucchi

(usa Debian)

Enviado em 03/10/2014 - 10:25h

n4t4n fiz isso e continuou igual, hora acessava hora não acessava.

lejoso fiz uns testes hoje, utilizando o exemplo que tu me passou já notei uma grande diferente, não notei o sistema fora, porem no zabbix, o zabbix perdeu a conexão algumas vezes.

Vou fazer mais uns teste com esse artigo que tu me passou.

Após testar mais, posto o resultado.

Obrigado pelo ajuda!


5. Re: Redirecionamento de porta não funciona com o load balance

leonardo Souza
lejoso

(usa Debian)

Enviado em 03/10/2014 - 23:25h

Se não me engano o Zabrix usa o protocolo UDP, que não é orientado a conexão, por isso não funciona, pois o CONNMARK armazenas conexões (leia-se conexões inteiras, análise de seq do cabeçalho TCP, confirmações entre outros) no conntrack. Provavelmente seja identificado como outra conexão, por isso não funciona.
Nesse caso sugiro configurar para o ip do zabbix usar apenas 1 link.
O protocolo UDP é chato nesse ponto.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts