Examinar Configurações de Interface de Rede com ethtool no Linux

CompTIABeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá a usar a utilidade de linha de comando ethtool para examinar e gerenciar as configurações da interface de rede em um ambiente Linux. Você começará instalando a ferramenta e identificando sua interface de rede principal. Em seguida, praticará a visualização da velocidade atual da interface e do modo duplex, definindo manualmente esses parâmetros para uma configuração específica, como 10Mbps half-duplex, e depois revertendo a interface para seu estado de negociação automática padrão.

Ao concluir estas etapas, você adquirirá habilidades práticas no diagnóstico de problemas de rede na camada física. O laboratório conclui ensinando como analisar os modos de link suportados pela sua placa de rede, o que é essencial para solucionar problemas de desempenho potenciais causados por incompatibilidades de velocidade ou duplex entre dispositivos de rede.

Instalar ethtool e Identificar Sua Interface de Rede

Nesta etapa, você começará instalando o ethtool, uma utilidade crucial de linha de comando para examinar e modificar parâmetros do controlador da interface de rede. Após garantir que a ferramenta está disponível, você aprenderá a identificar o nome da interface de rede principal em seu sistema, o que é um pré-requisito para qualquer análise de rede posterior.

Primeiro, vamos atualizar a lista de pacotes e instalar o ethtool. É uma boa prática executar apt update antes de instalar novos pacotes para garantir que você está obtendo as versões mais recentes disponíveis nos repositórios.

Abra um terminal, que já deve estar aberto em seu diretório ~/project. Execute os seguintes comandos:

sudo apt update
sudo apt install ethtool -y

O sinalizador -y responde automaticamente "sim" ao prompt de instalação, tornando o processo não interativo. Você deverá ver uma saída indicando que as listas de pacotes estão sendo lidas e o ethtool está sendo instalado.

Agora que o ethtool está instalado, você precisa determinar qual interface de rede deseja examinar. Um sistema pode ter várias interfaces, como uma interface de loopback (lo), uma interface Ethernet com fio (eth0 ou enp0s3) e outras. O comando ip é o padrão moderno para exibir e manipular dispositivos de rede, endereços e rotas.

Para listar todas as interfaces de rede e suas configurações, use o comando ip a (uma abreviação para ip addr):

ip a

Você verá uma lista de todas as interfaces de rede. Procure por uma interface que não seja lo (a interface de loopback) e que tenha o estado UP. Esta é tipicamente sua conexão de rede principal. O nome geralmente é eth0 ou um nome que começa com enp.

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    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: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:16:3e:01:b1:ae brd ff:ff:ff:ff:ff:ff
    altname enp0s5
    altname ens5
    inet 172.16.50.232/24 metric 100 brd 172.16.50.255 scope global dynamic eth0
       valid_lft 1892159922sec preferred_lft 1892159922sec
    inet6 fe80::216:3eff:fe01:b1ae/64 scope link
       valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
    link/ether 02:42:da:5e:55:d4 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever

A partir da saída de exemplo acima, o nome da interface de rede principal é eth0. Você também pode ver outras interfaces como docker0, mas para este laboratório, focaremos em eth0. Anote o nome da sua interface, pois você precisará dele nas próximas etapas. Você agora instalou com sucesso a ferramenta necessária e identificou sua interface de rede alvo.

Visualizar Velocidade e Duplex da Interface Atual com ethtool

Nesta etapa, você usará a utilidade ethtool que acabou de instalar para inspecionar o estado operacional atual de sua interface de rede. Especificamente, você se concentrará em dois parâmetros críticos: Velocidade (Speed) e Duplex.

As placas de interface de rede (NICs) operam em velocidades específicas (por exemplo, 10 Mbps, 100 Mbps, 1000 Mbps) e em um de dois modos duplex:

  • Half-duplex: A interface só pode enviar ou receber dados em um determinado momento, mas não ambos simultaneamente.
  • Full-duplex: A interface pode enviar e receber dados ao mesmo tempo, o que melhora significativamente a taxa de transferência.

