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
-->










