Pular para o conteúdo principal

#_ IProute2 - Load Balanced - Parte 1

Balancemento de carga - Introdução


Nesse tutorial realizaremos um balanceamento de carga com dois links de WAN, gostaria de frizar que esse procedimento "não é recomendavel ser realizado em um ambiente em produção".

Nesse exemplo temos dois links WAN, mas podemos utilizar a mesma configuração para 3 ou mais, apenas adicionando tabelas e configuração no arquivo final.



Nessa imagem temos dois links de diferente capacidades que terá prioridade diferentes, onde a cada fileira de 4 pacotes 3 passarão pela internet1 quanto que o outro passará pela internet2. Portanto 75% da carga na tabela link1 e os outros 25% da carga para tabela link2.

Infraestrutura


Configuração de WAN trocamos com as definições de configuração que as operadora fornece, portanto é interessante criar um script trabalhando com funções para que se houver adição de mais links apenas adiciona uma nova função.


O nosso Gateway possui 3 placas de rede
  • eth0 -- 10.0.2.15/24 - gateway 10.0.2.2 
  • eth1 -- 10.0.3.15/24 - gateway 10.0.3.2
  • eth2 -- 192.168.0.1 - Rede local com a qual iremos compartilhar
Nosso Gateway precisa ter aquelas configurações padrões de FORWARD e MASQUARADE:

# echo "iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE" >> /etc/rc.local
# echo 1 > /proc/sys/net/ipv4/ip_forward
# vi /etc/sysctl.conf
net.ipv4.ip_forward=1

Atentando a sempre deixar as configurações como definitiva.

Configuração Tabelas


Para essa configuração utilizaremos o próprio iproute2 para manipulação de todo o tráfego, esse tutorial foi elaborado para ter uma visão superficial e não entrarei em detalhes.

O que iremos realizar é a criação de duas tabelas de roteamento sendo que cada uma será agregada a uma interface WAN.

Iremos editar o arquivo "/etc/iproute2/rt_tables" no arquivo adicione as duas linhas referente a identificação da tabela e o nome dela:

# vi /etc/iproute2/rt_tables
200     link1
210     link2

Após salvar e sair do arquivo as tabelas já estarão prontas, visualizando com:

# ip route show table link1
# ip route show table link2

Agora utilizaremos um guia para elaboração das tabelas que podemos

Interface eth0, tem endereço 10.0.2.15 e mascara 255.255.255.0 e gateway dessa placa é 10.0.2.2.

Interface eth1, tem endereço 10.0.3.15 e mascara 255.255.255.0 e gateway dessa placa é 10.0.3.2.

Agora iremos configurar as duas tabelas, está é a configuração da link1:

# ip route add 255.255.255.0 dev eth0 src 10.0.2.15 table link1
# ip route add default via 10.0.2.2 table link1
# ip route add 127.0.0.0/8 dev lo table link1

Essa configuração é bem simples, seria uma configuração parecida com a tabela padrão que possuimos.

Está configuração da link2:

# ip route add 255.255.255.0 dev eth1 src 10.0.3.15 table link2
# ip route add default via 10.0.3.2 table link2
# ip route add 127.0.0.0/8 dev lo table link2

Realizamos a mesma configuração na outra tabela, para que os pacotes se guie.

Agora tudo que vier do ip para tabela refente:

# ip rule add from 10.0.2.15 table link1
# ip rule add from 10.0.3.15 table link2

E a cereja do bolo, load balance com o iproute:
OBS: delete a rota padrão já configurada ou desative na interface caso crie um script de utilização.

# ip route del via default 

# ip route add default \
nexthop via 10.0.2.15 dev eth0 weight 1 \
nexthop via 10.0.3.15 dev eth1 weight 1 

Pessoal agora iremos falar de algo interessante que é o parametro weight, o significado é o peso, que no caso está 50% para ambos. Isso é ainda mais interessante quando temos um link maior do que o outro.

Pensando, tendo dois links de eth0 10M e de eth1 50M, mudar o peso colocando mais carga para 50M.

# ip route add default \
nexthop via 10.0.2.15 dev eth0 weight 1 \
nexthop via 10.0.3.15 dev eth1 weight 3

