[ Hits: 375.657 ]
Quando tive meu primeiro problema de alto tráfego em uma empresa que presto serviço, observei que precisaria usar algum recurso disponível no Linux para que eu pudesse contratar um segundo link de conexão com a internet, bem como utilizar os dois simultaneamente.
Tal empresa possuía um link ADSL (velox) de 1MB, porém o link estava ficando saturado em grande parte do dia (e isso porque já fazia controle de banda e cache de HTTP também!), dando para perceber a dimensão da rede. Meu objetivo era contratar mais um velox de 1MB, configurá-lo no mesmo servidor e construir um Advanced Router em Linux. O Kernel do Linux pode nos proporcionar a utilizar os recursos de roteamento dinâmico e roteamento estático.
* Característica de um Advanced Router fazendo roteamento dinâmico
1. Com o servidor tendo duas saídas de internet, o kernel iria utilizar as duas, porém para a primeira requisição que chegasse da LAN ele utilizaria a saida1 de internet, para a segunda requisição ele utilizaria a saida2, para a terceira requisição ele utilizaria a saida1 e assim por diante.
Eu teria uma desvantagem com esse recurso, pois suponhamos que se um IP fizesse uma requisição de download de um arquivo de 600MB e o mesmo fosse um IP de propriedade do dono da empresa, onde a sua velocidade de link configurada fosse de 512Kbps com prioridade máxima para esse IP. Quando o download fosse se estabelecer, ele obrigatoriamente teria que sair por um link, consumindo assim quase todo o recurso desse link. Porém, quando uma outra requisição fosse passar por esse link já saturado pela conexão do dono da empresa, a conexão ficaria lenta e quem desse a sorte de sair pela as outras iria se dar bem. Podemos observar nesse hipotético exemplo onde temos 2Links de 1MB cada, onde jamais iremos conseguir fazer um download com a taxa de 2MB e sim fazer 2 downloads com a taxa de 1MB cada.
Mesmo com essa desvantagem, eu queria utilizar esse recurso na empresa, pois não iria me preocupar com a queda de qualquer um dos links, pois o kernel já se encarrega de fazer os ajustes em suas rotas automaticamente. Mas depois de muito estudo e pesquisa, pude comprovar que esse recurso não funciona com NAT. Ou seja, ele funciona muito bem em uma rede com IP válido, onde o servidor faria realmente um papel de roteador. Não irei abordar nesse artigo por quê esse recurso não funciona com NAT, pois é um problema difícil de ser explicado e melhor entendido na prática (eu mesmo só fui entender vendo esse problema acontecer).
* Característica de um Advanced Router fazendo roteamento estático
1. Com o servidor tendo duas saídas de internet, o kernel poderia utilizar algumas classes ou IP's para sair especificamente pela saida1 ou saida2. Isso seria um roteamento feito por origem de IP's ou classes de uma rede.
Por exemplo: os IP's de origem sendo 10.12.0.10 e 10.12.0.11 teriam como rota específica a saida2 de internet ou as classes de origem sendo 10.13.0.0/24 e/ou 10.14.0.0/24 também teriam como rota específica a saida2 de internet.
2. Também poderia usar um excelente recurso de marcação de pacotes para fazermos o roteamento. Com isso, podemos marcar todos os pacotes com destino aos serviços http, pop, smtp, etc.... Sendo assim, podemos rotear esses pacotes marcados com um número qualquer pela saida2. Com isso podemos definir o seguinte esquema de roteamento:
Pacotes com destino aos serviços de http e https vão sair pela saida2 de internet e o restante irá sair pela saida1.
A pergunta que deve está na cabeça dos leitores que estão lendo artigo nesse exato momento é a seguinte:
E se um dos links cair? O kernel irá fazer a mudança de rota automaticamente?
R.: Não. Se um dos links cair, teremos que fazer a mudança de rota na mão mesmo. No final desse artigo iremos ver tudo isso na prática, onde as coisas irão ficar mais claras.
No meu caso, eu já sabia que o maior vilão de consumo de link era o protocolo http e em virtudes disso elaborei uma saída específica para esse serviço, sendo o link2. Os demais protocolos seriam roteados a saírem pelo link1.
O recurso de roteamento estático no kernel do Linux é extremamente estável, podendo ser adaptado para diferentes situações.