A Aldeia Numaboa ancestral ainda está disponível para visitação. É a versão mais antiga da Aldeia que eu não quis simplesmente descartar depois de mais de 10 milhões de pageviews. Como diz a Sirley, nossa cozinheira e filósofa de plantão: "Misericórdia, ai que dó!"

Se você tiver curiosidade, o endereço é numaboa.net.br.

Leia mais...

Informática Numaboa - Linux

Roteamento em redes Linux

Qui

12

Abr

2007


22:39

(10 votos, média 4.80 de 5) 


Nível avançado A maioria das distribuições Linux usam os veneráveis comandos arp, ifconfig e route. Apesar de excelentes, estas ferramentas apresentam alguns comportamentos inesperados no Linux 2.2 (ou superior) - portanto, apesar de soar meio herético, esqueça-as.

A partir da versão 2.2 o Linux possui um novo subsistema de rede totalmente redesenhado. Seu novo código de roteamento, filtragem e classificação possui muito mais recursos que os oferecidos por muitos roteadores dedicados, firewalls e modeladores de tráfego disponíveis no mercado. Difícil de acreditar? Então conheça o novo iproute2 e tire a cisma smile

Aviso aos navegantes

Existem alguns pré-requisitos para poder acompanhar este tutorial. Os mais importantes são: você precisa ter uma noção clara do que é uma rede Linux, de como funciona o sistema de comunicação TCP/IP e do que são endereços de rede. Tudo isto está em outro tutorial - Redes Linux.

O iproute2

O Linux possui um sofisticado sistema para provisionar largura de banda chamado Traffic Control. Este sistema permite vários métodos de classificação, priorização, compartilhamento e limitação tanto do tráfego de entrada, quanto do de saída. Para testar as capacidades do iproute2, certifique-se de que o pacote 'iproute' está instalado usando o comando ip descrito a seguir. Se a máquina responder, está tudo em riba; senão, baixe a última versão do iproute e instale-a antes de prosseguir.

Explorando a configuração do seu iproute

Curioso para saber quais são os links da sua máquina? Use o comando atencao ip link list do iproute:

$ ip link list
1: lo:  mtu 3924 qdisc noqueue
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0:  mtu 1400 qdisc pfifo_fast qlen 100
    link/ether 48:54:e8:2a:47:16 brd ff:ff:ff:ff:ff:ff
3: eth1:  mtu 1500 qdisc pfifo_fast qlen 100
    link/ether 00:e0:4c:39:24:78 brd ff:ff:ff:ff:ff:ff
3764: ppp0:  mtu 1492 qdisc pfifo_fast qlen 10
    link/ppp

Se a sua máquina respondeu a este comando, sua máquina está com o iproute2 instalado e funcionando. O resultado deve ser algo parecido com o mostrado acima porque depende do número de placas Ethernet e do tipo dos links instalados. As principais informações fornecidas são:

O primeiro link mostrado é o da interface loopback. O tamanho MTU (Maximum Transfer Unit) é de 3924 octetos e foi configurado para não entrar na fila (noqueue) - o que faz sentido, já que a interface loopback é "imaginária". A seguir são listadas duas placas Ethernet, suas respectivas MTUs e seus endereços MAC. Finalmente aparece a interface ppp0.

Observe a ausência de endereços IP. O iproute desvincula o conceito de "links" e "endereços IP". O motivo é que, com o IP aliasing, a entidade endereço IP se tornou secundária. Mas isto não quer dizer que não seja possível descobrir estes endereços - basta listá-los com a ajuda do comando atencao ip address show:

$ ip address show
1: lo:  mtu 3924 qdisc noqueue
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 brd 127.255.255.255 scope host lo
2: eth0:  mtu 1400 qdisc pfifo_fast qlen 100
    link/ether 48:54:e8:2a:47:16 brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.1/8 brd 10.255.255.255 scope global eth0
3: eth1:  mtu 1500 qdisc pfifo_fast qlen 100
    link/ether 00:e0:4c:39:24:78 brd ff:ff:ff:ff:ff:ff
3764: ppp0:  mtu 1492 qdisc pfifo_fast qlen 10
    link/ppp
    inet 212.64.94.251 peer 212.64.94.1/32 scope global ppp0

Taí! Esta listagem mostra todos os endereços relacionados às placas. Examinando com mais cuidado a interface eth0 verificamos que ela está vinculada ao endereço inet 10.0.0.1/8. A designação inet refere-se à Internet (IPv4) e o "/8" é a máscara que determina o endereço da rede. A máscara também é indicada por 10.255.255.255, informando que esta rede comporta endereços IP de 10.0.0.0 até 10.255.255.255.

Com ppp0 a coisa se repete. Seu endereço é 212.64.94.251, sem máscara de sub-rede. Isto significa de que se trata de uma conexão ponto-a-ponto e que cada endereço, com exceção de 212.64.94.251, é remoto. Além disto, este registro indica que do outro lado do link há também apenas um endereço, o 212.64.94.1 - a máscara "/32" exclui sub-redes.

Só mais um comentário: "qdisk" significa Queueing Discipline (Disciplina de Fila). Este assunto será visto adiante.

De acordo com os exemplos, agora sabemos como encontrar endereços 10.x.x.x e que a máquina pode alcançar o endereço 212.64.94.1. Mas como esta máquina alcança a Internet? É através da conexão ppp0, que desemboca no endereço 212.64.94.1 e, ao que tudo indica, este nó é o responsável pelo trânsito de dados entre a máquina e o mundo exterior. É só dar uma olhada nas rotas...

O comando atencao ip route show do iproute também pode revelar quais as rotas existentes:

$ ip route show
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 

O resultado é auto-explicativo. As primeiras 3 linhas apenas confirmam o que o comando ip address show já mostrou; a última informa que podemos cair no mundo através do endereço 212.64.94.1, o gateway default. Um gateway é identificado pela palavra via e é para onde devem ser enviados e por onde entram os pacotes de dados.

Apenas para comparar, veja o que o "velho e bom" comando route tem para oferecer:

$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use
Iface
212.64.94.1     0.0.0.0         255.255.255.255 UH    0      0        0 ppp0
10.0.0.0        0.0.0.0         255.0.0.0       U     0      0        0 eth0
127.0.0.0       0.0.0.0         255.0.0.0       U     0      0        0 lo
0.0.0.0         212.64.94.1     0.0.0.0         UG    0      0        0 ppp0

Informações adicionais