28 julho 2008

Roteamento no linux

Roteamento é quando uma máquina com multiplas conexões de rede decide onde entregar os pacotes IP que recebeu, para que cheguem ao seu destino.

Pode ser útil ilustrar isto com um exemplo. Imagine um simples roteador de escritório, ele pode ter um link. Intermitente com a Internet, um número de segmentos ethernet alimentando as estações de trabalho e outro link PPP intermitente fora para outro escritório. Quando o roteador recebe um datagrama de qualquer de suas conexões de rede, o mecanismo que usa determina qual a próxima interface deve enviar o datagrama. Computadores simples também precisam rotear, todos os computadores na Internet tem dois dispositivos de rede, um é a interface _loopback_ o outro é um usado para falar com o resto da rede, talves uma ethernet, talvez uma interface serial PPP ou SLIP.

Interface _loopback_ é um tipo especial de interface que permite fazer conexões com você mesmo. Todos os computadores que usam o protocolo TCP/IP utilizam esta interface e existem várias razões porque precisam fazer isto, por exemplo, voçê pode testar vários programas de rede sem interferir com ninguem em sua rede. Por convenção, o endereço IP 127.0.0.1 foi escolhido especificamente para a loopback, assim se abrir uma conexão telnet para 127.0.0.1, abrirá uma conexão para o próprio computador local.

Caso a interface loopback não esteja configurada, você poderá ter problemas quando tentar qualquer tipo de conexão com as interfaces locais, tendo problemas até mesmo com o comando PING.

OK, viu como um roteamento? cada computador mantém uma lista de regras especiais de roteamento, chamada _tabela de roteamento_. Esta tabela contém colunas que tipicamente contém no mínimo três campos, o primeiro é o _endereço de destino_, o segundo é o _nome da interface_ que o datagrama deve ser roteado e o terceiro é opcionalmente o _endereço de IP_ da outra máquina que levará o datagrama em seu próximo passo através da rede. No GNU/Linux você pode ver a tabela de roteamento usando um dos seguintes comandos:

# cat /proc/net/route

# route -n

# netstat -r

O processo de roteamento é muito simples: um datagrama (pacote IP) é recebido, o endereço de destino (para quem ele é) é examinado e comparado com cada item da tabela de roteamento. O item que mais corresponder com o endereço é selecionado e o datagrama é direcionado a interface especificada.

Configurando uma rora no Linux

A configuração da rota é feita através da ferramenta ROUTE. Para adicionar uma rota para a rede 192.168.1.0 acessível através da interface eth0 basta digitar o comando:

# route add -net 192.168.1.0 eth0

Para apagar a rota acima da _tabela de roteamento_, basta substituir a palavra ADD por DEL. A palavra NET quer dizer que 192.168.1.0 é um endereço de rede, para especificar uma máquina de destino, basta usar a palavra -HOST. Endereços de máquina de destino são muito usadas em conexões de rede apenas entre dois pontos (como ppp, slip, plip). POr padrão, a interface é especificada como último argumento. Caso a interface precise especifica-la em outro lugar, ela deverá ser precedida da opção -DEV.

Para adicionar uma rota padrão para um endereço que não encontre na tabela de roteamento, utiliza-se o _gateway padrão de rede_. Através do gateway padrão é possivel especificar um computador (normalmente outro gateway) que os pacotes de rede serão enviados caso o endereço não confira com os da tabela de roteamento. Para especificar o computador 192.168.1.1 como _gateway padrão_ usamos:

# route add default gw 192.168.1.1 eth0

O _gateway padrão_ pode ser visualizado através do comando ROUTE -R e verificado o campo gateway. A opção GW acima, especifica que o próximo argumento é um enderço IP (de uma rede já acessivel através das tabelas de roteamento).

O computador _gateway_ está conectado a duas ou mais redes ao mesmo tempo. Quando seus dados precisam ser enviados para computadores fora da rede, eles são enviados através do computador _gateway_ e o _gateway_ encaminham ao endereço de destino. Desta forma, a resposta do servidor também é enviada através do _gateway_ para seu computador (é o caso de uma típica conexão com a internet).

A nossa configuração ficaria assim:

# route add -net 192.168.1.0 eth0

# route add default gw 192.168.1.1. eth0

Fonte: Guia Foca GNU/LINUX

Postar um comentário