Informática Numaboa - Linux
Roteamento em redes Linux
Qui 12 Abr 2007 22:39 |
- Detalhes
- Categoria: Como fazer configurações
- Atualização: Domingo, 12 Abril 2009 16:58
- Autor: vovó Vicki
- Acessos: 17181
Roteando para múltiplos uplinks/provedores
Uma configuração muito comum é a mostrada na Fig.1, na qual há dois provedores que conectam uma rede local (ou até mesmo uma única máquina) com a Internet.
Geralmente existem dois pontos importantes nesta configuração: fracionamento de acesso e balanço de carga.
- Fracionamento de acesso
A primeira tarefa é garantir que as respostas a pacotes vindos de um determinado provedor sejam roteadas para este mesmo provedor. Para isto vamos começar criando alguns nomes simbólicos. A primeira interface será chamada de $IF1 (if1 da figura acima) e a segunda de $IF2. O endereço IP da primeira interface será $IP1 e, o da segunda, $IP2. O endereço do gateway no Provedor 1 será $P1; o do segundo será $P2. Finalmente, $P1_NET será o nome da rede IP onde está $P1 e $P2_NET o nome da rede IP onde está $P2.
Bão... agora está na hora de criar duas tabelas de roteamento adicionais, a T1 e a T2. Estas tabelas devem ser adicionadas ao arquivo /etc/iproute2/rt_tables. Depois é só adicionar rotas nestas tabelas com o seguinte:
ip route add $P1_NET dev $IF1 src $IP1 table T1 ip route add default via $P1 table T1 ip route add $P2_NET dev $IF2 src $IP2 table T2 ip route add default via $P2 table T2
Até aqui, nada de excepcional. Criamos uma rota para o gateway e uma rota default que passa através deste gateway, mas as rotas devem ser colocadas em tabelas separadas, uma para cada provedor. Note que basta uma rota de rede porque ela permite encontrar qualquer host nesta rede, o que inclui o gateway (como especificado acima).
Depois é só caprichar na tabela de roteamento principal. Uma boa idéia é rotear coisas para o vizinho mais próximo através da interface conectada a este vizinho. Os argumentos "src" garantem que o endereço IP de saída seja selecionado.
ip route add $P1_NET dev $IF1 src $IP1 ip route add $P2_NET dev $IF2 src $IP2
Depois, vamos indicar a preferência para a rota default:
ip route add default via $P1
As regras de roteamento vêm a seguir. Estas regras determinam a tabela que deve ser usada para fazer o roteamento. Aqui é preciso indicar a interface de saída correta, de acordo com o endereço de origem. O conjunto de comandos a seguir garante que todas as respostas ao tráfego que chega através de uma determinada interface sejam despachadas pela mesma interface:
ip rule add from $IP1 table T1 ip rule add from $IP2 table T2
Se $P0_NET for a rede local e $IF0 for sua interface, é aconselhável fazer as seguintes entradas adicionais:
ip route add $P0_NET dev $IF0 table T1 ip route add $P2_NET dev $IF2 table T1 ip route add 127.0.0.0/8 dev lo table T1 ip route add $P0_NET dev $IF0 table T2 ip route add $P1_NET dev $IF1 table T2 ip route add 127.0.0.0/8 dev lo table T2
Este exemplo é de uma configuração bem básica. Vai funcionar para todos os processos que estejam rodando no roteador, como também para a rede local se ela tiver uma máscara. Se não, então existe um espaço IP dos dois provedores ou há uma máscara para um dos provedores. Em ambos os casos é preciso adicionar regras que selecionem o provedor que fará o roteamento de saída de acordo com o endereço IP da máquina da rede local.
- Balanceamento de carga
O segundo ponto importante é equilibrar o tráfego de saída dos dois provedores. Esta não é uma tarefa difícil se o fracionamento de acesso já estiver configurado.
Ao invés de escolher um dos provedores como rota default, podemos configurar a rota default como uma rota multi-caminho. No kernel padrão isto fará com que as rotas sejam balanceadas, isto é, sejam divididas entre os dois provedores de forma equilibrada. Continuando com o exemplo do fracionamento de acesso, a coisa fica assim:
ip route add default scope global nexthop via $P1 dev $IF1 weight 1 \ nexthop via $P2 dev $IF2 weight 1
Isto vai dividir e equilibrar as rotas entre os dois provedores. Os parâmetros weight podem ser alterados para favorecer (ou penalizar ) um dos provedores.
Na prática este equilíbrio não é perfeito porque é baseado em rotas e as rotas vão para o cache. Como resultado, as rotas para os sites mais solicitados acabam passando sempre pelo mesmo provedor.
Se você está pensando em botar o fracionamento de acesso e o balanço de carga para funcionar, talvez seja bom dar uma olhada na página de patches do Julian Anastasov's em http://www.ssi.bg/~ja/#routes. São patches ótimos que já facilitaram a vida de muita gente.