Então eth0 assumirá 25% das requisições do tráfego e os outros 75% passará para interface eth1, tendo melhor qualidade na utilização dos links, diminuido a subutilização e melhor investimento.


Brincando NetFilter


Gostaria de agregar mais a esse tutorial, esse material realizei na prática em vários cliente e em caso de central telefonica e gateway mantidos por mim onde possuia PABX VoIP e solução de gateway próprio.

Nosso exemplo possuimos eth0 10M e eth1 50M, mas eth0 possuir uma velocidade baixa comparado a eth1, mas possui um link dedicado 10M de upload e 10M de download, excelente para utilização de tráfego de voz onde permite uma melhor qualidade tanto na escuta quanto no fala.

Resumindo oque proponho é que esse PABX VoIP saia por uma interface de melhor qualidade que é a eth0 para que não haja problemas com ligações repicotadas é ai que entra o iptables, vamos lá:

# iptables -t mangle -A PREROUTING -i eth2 -p all -s 192.168.0.21 -j MARK --set-mark 1

Explicação:
eth2 - Interface da rede ligada a rede interna.
-p all - Todos os pacotes.
-s 192.168.0.21 - Host dentro da rede interna que passará por está regra.
-j MARK - Marcando pacote como identificação 1.

Galera agora só criamos a regra no iproute para que jogue todos os pacotes marcado na tabela que escolhermos ( ou link especifico ).

# ip rule add fwmark 1 table link1

Saindo do contexto, podemos redirecionar protocolos e portas para determinados links, vamos realizar um teste:

# iptables -t mangle -A PREROUTING -i eth2 -p tcp -m multiport --dport 80,443 -j MARK --set-mark 2

E na sequencia um rule:

# ip rule add fwmark 2 table link2

Pronto, nossa que fácil, vamos verificar isso no monitoramento na próxima parte.


Comentários

Postagens mais visitadas deste blog

QOS Intermediário - Implantação em cliente real

Implantação de QOS - Intermediário Introdução Nessa etapa seguiremos novamente o caminho do controle de tráfego, mas com uma pitada mais avançada delimitando por classes e em tempo real. Nessa video aula trará um pouco de shell-script junto com controle de tráfego e passando um pouco que vai ser um dos próximos tópicos que é o ZABBIX. O video realmente ficou extenso, porque tentei documentar ao máximo cada parte e explicar o porque da utilização de cada função.

Zabbix - Entendendo Agentes

Zabbix Agente - Instalação e configuração Introdução O Zabbix trabalha em sua estrutura basicamente duas funções como: Gerente - Zabbix que armazena informações e entre outras, agindo como Servidor ) Agente - Zabbix instalado em hosts que coleta informações para serem enviadas ao gerente.  O que iremos entender nesse tutorial é os modos como os agentes trabalha ativo e passivo. Ativo - Ele envia os dados para o servidor ( gerente ), muito utilizado quando o host está em outras redes através de firewall. Passivo - Ele aguarda solicitação do servidor ( gerente ) para a entrega dos dados. A configuração do agente e de acordo com as nossas necessidades no momento.

IDS Sistema detecção de intrusão - FAIL2BAN

IDS com FAIL2BAN Introdução IDS é um sistema de detecção de intrusos que podemos implementar em dois segmentos em rede e sistema. Iremos abordar o fail2ban, uma poderosa ferramenta contra tentativas de força bruta ( meio de ataque através de diversas tentativas de acesso ), esse serviço é muito utilizado em servidores que respondem diretamente a internet, a configuração acaba sendo muito útil para bloqueio sendo sua principal vantagem a velocidade. Funcionamento Partindo de analises rigorosas de log como tentativas repetitivas de falhas como por exemplo em uma tentativa de acesso via SSH em nosso firewall: Jun 28 20:24:13 serv-firewall unix_chkpwd[1491]: password check failed for user (root) Jun 28 20:24:13 serv-firewall sshd[1489]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost= 192.168.122.1 user= root Jun 28 20:24:15 serv-firewall sshd[1489]: Failed password for root from 192.168.122.1 port