As redes modernas quase sempre usam um processo chamado auto-negociação (auto-negotiation), onde a NIC e o dispositivo de rede conectado (como um switch) se comunicam automaticamente para determinar a maior velocidade e modo duplex possíveis que ambos suportam.

Agora, vamos visualizar essas configurações para a interface de rede que você identificou na etapa anterior (usaremos eth0 como exemplo). Em seu terminal, execute o seguinte comando. Lembre-se de substituir eth0 pelo nome real da sua interface, caso seja diferente.

ethtool eth0

Após pressionar Enter, você verá informações detalhadas sobre a interface. Em alguns ambientes virtuais, você pode ver muitos valores "Not reported" ou "Unknown", o que indica que a interface de rede virtual tem recursos limitados. Isso é normal para este ambiente de laboratório.

Settings for eth0:
        Supported ports: [  ]
        Supported link modes:   Not reported
        Supported pause frame use: No
        Supports auto-negotiation: No
        Supported FEC modes: Not reported
        Advertised link modes:  Not reported
        Advertised pause frame use: No
        Advertised auto-negotiation: No
        Advertised FEC modes: Not reported
        Speed: Unknown!
        Duplex: Unknown! (255)
        Auto-negotiation: off
        Port: Other
        PHYAD: 0
        Transceiver: internal
netlink error: Operation not permitted
        Link detected: yes

Observe a saída com atenção. As linhas chave para esta etapa são:

  • Speed: Unknown!: A velocidade atual não é reportada pelo driver.
  • Duplex: Unknown! (255): O modo duplex também não é reportado.
  • Auto-negotiation: off: Isso é importante. Mostra que a interface não está configurada para auto-negociação, razão pela qual poderemos definir a velocidade e o duplex manualmente na próxima etapa.
  • netlink error: Operation not permitted: Este erro é comum em ambientes virtualizados ou em contêineres com permissões restritas. Ele não nos impedirá de concluir o laboratório.

A linha Link detected: yes confirma que uma conexão física com a rede está ativa. Essas configurações são fundamentais para o funcionamento da Camada Física (Camada 1).

Definir Manualmente a Velocidade da Interface para 10Mbps Half-Duplex

Nesta etapa, você aprenderá como substituir manualmente as configurações de auto-negociação. Embora a auto-negociação seja o padrão para redes modernas, existem situações raras, como a conexão com hardware legado mais antigo ou a solução de problemas específicos de link, onde você pode precisar forçar uma velocidade e modo duplex específicos.

Nota Importante: Definir manualmente esses parâmetros pode causar problemas de conectividade de rede se não for feito corretamente. Forçar uma configuração que não corresponda ao dispositivo do outro lado do cabo (por exemplo, uma porta de switch) pode levar a um duplex mismatch (descompasso duplex), que degrada severamente o desempenho da rede, ou pode fazer com que o link falhe completamente. Neste ambiente virtual, a alteração deve ser segura para tentar.

Para alterar as configurações, você usará o comando ethtool com o sinalizador -s, que significa "settings" (configurações). Esta operação requer privilégios de administrador, portanto, você deve usar sudo.

Vamos tentar definir a velocidade da interface para 10 Mbps e o modo duplex para half. Lembre-se de substituir eth0 pelo nome da sua interface, caso seja diferente.

sudo ethtool -s eth0 speed 10 duplex half

Este comando não produz nenhuma saída em caso de sucesso. Para confirmar se a alteração foi aplicada, você deve inspecionar as configurações da interface novamente usando o comando da etapa anterior:

ethtool eth0

Agora, examine a saída. Procure pelas linhas Speed e Duplex. Mesmo com os erros iniciais, você verá que o comando para definir a velocidade e o duplex foi bem-sucedido.

