O comando “ip”


355 visualizações

Este é meu primeiro artigo para o blog “Projetos e TI”.  Como primeiro assunto, resolvi  falar de maneira bem geral sobre o 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 execussã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)

E muito mais.

Acho que vale a pena aprender e começar a utilizar essa ferramenta de vez.

Até a próxima!

Ronaldo Afonso

Sobre Ronaldo Afonso

Ronaldo Afonso já escreveu 3 artigos no portal.

Tenho mais de 10 anos de experiência em Linux, rede de computadores e projetos usando linguagens de programação C e Python. Atualmente trabalho na Vex Pointer como analista de software embarcado.

-->

Interaja

Qual a soma entre:
3 + 2