O poder do comando “ip”


Há algum tempo atrás comecei a usar o comando “ip” em vez do “ifconfig” para configurar endereços IP no Linux. Depois de algum tempo resolvi ler o “man ip” e, para minha surpressa, descobri que esse comando pode ser usado para muitas outras coisas. A partir de então abandonei o “ifconfig”.

Vou contar agora o porquê.

Estamos acostumados a usar os comandos “arp”, “ifconfig” e “route” para configurar ou analisar os diversos parâmetros de rede no Linux. Essas ferramentas são muito úteis, porém a partir da versão 2.2 do kernel do Linux, um novo subsistema de rede foi desenvolvido e essas ferramentas, apesar de ainda funcionarem bem, não conseguem tirar o máximo proveito das funcionalidades que o novo subsistema nos oferece.

Com o próposito de aproveitar ao máximo esse novo subsistema de rede, uma nova ferramenta foi desenvolvida, “o comando ip”. A principal diferença desse comando é que além de reunir todas as funções dos comandos “arp”, “ifconfig” e “route”, ele ainda nos oferece muitas outras.

Veja como são normalmente executados os comandos “arp”, “ifconfig” e “route”:

arp -n
ifconfig -a
route -n

Agora veja o comando “ip”:

ip neigh show
ip addr show
ip route show

Bem mais intuitivo, não acha? Se ficou curioso em relação às saídas desses comandos, execute eles aí no seu Linux e veja a diferença.

Nós podemos também simplesmente listar quais interfaces de rede estão presentes no sistema sem nos preocupar se elas têm ou não um endereço IP associado. Este é um novo conceito trazido pelo comando “ip”, ou seja, a separação do protocolo da camada de rede, como por exemplo o IPv4 e o IPv6, da interface de rede. Exemplo:

root@linux:~# ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
link/ether 00:19:5b:69:5d:d7 brd ff:ff:ff:ff:ff:ff

Este comando só nos mostra quais interfaces de rede nós temos e não nos mostra informação de protocolo da camada de rede. Outro conceito que morre com o comando “ip” é o de interface virtual, ou melhor, “IP Aliasing”. Com o comando “ip” nós podemos atribuir vários endereços IP a uma mesma interface de rede. Inclusive endereços em uma mesma rede IP. Exemplo:

root@linux:~# ip addr add 192.168.0.1/24 dev eth0
root@linux:~# ip addr add 172.16.22.1/16 dev eth0
root@linux:~# ip addr add 10.0.0.1/8 dev eth0
root@linux:~# ip addr add 10.0.0.2/8 dev eth0

Se fôssemos usar o comando ifconfig, nós teríamos uma interface de rede com endereço 192.168.0.1 e teríamos que criar mais três interfaces virtuais, uma com o endereço 172.16.22.1, outra com o endereço 10.0.0.1 e por último uma interface com o endereço 10.0.0.2.

Veja como fica configurada uma interface de rede após a execução dos quatro comandos anteriores:

root@linux:~# ip addr show dev eth0
1: eth0: mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
link/ether 00:19:5b:69:5d:d7 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.1/24 scope global eth0
inet 172.16.22.1/16 scope global eth0
inet 10.0.0.1/8 scope global eth0
inet 10.0.0.2/8 scope global secondary eth0

Outra vantagem do comando “ip” é que é possível criar mais de uma tabela de rotas e definir políticas para quais tabelas serão usadas. Dois exemplos de utilização dessa funcionalidade é quando temos um roteador conectado a dois links de Internet. Devemos usar uma tabela de rotas para cada um desses links. Desta forma nós evitamos que um pacote que entre em nossa rede pelo link 1, por exemplo, não saia pelo link 2. Outra utilização é para fazermos “Load Balancing” de links. Com as mesmas duas tabelas do exemplo de dois links, nós podemos definir uma terceira tabela de rotas que tem como rota “default” os dois links, e esses com o mesmo peso. Eu irei detalhar melhor a função “route” do comando “ip” em um próximo artigo.

Você já se perguntou quantas tabelas de rotas existem em um sistema operacional Linux?
Por padrão três, mas podemos criar muitas outras. Veja a execução destes três comandos:

root@linux:~# ip rule show
0: from all lookup local
32766: from all lookup main
32767: from all lookup default

root@linux:~# ip rule add table 5

root@linux:~# ip rule show
0: from all lookup local
32765: from all lookup 5
32766: from all lookup main
32767: from all lookup default

É assim que criamos uma nova tabela de rotas. Com o comando “ip route add table”número da tabela”.

Quando nós executamos o comando “ip route show” ele nos mostra a tabela “main” , mas podemos dizer qual tabela queremos que seja mostrada da seguinte forma:

root@linux:~# ip route show table main
192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.151 metric 1
192.168.120.0/21 dev wlan1 proto kernel scope link src 192.168.123.248 metric 2
172.16.0.0/16 dev eth0 proto kernel scope link src 172.16.22.1
169.254.0.0/16 dev eth0 scope link metric 1000
10.0.0.0/8 dev eth0 proto kernel scope link src 10.0.0.1
default via 192.168.0.1 dev eth0 proto static

 

Estas são somente algumas das vantagens e funcionalidades do comando “ip”. Existem muito mais coisas que podemos fazer com essa ferramenta. Alguns exemplos são:

  • Criação de interfaces do tipo túnel (ip tunnel)
  • Monitoramento do estado de uma interface (ip monitor)
  • Configuração do tipo de enfileiramento dos pacotes de uma interface (ip link)

 

Fonte: http://ronaldoafonso.wordpress.com

Lomadee, uma nova espécie na web. A maior plataforma de afiliados da América Latina.

, , , ,

Comentários

  1. Ismael Gomes Ferreira disse:

    Olá achei muito bom tua postagem. Tenho uma dúvida sobre o comando ip e gostaria de saber e tu podes me ajudar. Na rede que eu utilizo faz-se necessário a utilização de um comando para clonar mac. Com o ifconfig eucnão tenho problema nenhum, utilizo o “ifconfig eth0 ether xx:xx:xx:xx”.
    com o comando ip tu sabe me dizer como utilizo isso?