Settings for eth0:
        Supported ports: [  ]
        Supported link modes:   Not reported
        Supported pause frame use: No
        Supports auto-negotiation: No
        Supported FEC modes: Not reported
        Advertised link modes:  Not reported
        Advertised pause frame use: No
        Advertised auto-negotiation: No
        Advertised FEC modes: Not reported
        Speed: 10Mb/s
        Duplex: Half
        Auto-negotiation: off
        Port: Other
        PHYAD: 0
        Transceiver: internal
netlink error: Operation not permitted
        Link detected: yes

Você agora deve ver Speed: 10Mb/s e Duplex: Half. Observe também que Auto-negotiation ainda está off, o que é esperado, já que você definiu manualmente os parâmetros. Isso confirma que você pode modificar com sucesso as configurações da interface de rede.

Visualizar e Modificar Recursos de Offload com ethtool -k

Nesta etapa, você aprenderá como inspecionar e modificar recursos de offload de rede. Estes são recursos avançados de NIC que permitem ao hardware executar tarefas que, de outra forma, seriam tratadas pela CPU, como calcular checksums ou segmentar dados. Descarregar essas tarefas pode melhorar o desempenho da rede.

Primeiro, vamos visualizar as configurações atuais de offload para sua interface usando o sinalizador -k (ou --show-features).

ethtool -k eth0

Você verá uma lista de recursos, alguns dos quais estão on (ligados) e outros off (desligados). Um status [fixed] significa que a configuração não pode ser alterada pelo usuário.

Features for eth0:
rx-checksumming: on [fixed]
tx-checksumming: on
        tx-checksum-ipv4: off [fixed]
        tx-checksum-ip-generic: on
        tx-checksum-ipv6: off [fixed]
        tx-checksum-fcoe-crc: off [fixed]
        tx-checksum-sctp: off [fixed]
scatter-gather: on
        tx-scatter-gather: on
        tx-scatter-gather-fraglist: off [fixed]
tcp-segmentation-offload: on
        tx-tcp-segmentation: on
        tx-tcp-ecn-segmentation: on
        tx-tcp-mangleid-segmentation: off
        tx-tcp6-segmentation: on
generic-segmentation-offload: on
generic-receive-offload: on
large-receive-offload: off [fixed]
... (a saída é longa e pode variar)

Agora, vamos praticar a modificação de uma dessas configurações. Desativaremos temporariamente o TX checksumming. Esta operação requer privilégios de administrador, portanto, você deve usar sudo e o sinalizador -K (ou --features).

sudo ethtool -K eth0 tx-checksumming off

O comando agora relata as alterações que fez. Observe que desativar tx-checksumming desativou automaticamente outros recursos relacionados. Isso ocorre porque alguns recursos dependem de outros.

Actual changes:
tx-checksum-ip-generic: off
tx-tcp-segmentation: off [not requested]
tx-tcp-ecn-segmentation: off [not requested]
tx-tcp6-segmentation: off [not requested]

Para verificar a alteração na lista completa, você pode executar ethtool -k eth0 novamente.

Agora, vamos reativá-lo para restaurar o comportamento padrão que aprimora o desempenho.

sudo ethtool -K eth0 tx-checksumming on

Novamente, a saída mostra as alterações reais. Você pode ver que, embora tenha solicitado um recurso on, ele permanece off se o hardware o tiver fixo. Ele também mostra recursos relacionados sendo reativados automaticamente.

Actual changes:
tx-checksum-ipv4: off [requested on]
tx-checksum-ip-generic: on
tx-checksum-ipv6: off [requested on]
tx-tcp-segmentation: on [not requested]
tx-tcp-ecn-segmentation: on [not requested]
tx-tcp6-segmentation: on [not requested]
tx-checksum-fcoe-crc: off [requested on]
tx-checksum-sctp: off [requested on]

