12.05.2014

Comando ip em Linux

O comando ip foi criado para configurar interfaces de rede e para substituir o agora obsoleto ifconfig. Obviamente este artigo é relevante para uma instalação RHEL/CentOS 7.0 que não contemplem interfaces gráficas ou de gestão WEB.

Quando se pretende operar um novo comando deve-se consultar a documentação existente no sistema para o efeito.

[root@CentOs02 ~]# man ip

Após uma descrição sumariada do comando, no final da página verificamos que existe mais documentação relacionada.

SEE ALSO
ip-address(8), ip-addrlabel(8), ip-l2tp(8), ip-link(8), ip-maddress(8), ip-monitor(8), ip-mroute(8), ip-neighbour(8), ip-netns(8), ip-ntable(8), ip-route(8), ip-rule(8), ip-tcp_metrics(8), ip-tunnel(8), ip-xfrm(8)
IP Command reference ip-cref.ps

Pretendendo saber como se configuram endereços em interfaces de rede, deduz-se que será uma boa ideia consultar o ip-address.

[root@CentOs02 ~]# man ip-address

Esta pequena introdução serviu para relembra como se pode e deve proceder à consulta de informação. Por vezes o Google pode não estar disponível ;-) .

Vejamos alguns exemplos mais comuns de utilização do comando ip. Para situações mais específicas verificar a documentação.

Para verificar as interfaces de rede e respectivos endereços:

[root@CentOs02 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 08:00:27:4e:28:c6 brd ff:ff:ff:ff:ff:ff
inet 172.16.1.213/24 brd 172.16.1.255 scope global enp0s3
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:fe4e:28c6/64 scope link
valid_lft forever preferred_lft forever

Verificamos que possuímos duas interfaces. A de loopback (interface lógica, ou seja não está associada a um dispositivo físico como uma placa de rede) e uma interface física cujo nome é enp0s3. Vemos a informação IPv6.

Caso se pretenda excluir a informação IPv6:

[root@CentOs02 ~]# ip -4 a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
inet 172.16.1.213/24 brd 172.16.1.255 scope global enp0s3
valid_lft forever preferred_lft forever

Caso se pretenda excluir a informação IPv4:

[root@CentOs02 ~]# ip -6 a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qlen 1000
inet6 fe80::a00:27ff:fe4e:28c6/64 scope link
valid_lft forever preferred_lft forever

Nota: O comando ip a poderia ter sido escrito ip add ou ip addr show (ip a show também seria aceite). Acha-se mais sensato optar pela forma mais abreviada.

Nota: Nomes das interfaces de rede em sistemas RHEL e derivados - Os administardores de Linux habituaram-se a ver os nomes das interfaces de rede com a nomenclatura eth[0], eth[1], eth[2], e assim sucessivamente. A RHEL e distros derivadas como o CentOS (distro usada na maioria dos exemplos deste blog), introduziram uma nova nomenclatura. Notou-se que a atribuição convencional nem sempre correspondia aos slots onde as placas estão inseridas, entrada USB, etc. Tal poderia levar a comportamentos inesperados com consequências gravosas.Com o RHEL 6 foi introduzido um método que garante uma atribuição persistente e previsivel das interfaces de rede que garante que reboots e mudanças de hardware não alterarão o nome. Esse método passou a ser adoptado por defeito no RHEL 7 / CenOS 7. Como tal as interfaces possuem nomes determinados pelo firmware, topologia e localização. No exemplo anterior o nome da interface lógica é naturalmente lo. A outra interface tem um nome dado ao abrigo da nova nomenclatura - enps03-.

Conhecendo previamente os nomes atribuídos podemos referir a interface cuja configuração pretendemos analisar:

[root@CentOs02 ~]# ip a show enp0s3
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 08:00:27:4e:28:c6 brd ff:ff:ff:ff:ff:ff
inet 172.16.1.213/24 brd 172.16.1.255 scope global enp0s3
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:fe4e:28c6/64 scope link
valid_lft forever preferred_lft forever

Para obter apenas informação IPv4 - ip -4 a show enp0s3 - .

Para verificar informação sobre o estado e tráfego das interfaces (muito útil para detectar erros na transmissão de dados)

[root@CentOs02 network-scripts]# ip -s link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
RX: bytes packets errors dropped overrun mcast
0 0 0 0 0 0
TX: bytes packets errors dropped carrier collsns
0 0 0 0 0 0
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
link/ether 08:00:27:4e:28:c6 brd ff:ff:ff:ff:ff:ff
RX: bytes packets errors dropped overrun mcast
465067 4924 0 0 0 1
TX: bytes packets errors dropped carrier collsns
164744 810 0 0 0 0

Para inactivar uma interface :

[root@CentOs02 ~]# ip link set dev enp0s3 down

Para activar uma interface:

[root@CentOs02 ~]# ip link set dev enp0s3 up

Para modificar o mtu da interface:

[root@CentOs02 ~]# ip link set mtu 9000 dev enp0s3

Para atríbuir um endereço IPv4 a uma interface (não altera o endereço que porventura esteja atribuído e não é permanente. Para tornar a configuração permanente é necessário editar os ficheiro de configuração da interface de rede, procurando-o pelo nome na directoria /etc/sysconfig/network-scripts/ e reeiniciar o serviço (service network restart ou systemctl restart network). Pode também usar a ferramenta de programação da nmtui, executando-a a partir da linha de comandos.):

[root@CentOs02 ~]# ip a add 172.16.1.202 dev enp0s3

Para eliminar um endereço:

[root@CentOs02 ~]# ip a del 172.16.1.202 dev enp0s3

Para configurar um endereço de broadcast (a configuração do endereço IP com o comando ip não configura um endereço de broadcast)

ip addr add broadcast 172.20.10.255 dev enp0s3

Para ver a tabela de arp/neigbours ( Funciona para os protocolos IPv4 e IPv6. Não existe ARP em IPv6 (ver artigo sobre IPv6 neste blog)).

[root@CentOs02 ~]# ip n show

Para ver a tabela de roteamento

[root@CentOs02 ~]# ip r
default via 172.16.1.254 dev enp0s3 proto static metric 1024
172.16.1.0/24 dev enp0s3 proto kernel scope link src 172.16.1.213

Para adicionar uma entrada à tabela de roteamento (não persistente!)

[root@CentOs02 ~]# ip route add 10.10.10.0/24 via 172.16.1.254

Para eliminar a entrada previamente criada

[root@CentOs02 ~]# ip route del 10.10.10.0/24 via 172.16.1.254

Para saber mais: https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Networking_Guide/index.html