RDP Monster

Verificar o endereço IP no Linux: ip addr, hostname -I, curl

Verificar o endereço IP no Linux: ip addr, hostname -I, curl

Verificar o seu endereço IP no Linux com ip addr

O comando que responde a "qual é o meu endereço IP" em qualquer distribuição Linux atual é ip, do pacote iproute2. Vem instalado por omissão em todas as grandes distribuições, funciona sem root e é aquilo que os restantes comandos deste guia encapsulam ou vieram substituir. A forma básica lista todas as interfaces com todos os seus endereços:

ip addr show
ip a            # same thing, shorter

Num servidor com uma única placa de rede, o resultado é parecido com este (as linhas de validade valid_lft foram cortadas):

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    inet 127.0.0.1/8 scope host lo
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 52:54:00:12:34:56 brd ff:ff:ff:ff:ff:ff
    inet 203.0.113.25/24 brd 203.0.113.255 scope global eth0
    inet6 2001:db8:1::25/64 scope global
    inet6 fe80::5054:ff:fe12:3456/64 scope link

Como interpretar:

  • Nome da interface. lo é o loopback, sempre 127.0.0.1, acessível apenas a partir da própria máquina. A placa real aqui é eth0; com nomes de interface previsíveis aparece como ens3, enp0s3 ou eno1, e as placas sem fios começam por wl.
  • inet é o endereço IPv4, inet6 o IPv6. O sufixo /24 é o comprimento do prefixo em notação CIDR, a escrita moderna da máscara de rede 255.255.255.0.
  • scope global significa roteável para lá desta máquina; scope link (a linha fe80::) só é válido no segmento de rede ligado; scope host é loopback.
  • state UP com LOWER_UP significa que a interface está ativa e tem ligação física. state DOWN ou NO-CARRIER é a razão habitual para uma interface não ter endereço nenhum.

Variantes úteis:

ip -4 addr                  # IPv4 only
ip -6 addr                  # IPv6 only
ip -br -4 addr              # one line per interface
ip -4 addr show dev eth0    # a single interface

A forma resumida (-br) é a maneira mais rápida de verificar um endereço IP no Linux quando existem várias interfaces, o que é normal num VPS a correr Docker:

$ ip -br -4 addr
lo               UNKNOWN        127.0.0.1/8
eth0             UP             203.0.113.25/24
docker0          DOWN           172.17.0.1/16

hostname -I: apenas os endereços

Quando só precisa dos endereços, hostname -I (I maiúsculo) imprime todos os endereços configurados numa linha, separados por espaços, excluindo o loopback e os IPv6 link-local:

$ hostname -I
203.0.113.25 2001:db8:1::25

Duas ressalvas. O hostname -i minúsculo é um comando diferente: resolve o nome da máquina através de /etc/hosts e do DNS, o que em Debian e Ubuntu costuma dar 127.0.1.1. E o hostname -I imprime os endereços sem ordem garantida, incluindo pontes virtuais como docker0, por isso hostname -I | awk '{print $1}' é um atalho para humanos, não um "IP principal" fiável para scripts. A opção não é POSIX: Debian, Ubuntu, Fedora e RHEL têm-na, imagens mínimas baseadas em BusyBox como o Alpine podem não ter.

ifconfig, nmcli e networkctl

ifconfig (obsoleto, net-tools)

O ifconfig é o que aparece nos tutoriais mais antigos. Pertence ao net-tools, obsoleto há anos em favor do iproute2 e já ausente da instalação por omissão das versões atuais de Ubuntu, Debian e Fedora/RHEL. Se devolver command not found, passe para o ip ou instale o pacote:

sudo apt install net-tools     # Debian / Ubuntu
sudo dnf install net-tools     # Fedora / RHEL / Rocky / Alma
$ ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 203.0.113.25  netmask 255.255.255.0  broadcast 203.0.113.255
        inet6 fe80::5054:ff:fe12:3456  prefixlen 64  scopeid 0x20<link>

É legível, mas tem uma limitação real: o ifconfig mostra apenas um endereço IPv4 por interface. Os endereços secundários adicionados com ip addr add, comuns num VPS com vários IP públicos, ficam-lhe invisíveis.

nmcli e networkctl

Os desktops e os servidores da família Fedora/RHEL gerem a rede com o NetworkManager; o Ubuntu Server usa o netplan sobre o systemd-networkd, e muitas imagens de VPS seguem o mesmo modelo. Cada um tem uma ferramenta de estado que mostra endereço, gateway e DNS num só bloco:

nmcli device show eth0
nmcli -g IP4.ADDRESS device show eth0     # NetworkManager: just the address field
networkctl status eth0                    # systemd-networkd

A opção -g (--get-values) imprime apenas o valor de um campo, com o comprimento do prefixo incluído, o que é prático para scripts. Se não tiver a certeza de qual é a stack da sua máquina, ou sequer de qual é a distribuição e a versão, comece por identificar a versão do sistema pela linha de comandos; a resposta determina qual das ferramentas está presente.

Descobrir o seu endereço IP público com curl