Ao concluir esta etapa, você aprendeu como examinar e modificar os recursos de offload de hardware de sua placa de rede e viu como as dependências de recursos e as limitações de hardware afetam o resultado.

Examinar Estatísticas da Interface com ethtool -S

Nesta etapa final, você aprenderá como visualizar estatísticas detalhadas para sua interface de rede. Este é um dos usos mais comuns do ethtool para solução de problemas de rede do dia a dia. A ferramenta fornece uma riqueza de informações, incluindo o número de pacotes enviados e recebidos, contagens de bytes e, talvez o mais importante, contagens de erros.

Para visualizar essas estatísticas, use o sinalizador -S (ou --statistics). Lembre-se de substituir eth0 pelo nome da sua interface.

ethtool -S eth0

A saída será uma longa lista de contadores. Neste ambiente, a NIC usa várias filas (queues), portanto, as estatísticas são relatadas por fila. Vamos nos concentrar nos contadores de pacotes rx_queue_ e tx_queue_.

NIC statistics:
     rx_queue_0_packets: 63768
     rx_queue_0_bytes: 93307801
     ...
     rx_queue_1_packets: 77180
     rx_queue_1_bytes: 111222183
     ...
     tx_queue_0_packets: 14363
     tx_queue_0_bytes: 4229599
     ...
     tx_queue_1_packets: 5287
     tx_queue_1_bytes: 1262219
     ... (muitas outras estatísticas)

Nota: Seus números serão diferentes, pois refletem todo o tráfego desde que a interface foi ativada.

Agora, vamos gerar algum tráfego de rede para ver esses contadores mudarem. Usaremos o comando ping para enviar alguns pacotes para o endereço de loopback (127.0.0.1), que é a própria máquina local. O sinalizador -c 4 diz ao ping para enviar exatamente 4 pacotes.

ping -c 4 127.0.0.1

Você verá a saída mostrando os 4 pacotes sendo enviados e recebidos.

PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.038 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.040 ms
64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.039 ms
64 bytes from 127.0.0.1: icmp_seq=4 ttl=64 time=0.037 ms

--- 127.0.0.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3052ms
rtt min/avg/max/mdev = 0.037/0.038/0.040/0.001 ms

Agora que você gerou algum tráfego, vamos verificar as estatísticas novamente:

ethtool -S eth0

Examine novamente os valores rx_queue_*_packets e tx_queue_*_packets.

NIC statistics:
     rx_queue_0_packets: 63879
     ...
     rx_queue_1_packets: 77227
     ...
     tx_queue_0_packets: 14460
     ...
     tx_queue_1_packets: 5328
     ... (muitas outras estatísticas)

Você deve ver que o número total de pacotes nas filas de recebimento e transmissão aumentou. Devido à atividade do sistema em segundo plano, o aumento pode ser maior do que os 4 pacotes do nosso comando ping, mas a mudança confirma que a interface está enviando e recebendo dados corretamente. Esta é uma técnica fundamental para verificar a saúde do link. Se você estivesse solucionando um problema e visse contadores de erros aumentando, seria um sinal claro de um problema.

Resumo

Neste laboratório, você aprendeu a gerenciar as configurações da interface de rede usando o utilitário ethtool no Linux. Você começou instalando o pacote ethtool e identificando o nome da sua interface de rede principal com o comando ip a. Em seguida, você usou ethtool para examinar os parâmetros operacionais atuais da interface e, em seguida, definiu manualmente sua velocidade e modo duplex.

O laboratório então o guiou pela exploração de recursos mais avançados. Você aprendeu a visualizar e modificar configurações de hardware offload, como tx-checksumming, usando os sinalizadores -k e -K. Finalmente, você aprendeu a inspecionar estatísticas detalhadas da interface com ethtool -S e como gerar tráfego com ping para ver essas estatísticas mudarem em tempo real, fornecendo um método prático para verificar a saúde do link e solucionar problemas de conectividade.