2007-05-17

Guia de comandos: iproute2

Tux Esse post vai ser para ajudar a galera de RD2 do curso de FORTIC do ISTCC-P.

Os sistemas Linux-based GNU systems (apelidados de GNU/Linux, para simplificar – e erroneamente chamados de Linux) utilizam as ferramentas ifconfig e route do pacote tcpip para configurar recursos de IP.

No entanto existe outro pacote, chamado iproute2, que traz os mesmos recursos de forma bem mais flexível e inteligível, além de ter um uso similar ao do IOS (não idêntico!).

Esse pacote traz as seguintes ferramentas:

  • ip (exibe e manipula roteamento, dispositivos, políticas e tunelamento)
  • tc (exibe e manipula configurações de controle de tráfego)
  • ss (exibe conexões ativas)
  • Outras ferramentas:
    • arpd
    • nstat
    • rtmon
    • ifstat
    • routef
    • routel
    • rtacct
    • rtstat


Aqui o foco será ip, que manipula recursos de IP.


O formato desta ferramenta é:
ip [opções] objeto [comando]


Não vou entrar em detalhes sobre as opções (que podem ser omitidas); para tais detalhes, veja o manual. Então vamos ao objeto!

Objetos


Os objetos são:
  • link – exibe e manipula detalhes sobre a interface;
  • addr – exibe e manipula detalhes sobre o(s) endereço(s) de IP;
  • route – exibe e manipula rotas;
  • rule – regras de política de roteamento;
  • neigh – entrada de cache de ARP;
  • tunnel – tunelamento sobre IP;
  • maddr – exibe e manipula detalhes sobre endereço(s) multicast;
  • mroute – entrada de cache de roteamento multicast;
  • monitor – monitora os objetos;
  • xfrm – esse sinceramente não faço a menor idéia do que faz… Google nele!


Um comando muito interessante é help. Por exemplo, para listar todas as opções da ferramenta:
ip help


Para listas as opções do objeto link:
ip link help


Para listas as opções do comando state do objeto xfrm (sei lá o que isso faz):
ip xfrm state help


Vejam que é equivalmente ao ? do IOS.

Este artigo se limitará aos objetos link, addr e route (apesar de o objeto tunnel ser extremamente interessante, mas deixa pra próxima).

Objeto link


Este objeto manipula atributos da interface. Para exibir os atributos da interface eth0:
ip link show eth0


Caso a interface esteja caída, para levantar a interface:
ip link set eth0 up


E para derrubá-la:
ip link set eth0 down


Há diversos atributos nas interfaces, mas os mais interessantes são:
  • allmulticast – diz se a interface receberá ou não a pacotes endereçados a endereços de multicast;
  • promisc – ativa ou desativa o modo promíscuo.


Por exemplo, para habilitar o recebimento de multicast e ativar o modo promíscuo (necessário para sniffar uma rede com Ethereal):
 ip set eth0 almulticast on promisc on


Objeto addr


Este objeto manipula os endereços IP associados a uma interface lógica. Os comandos mais importantes são:
  • show – exibe os endereços associados a uma interface;
  • add – associa um novo endereço a uma interface, se já houver um endereço associado, o novo endereço será associado como secundário (equivalente a secondary no IOS);
  • del – remove um endereço associado de uma interface.


Todos os comandos devem ser seguidos da opção dev, que informa a interface.

Por exemplo, para exibir todos os endereços associados à interface eth0:
ip addr show dev eth0


Para adicionar o endereço 10.2.3.4, máscara 255.0.0.0, à interface:
ip addr add 10.2.3.4/8 dev eth0


Para remover esse endereço:
ip addr del 10.2.3.4/8 dev eth0


Observação: o objeto addr tem dificuldade em calcular o endereço de broadcast de subclasses, então é preciso informá-lo:
ip addr add 192.198.11.17/30 broadcast 192.168.11.19 dev eth0


Objeto route


Este objeto manipula as rotas.

Não é preciso criar rotas para as redes dos endereços associados às interfaces, pois o objeto addr já faz isso automaticamente!

Os comandos mais importantes são:
  • list (abreviação: ls) – lista as rotas configuradas;
  • add – adiciona uma rota;
  • del – remove uma rota.


Vamos aos exemplos…

Para listar todas as rotas:
ip route ls


Para listar todas as rotas que saem pela interface eth0:
ip route ls dev eth0


Para adicionar uma rota para a rede 10.0.0.0/8 pelo gateway 192.168.12.2 (precisar estar na mesma rede de um dos endereços da interface):
ip route add 10.0.0.0/8 via 192.168.12.2 dev eth0


Para remover a rota:
ip route del 10.0.0.0/8



Agora rota padrão (0.0.0.0/0.0.0.0)!

Para configurar o default gateway como 10.3.0.254:
ip route add default via 10.3.0.254 dev eth0


E para remover a rota padrão:
ip route del default


Conclusão


Acho que é isso tudo! =D

Vou pensar em escrever um artigo sobre tunelamento (manipulado pelo objeto tunnel), mas esse é mais complexo (e divertido).

[]'s
Rodrigo Cacilhas