Tudo o que vimos acima indica o endereço configurado na interface. Na maioria dos VPS o IPv4 público está atribuído diretamente à interface, por isso é também o que a internet vê. Em casa, num escritório ou em algumas clouds, a interface tem um endereço privado das gamas RFC 1918 (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16) e um router ou um NAT 1:1 traduz-o à saída. A única forma fiável de ver o lado público é perguntar a um serviço externo:

curl -4 icanhazip.com
curl -4 ifconfig.me/ip
curl -4 https://api.ipify.org
curl -6 icanhazip.com          # public IPv6, if the host has one

As opções -4 e -6 forçam a família de endereços, o que conta em máquinas dual-stack: sem elas o curl pode preferir IPv6 e devolver um endereço inesperado. O icanhazip.com é operado pela Cloudflare desde 2021 e devolve texto simples. Leia a resposta como "o endereço a partir do qual o meu tráfego sai": atrás de uma VPN ou de um proxy é o endereço do nó de saída, não o do seu operador.

IPv6: global versus link-local

Quase todas as interfaces Linux mostram pelo menos uma linha inet6, muitas vezes confundida com um endereço IPv6 público. A linha que começa por fe80:: e está marcada como scope link é link-local: cada interface gera uma automaticamente, só é válida na rede ligada e nunca é acessível a partir da internet. Um endereço IPv6 público está marcado como scope global e começa por 2 ou 3, já que o espaço unicast global é 2000::/3.

ip -6 addr show scope global
ip -6 route show default

Se o primeiro comando não imprimir nada, a máquina não tem IPv6 roteável e o curl -6 vai falhar. Os endereços globais adicionais marcados como temporary num desktop vêm das extensões de privacidade; nos servidores essas ficam desligadas para que o endereço se mantenha estável para o DNS e para as regras de firewall.

Gateway predefinido, rotas e DNS

Um endereço, por si só, não diz se a máquina consegue chegar a algum lado. A tabela de rotas diz, e o ip route (forma curta ip r) imprime-a:

$ ip route
default via 203.0.113.1 dev eth0 proto static
203.0.113.0/24 dev eth0 proto kernel scope link src 203.0.113.25

A linha default via é o gateway predefinido, o router que todos os pacotes usam quando nenhuma rota mais específica corresponde. A segunda linha foi acrescentada pelo kernel quando o endereço foi configurado; o campo src é o endereço que a máquina prefere como origem nessa rede. O truque mais útil parte daí: perguntar ao kernel que endereço usaria para um determinado destino.

$ ip route get 1.1.1.1
1.1.1.1 via 203.0.113.1 dev eth0 src 203.0.113.25 uid 1000
    cache

Esse valor src é, por definição, o endereço de saída da máquina em direção à internet, sejam quais forem as interfaces, pontes ou túneis existentes. Para o DNS, o /etc/resolv.conf continua a ser o sítio a consultar, mas em sistemas com systemd-resolved (Ubuntu desde 18.04, Fedora recente) contém apenas o stub local 127.0.0.53; os verdadeiros resolvers upstream aparecem em resolvectl status, ou nos campos IP4.DNS de nmcli device show em máquinas com NetworkManager.

Scripts: guardar o endereço IP numa variável

O resultado interativo é feito para humanos; um script precisa de um endereço isolado, sem nada à volta. Estes padrões aguentam-se bem, do mais simples ao mais robusto:

# One interface, IPv4, prefix length stripped
IP=$(ip -4 -o addr show dev eth0 | awk '{print $4}' | cut -d/ -f1)

# Robust: the source address used to reach the internet
IP=$(ip route get 1.1.1.1 | awk '{for (i=1; i<=NF; i++) if ($i == "src") {print $(i+1); exit}}')

# Same thing with JSON output and jq
IP=$(ip -j route get 1.1.1.1 | jq -r '.[0].prefsrc')

