Roteamento avançado com o Linux
O Sistema Operacional Linux possui em seu Kernel um conjunto poderoso de recursos para definição de regras de roteamento, o que permite que o mesmo seja utilizado para se obter soluções de problemas não convencionais de roteamento nos quais, muitas vezes, nem mesmo roteadores propriamente ditos, construÃdos em hardware especializado, oferecem uma solução a contento.
Este artigo descreve um pouco do funcionamento destes recursos, de acordo com a nova filosofia de definição de regras de roteamento, presente na série 2.4 do Kernel do Linux, perfazendo um estudo de caso de uma rede conectada a múltiplos provedores de backbone, em um comparativo com as soluções apresentadas a este problema no artigo “Roteando pela Origem com Linuxâ€, publicado no número 7 do volume 2 do NewsGeneration, com o uso dos recursos da série 2.0 do Kernel do Linux.
Por: Allan Edgard Silva Freitas – Centro Federal de Educação Tecnológica da Bahia – CEFET-BA Coordenação Técnica de Informática – COINF
Â
1. Introdução
Â
O Kernel do Linux, a partir da série 2.2, evoluiu para um sub-sistema de rede completamente novo e remodelado. O código deste subsistema é extremamente flexÃvel, robusto e, graças a funções especiais, faz par a poucos sistemas operacionais, mesmo considerando o firmware de roteadores dedicados. As funções especiais existentes neste subsistema do Linux incluem diretivas diversas de roteamento, controle, filtragem e priorização de tráfego.
Embora o Linux possua tanta flexibilidade, perdemos o uso de tais funções pelo simples fato de que na maior parte dos sistemas a configuração é baseada em utilitários presentes em toda base UNIX, nos quais a configuração e uso das funções especiais do Kernel do Linux não são acessÃveis, como os comandos arp, ifconfig e route. Estes comandos, embora utilizem syscalls adaptadas ao novo subsistema, fazem as chamadas passando diversos argumentos com valores padrão, perdendo-se a flexibilidade de configuração neles existente. Contudo, um pacote chamado iproute2 liberta o poder do sub-sistema de rede do Linux, permitindo a configuração de sistemas com toda a flexibilidade existente no Kernel, de forma poderosa, sem perder a facilidade de uso das ferramentas anteriores. Ainda será abordado o uso do iptables, o qual permite definir diversas regras de tratamento de pacotes, que tornam um servidor Linux um seguro firewall.
Â
2. Ambiente de uso
Â
Como ambiente de uso, será descrita a configuração sobre um gateway baseado no Linux Slackware 8.0. O Sistema Operacional Linux está disponÃvel sob a forma de diversas distribuições. Para os propósitos deste artigo, qualquer distribuição baseada em Kernel da série 2.4, com os pacotes iptables e iproute2 poderia ser empregada. O Slackware na sua versão 8.0 vem com o Kernel na versão 2.4.5 e o iptables. Será descrito, a seguir, a otimização do Kernel para os propósitos de operação de um roteador, bem como a instalação do pacote iproute2.
A instalação do Slackware 8.0 não apresenta maiores dificuldades para administradores de sistemas. Não será abordado todo o processo em si por fugir do escopo do artigo. Contudo, na seleção dos pacotes deve-se optar pela instalação do Kernel na versão 2.4.5 (em detrimento da versão da série 2.2 oferecida como padrão de instalação) e pela instalação do pacote iptables.
Efetuada a instalação, é interessante recompilar o Kernel para habilitar as opções existentes que permitem a atuação de um servidor Linux como um roteador avançado. Para recompilarmos o Kernel, execute os seguintes passos:
# cd /usr/src/linux
# make menuconfig
Este comando permite a configuração através de menus das funções a serem compiladas no Kernel. Parte destas funções estão em processo de constante desenvolvimento e modificação, portanto, no item “Code maturity level options”, selecione:
[*] Prompt for development and/or incomplete code/drivers
Devem ser habilitados os drivers de dispositivos correspondentes às interfaces de rede existentes no sistema, através do item Network Device Support.
As opções existentes referentes ao subsistema de rede do Linux se encontram em Networking Options. Faremos uma descrição suscinta dos itens de maior relevância. Por padrão, o protocolo IP na sua versão 4, na qual se baseia a Internet, encontra-se habilitado através de:
[*] TCP/IP Networking.
Há uma versão mais atual do protocolo IP, o IPv6, a qual foi desenvolvida para ser utilizada no futuro na Internet. Caso se queira, pode-se fazer experimentações com esta nova versão do protocolo. As ferramentas abordadas neste artigo atuam com o IPv6 e maiores informações sobre o protocolo podem ser obtidas no Projeto 6Bone-BR em http://www.6bone.rnp.br/. As opções referentes ao mesmo são:
<*> The IPv6 Protocol
[*] enable EUI-64 token formatÂ
Para utilizar a ferramenta iptables, ou comandos da ferramenta ip sobre o objeto rule, possibilitando recursos com NAT e Proxy Transparent, devemos habilitar as opções:
[*] Network packet filtering (replaces ipchains)
[*] Network packet filtering debugging
[*] Socket FilteringÂ
E, ainda, devemos ativar as opções existentes no subitem “IP: Netfilter Configuration”, dentre as quais o suporte a iptables.
Para o suporte ao estabelecimento de túneis de protocolo, ative:
<*> IP: tunneling
<*> IP: GRE tunnels over IPÂ
Um recurso bastante interessante de rede (com algumas melhorias com o IPv6), o Multicast, é uma opção a se observar:
[*] IP: multicasting
[*] IP: multicasting routingÂ
Opções avançadas de roteamento, incluindo NAT, devem estar ativas para os nossos propósitos:
[*] IP: advanced router
[*] IP: policy routing
[*] IP: use netfilter MARK value as routing key
[*] IP: fast network address translation
[*] IP: equal cost multipath
[*] IP: use TOS value as routing key
[*] IP: verbose route monitoring
[*] IP: large routing tables
Para, então, compilar o Kernel, salva-se a configuração e segue-se os seguintes passos:
# make dep
# make clean
# make bzImage
# make modules
# make install
# make modules_install
Para instalar o pacote iproute, deve-se fazer o download do mesmo no endereço ftp://ftp.inr.ac.ru/ip-routing/iproute2-current.tar.gz. Este link simbólico aponta para a última versão estável disponÃvel para download. A versão do iproute2, indicada pelo arquivo iproute2-current.tar.gz, que foi utilizada neste artigo, foi a do arquivo iproute2-2.4.7-now-ss010824. tar.gz . Após obter o pacote, deve-se executar os seguintes passos:
# cp iproute2-current.tar.gz /usr/src/
# cd /usr/src
# tar –zxpvf iproute2-current.tar.gz
# cd iproute2
# make
Â

Deixe seu comentário