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: 17182
Regras: base de dados da política de roteamento
Quando se tem um roteador mais parrudo, que precisa atender as necessidades de muitas pessoas, entram em jogo as tabelas de roteamento da base de dados da política de roteamento. Para usar esta característica, o kernel do Linux precisa ter sido compilado com "IP: advanced router" e "IP: policy routing".
Quando o kernel precisar tomar uma decisão de roteamento, ele descobre qual tabela deve ser consultada. Como default, há três tabelas. Tanto a ferramenta "route" quanto a "ip" modificam as tabelas principal (main) e local.
$ ip rule list 0: from all lookup local 32766: from all lookup main 32767: from all lookup default
O comando ip rule list mostra a prioridade de todas as regras. De acordo com a listagem acima, todas as regras são aplicadas a todos os pacotes ("from all"). Já vimos a tabela principal quando usamos o comando ip route list (ip route ls é a mesma coisa), mas as tabelas local e default são novidade.
Se quisermos roteamentos mais sofisticados, podemos criar regras que apontam para outras tabelas que permitem modificar as regras de roteamento do sistema. Para a sintaxe correta, procure o Dicionário do iproute2 (tradução do texto de Alexey N. Kuznetsov).
Uma política de roteamento simples
Vamos a um exemplo muito comum no mundo real: dois cable modems conectados a um roteador Linux NAT ("mascarador") instalados num edifício. Os moradores do edifício pagam para usar a Internet. Imagine que um deles usa apenas o hotmail e quer pagar menos. Tudo bem para o administrador do sistema, só que o freguês vai acabar usando o low-end cable modem.
O cable modem "rápido" é conhecido como 212.64.94.251 e é um link PPP para 212.64.94.1. O cable modem "lento" é conhecido por vários endereços IP, 212.64.78.148 neste exemplo, e é um link para 195.96.98.253.
A tabela local
$ ip route list table local broadcast 127.255.255.255 dev lo proto kernel scope link src 127.0.0.1 local 10.0.0.1 dev eth0 proto kernel scope host src 10.0.0.1 broadcast 10.0.0.0 dev eth0 proto kernel scope link src 10.0.0.1 local 212.64.94.251 dev ppp0 proto kernel scope host src 212.64.94.251 broadcast 10.255.255.255 dev eth0 proto kernel scope link src 10.0.0.1 broadcast 127.0.0.0 dev lo proto kernel scope link src 127.0.0.1 local 212.64.78.148 dev ppp2 proto kernel scope host src 212.64.78.148 local 127.0.0.1 dev lo proto kernel scope host src 127.0.0.1 local 127.0.0.0/8 dev lo proto kernel scope host src 127.0.0.1
tem uma porção de coisas que precisam ser especificadas. Bem, é aqui mesmo que elas estão. Quanto à tabela default... bem, esta está vazia. Já a tabela principal mostra o seguinte:
$ ip route list table main 195.96.98.253 dev ppp2 proto kernel scope link src 212.64.78.148 212.64.94.1 dev ppp0 proto kernel scope link src 212.64.94.251 10.0.0.0/8 dev eth0 proto kernel scope link src 10.0.0.1 127.0.0.0/8 dev lo scope link default via 212.64.94.1 dev ppp0
Agora, para atender o Marco, o morador que só usa o hotmail, vamos criar uma regra nova. Mesmo podendo trabalhar apenas com números, é muito mais fácil adicionarmos nossas tabelas ao arquivo /etc/iproute2/rt_tables.
# echo 200 Marco >> /etc/iproute2/rt_tables # ip rule add from 10.0.0.10 table Marco # ip rule ls 0: from all lookup local 32765: from 10.0.0.10 lookup Marco 32766: from all lookup main 32767: from all lookup default
Agora só falta criar a tabela do Marco e dar uma limpada no cache de rotas:
# ip route add default via 195.96.98.253 dev ppp2 table Marco # ip route flush cache
E isto é tudo. Aproveite o exemplo e comece a brincar um pouco