# Public IP, with a timeout so the script never hangs offline
PUBLIC_IP=$(curl -4 -s --max-time 5 https://icanhazip.com)

A opção -o faz o ip imprimir um endereço por linha, o que mantém seguras as posições dos campos no awk; acrescente head -n 1 se a interface tiver vários endereços IPv4. A opção -j passa o ip para saída JSON, e o jq escolhe depois os campos pelo nome. Prefira essa forma em tudo o que corra em mais de uma máquina: os nomes das interfaces variam de servidor para servidor, os nomes dos campos não.

ComandoO que mostraMelhor para
ip addr / ip -br -4 addrTodas as interfaces, todos os endereços, estadoUso diário, visão completa
hostname -ITodos os endereços numa linhaUma vista de olhos rápida
ip route get 1.1.1.1Endereço de origem usado para sair para a internetScripts, máquinas com várias interfaces
ifconfigUm IPv4 por interface (obsoleto)Sistemas antigos, tutoriais antigos
curl -4 icanhazip.comO IPv4 público tal como a internet o vêNAT, VPN, confirmar o endereço de um VPS

O que muda num VPS

Num VPS com IPv4 dedicado, ip -4 addr, hostname -I e curl -4 icanhazip.com devem devolver todos o mesmo endereço, porque o IP público está configurado diretamente na interface, sem NAT pelo meio. Quando divergem, há algo no caminho: um NAT do lado do fornecedor, um cliente VPN esquecido, ou uma ponte Docker que ficou em primeiro lugar no hostname -I.

Depois de confirmar o endereço, verifique duas coisas. Primeiro, se está realmente acessível e em que portas, o que é uma pergunta diferente de saber se está configurado: verifique as portas abertas do seu servidor Linux por dentro com ss -tulpn e por fora com nmap. Segundo, o DNS inverso. Consulte o registo PTR do seu endereço:

dig -x 203.0.113.25 +short

Um VPS acabado de criar responde normalmente com um nome genérico do fornecedor, ou com nada. Se o servidor enviar correio ou expuser algum serviço público, defina o hostname e o DNS inverso para que coincidam; o correio de saída, em particular, é rotineiramente rejeitado quando o registo PTR e o nome HELO não coincidem.

Estes comandos tornam-se reflexos mais depressa num servidor cujo endereço é só seu e não muda. Um VPS Linux da rdp.monster vem com um IPv4 dedicado, acesso root completo, CPU e RAM dedicados, largura de banda ilimitada (fair-use) e sem KYC, com criptomoedas aceites, a partir de $8.99/mês. O servidor fica online cerca de 10 segundos após a confirmação do pagamento, por isso o primeiro ip -br -4 addr que executar nele está a um instante de distância.

Perguntas frequentes

Porque é que o hostname -I mostra mais do que um endereço IP?

Porque lista todos os endereços configurados em todas as interfaces, incluindo as pontes virtuais.
O hostname -I imprime todos os endereços de todas as interfaces, exceto o loopback e os IPv6 link-local, por isso uma máquina com Docker, libvirt, um cliente VPN ou uma segunda placa de rede mostra vários. O docker0 contribui com 172.17.0.1, o virbr0 tipicamente com 192.168.122.1, e uma máquina dual-stack acrescenta o seu IPv6 global. A ordem não é garantida. Quando precisar do endereço a partir do qual o seu tráfego sai realmente, execute antes ip route get 1.1.1.1 e leia o campo src.

Porque é que o ifconfig diz command not found no Ubuntu?

O ifconfig pertence ao net-tools, que as distribuições atuais já não instalam por omissão.
O comando ifconfig faz parte do pacote net-tools, obsoleto em favor do iproute2 e ausente da instalação por omissão das versões atuais de Ubuntu, Debian e Fedora/RHEL. O substituto é o ip addr, disponível em todo o lado. Se um script ou um velho hábito o exigir mesmo, instale o pacote com sudo apt install net-tools ou sudo dnf install net-tools, tendo presente que o ifconfig mostra apenas um IPv4 por interface e esconde os endereços secundários adicionados com ip addr add.

Porque é que o hostname -i devolve 127.0.1.1?

O -i minúsculo resolve o nome da máquina através do /etc/hosts, onde os sistemas baseados em Debian o associam a 127.0.1.1.
O hostname -i não inspeciona a rede: resolve o nome do sistema como qualquer aplicação faria, através de /etc/hosts e depois do DNS. Os instaladores de Debian e Ubuntu acrescentam uma linha que associa o hostname a 127.0.1.1 para que a máquina possa resolver o próprio nome sem rede, e é essa linha que aparece. Use a forma com I maiúsculo, hostname -I, que lê os endereços reais das interfaces, ou ip -4 addr para o detalhe completo.

Como descubro os endereços IP dos outros dispositivos da minha rede?

Leia a tabela de vizinhos com ip neigh, ou varra a sub-rede com nmap -sn.
Os dispositivos com que a sua máquina trocou pacotes recentemente estão na cache ARP/de vizinhos, mostrada por ip neigh show (ou arp -a se o net-tools estiver instalado). Para um retrato completo, faça um ping-sweep à sub-rede: nmap -sn 192.168.1.0/24 lista todas as máquinas que respondem, com nomes quando o DNS inverso os fornece. Substitua pela sua própria rede, que pode ler na rota scope link de ip route. Num VPS isto raramente é útil, e analisar endereços vizinhos pode violar os termos do seu fornecedor.

Adrien Roche, Editor de infraestrutura e hospedagem

Engenheiro de sistemas com mais de 10 anos cuidando de parques de servidores Windows Server e Linux. Adrien mantém a documentação de infraestrutura do rdp.monster e escreve nossos guias sobre RDP, hospedagem VPS, administração de servidores, redes e ferramentas de privacidade.

Cadastre-se no nosso programa de revendedor

Seus dados

Se tiver alguma dúvida, fale com a gente clicando aqui !
Nome(Obrigatório)
Digite seu endereço de e-mail, você precisa ter uma conta em dashboard.rdp.monster !

Sua empresa

Digite o endereço do seu site, se tiver um
Explique rapidamente como você vai vender os serviços aos seus clientes. Por exemplo, conversando com pessoas em fóruns.

Até os monstros adoram cookies!

Usamos cookies para melhorar sua experiência de navegação, exibir anúncios ou conteúdo personalizados e analisar nosso tráfego. Ao clicar em “Aceitar”, você concorda com o nosso uso de cookies.