Netfilter & iproute – marcação de pacotes :: Admirável Mundo Novo




Muito Bem Vindo

Prezado Leitor, a proposta desse Blog é compartilhar conhecimento com as pessoas que trabalham com Linux, Asterisk, OpenSER, e com tecnologia de voz sobre a rede IP em geral, através de tutoriais, dicas, howto, notícias entre outros assuntos.

Atente para termo de uso do conteúdo do blog no rodapé da página.

sexta-feira, 9 de janeiro de 2009

Netfilter & iproute – marcação de pacotes




Capítulo 11. Netfilter & iproute – marcação de pacotes

Até aqui temos visto como o iproute funciona, e o netfilter foi mencionado algumas vezes. Esse seria um bom momento para surfar através do Guia Bastante Não Confiável de Rusty. O netfilter em si pode ser encontrado aqui.

O netfilter permite-nos filtrar pacotes, ou manipular seus cabeçalhos. Uma funcionalidade especial é que nós podemos marcar um pacote com um número. Isso é feito com a facilidade --set-mark.

Como exemplo, esse comando marca todos os pacotes destinados a porta 25, no email sainte:

# iptables -A PREROUTING -i eth0 -t mangle -p tcp --dport 25 -j MARK --set-mark 1


Digamos que nós temos múltiplas conexões, uma que é rápida (e cara, por megabyte) e outra que é lenta, porém de tarifa flat. Nós gostaríamos muito certamente que os emails saintes sigam pela rota barata.

Já temos marcado os pacotes com um número ‘1’, agora instruiremos o database de política de roteamento para atuar sobre isso:

# echo 201 mail.out >> /etc/iproute2/rt_tables
# ip rule add fwmark 1 table mail.out
# ip rule ls

0: from all lookup local
32764: from all fwmark 1 lookup mail.out
32766: from all lookup main
32767: from all lookup default


Agora geraremos um rota para o link lento, mas barato na tabela mail.out:

# /sbin/ip route add default via 195.96.98.253 dev ppp0 table mail.out


E concluímos. Se desejássemos fazer exceções, existem muitas formas de conseguir isso. Nós podemos modificar a instrução netfilter para excluir certos hosts, ou nós podemos inserir uma regra com uma prioridade mais baixa que aponte para a tabela principal para nossos hosts excepcionalizados.

Nós podemos também usar essa funcionalidade para honrar os bits TOS marcando pacotes com um diferente tipo de serviço com diferentes números, e criar regras para agir sobre isso. Dessa forma você pode mesmo dedicar, digamos, um link ISDN para as sessões interativas.

É inútil dizer que isso funciona bem sobre um host que esteja fazendo NAT (‘masquerading’).

IMPORTANTE: Nós recebemos um relato de que o MASQ e o SNAT pelo menos colidem com a marcação de pacotes. Rusty Russell explica-o nessa postagem. Desligue o filtro do caminho reverso para fazê-lo funcionar adequadamente.


Obs.: Para marcar pacotes, você precisa ter algumas opções habilitadas em seu kernel:

IP: advanced router (CONFIG_IP_ADVANCED_ROUTER) [Y/n/?]
IP: policy routing (CONFIG_IP_MULTIPLE_TABLES) [Y/n/?]
IP: use netfilter MARK value as routing key (CONFIG_IP_ROUTE_FWMARK) [Y/n/?]


Veja também a Seção 15.5 no Cookbook.




Leituras Complementares:
http://www.rnp.br/newsgen/0201/roteamento_linux.html;
http://linuxflex.blogspot.com/2008/02/controle-de-trfego.html;
http://www.numaboa.com/informatica/linux/configuracoes/703-roteamento-linux;
http://ornellas.apanela.com/dokuwiki/pub:pt-br:linuxfwrt.








Autores Originais dos textos:

Bert Hubert (Netherlabs BV)
bert.hubert@netherlabs.nl

Thomas Graf (Autor de Seção)
tgraf@suug.ch

Gregory Maxwell (Autor de Seção)
greg@linuxpower.cx

Remco van Mook (Autor de Seção)
remco@virtu.nl

Martijn van Oosterhout (Autor de Seção)
kleptog@cupid.suninternet.com

Paul B Schroeder (Autor de Seção)
paulsch@us.ibm.com

Jasper Spaans (Autor de Seção)
jasper@spaans.ds9a.nl

Pedro Larroy (Autor de Seção)
piotr@member.fsf.org








Nenhum comentário:




Creative Commons License
Admirável Mundo Novo: Tudo Sobre Asterisk, OpenSER, Linux e Tecnologias de Voz sobre IP
by Cléviton Mendes de Araújo is licensed under a Creative Commons Atribuição 2.5 Brasil License.