Cómo ver tu dirección IP en Linux: ip addr, hostname -I, curl
- 30 de octubre de 2026
- 09:00
- Por Adrien Roche
- Redes

Consultar tu dirección IP en Linux con ip addr
El comando que responde a «¿cuál es mi dirección IP?» en cualquier distribución Linux actual es ip, del paquete iproute2. Viene instalado por defecto en todas las distribuciones importantes, funciona sin root y es aquello que los demás comandos de esta guía envuelven o al que han sido sustituidos. La forma básica lista cada interfaz con todas sus direcciones:
ip addr show
ip a # same thing, shorterEn un servidor con una sola tarjeta de red, la salida tiene este aspecto (se han recortado las líneas de vida útil valid_lft):
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 linkCómo leerla:
- Nombre de la interfaz.
loes el loopback, siempre127.0.0.1, accesible solo desde la propia máquina. Aquí la tarjeta real eseth0; con los nombres de interfaz predecibles aparece comoens3,enp0s3oeno1, y las tarjetas inalámbricas empiezan porwl. inetes la dirección IPv4 einet6la IPv6. El sufijo/24es la longitud del prefijo en notación CIDR, la escritura moderna de la máscara de red255.255.255.0.scope globalsignifica enrutable más allá de este host;scope link(la líneafe80::) solo es válida en el segmento de red conectado;scope hostes loopback.state UPconLOWER_UPsignifica que la interfaz está habilitada y tiene enlace.state DOWNoNO-CARRIERes la causa habitual de que una interfaz no tenga ninguna dirección.
Variantes útiles:
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 interfaceLa forma breve (-br) es la manera más rápida de consultar una dirección IP en Linux cuando hay varias interfaces, algo normal en un VPS que ejecuta 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/16hostname -I: solo las direcciones
Cuando solo necesitas las direcciones, hostname -I (con I mayúscula) imprime todas las direcciones configuradas en una línea, separadas por espacios, excluyendo el loopback y las IPv6 link-local:
$ hostname -I
203.0.113.25 2001:db8:1::25Dos advertencias. La versión en minúscula hostname -i es otro comando: resuelve el nombre de host de la máquina a través de /etc/hosts y del DNS, lo que en Debian y Ubuntu suele dar 127.0.1.1. Y hostname -I imprime las direcciones sin un orden garantizado, incluidos puentes virtuales como docker0, así que hostname -I | awk '{print $1}' es un atajo para humanos, no una «IP principal» fiable para scripts. La opción no es POSIX: Debian, Ubuntu, Fedora y RHEL la tienen; las imágenes mínimas basadas en BusyBox como Alpine puede que no.
ifconfig, nmcli y networkctl
ifconfig (en desuso, net-tools)
ifconfig es lo que muestran los tutoriales antiguos. Pertenece a net-tools, en desuso desde hace años en favor de iproute2 y ausente de la instalación por defecto de las versiones actuales de Ubuntu, Debian y Fedora/RHEL. Si devuelve command not found, pasa a ip o instala el paquete:
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>Es legible, pero con una limitación real: ifconfig solo muestra una dirección IPv4 por interfaz. Las direcciones secundarias añadidas con ip addr add, habituales en un VPS con varias IP públicas, le resultan invisibles.
nmcli y networkctl
Los escritorios y los servidores de la familia Fedora/RHEL gestionan su red con NetworkManager; Ubuntu Server usa netplan sobre systemd-networkd, y muchas imágenes de VPS siguen el mismo modelo. Cada uno tiene una herramienta de estado que muestra dirección, puerta de enlace y DNS en un solo bloque:
nmcli device show eth0
nmcli -g IP4.ADDRESS device show eth0 # NetworkManager: just the address field
networkctl status eth0 # systemd-networkdLa opción -g (--get-values) imprime el valor puro de un campo, con la longitud del prefijo incluida, algo práctico para scripts. Si no sabes qué pila usa tu máquina, ni siquiera qué distribución y versión es, identifica primero la versión del sistema desde la línea de comandos; la respuesta decide qué herramienta está presente.
Encontrar tu dirección IP pública con curl
Todo lo anterior informa de la dirección configurada en la interfaz. En la mayoría de los VPS, la IPv4 pública se asigna directamente a la interfaz, así que es también lo que ve internet. En casa, en una oficina o en algunas nubes, la interfaz lleva una dirección privada de los rangos RFC 1918 (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16) y un router o un NAT 1:1 la traduce a la salida. La única forma fiable de ver el lado público es preguntar a un servicio 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 oneLas opciones -4 y -6 fuerzan la familia de direcciones, lo que importa en hosts de doble pila: sin ellas, curl puede preferir IPv6 y devolver una dirección inesperada. icanhazip.com lo opera Cloudflare desde 2021 y devuelve texto plano. Interpreta la respuesta como «la dirección desde la que sale mi tráfico»: detrás de una VPN o un proxy es la dirección del nodo de salida, no la de tu proveedor de internet.
IPv6: global frente a link-local
Casi toda interfaz Linux muestra al menos una línea inet6, que a menudo se confunde con una dirección IPv6 pública. La línea que empieza por fe80:: y está marcada como scope link es link-local: cada interfaz genera una automáticamente, solo es válida en la red conectada y nunca es accesible desde internet. Una dirección IPv6 pública está marcada como scope global y empieza por 2 o 3, ya que el espacio unicast global es 2000::/3.
ip -6 addr show scope global
ip -6 route show defaultSi el primer comando no imprime nada, la máquina no tiene IPv6 enrutable y curl -6 fallará. Las direcciones globales adicionales marcadas como temporary en un escritorio provienen de las extensiones de privacidad; los servidores las mantienen desactivadas para que la dirección siga siendo estable para el DNS y las reglas de firewall.
Puerta de enlace predeterminada, ruta y DNS
Una dirección por sí sola no dice si la máquina puede llegar a algún sitio. La tabla de enrutamiento sí, y ip route (forma corta ip r) la imprime:
$ 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.25La línea default via es la puerta de enlace predeterminada, el router que usa cada paquete cuando ninguna ruta más específica coincide. La segunda línea la añadió el kernel al configurarse la dirección; su campo src es la dirección que el host prefiere como origen en esa red. El truco más útil se apoya en eso: preguntar al kernel qué dirección usaría para un destino dado.
$ 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
cacheEse valor src es, por definición, la dirección de salida de la máquina hacia internet, existan las interfaces, puentes o túneles que existan. Para el DNS, /etc/resolv.conf sigue siendo el sitio donde mirar, pero en sistemas con systemd-resolved (Ubuntu desde 18.04, Fedora reciente) solo contiene el stub local 127.0.0.53; los resolutores reales aparecen con resolvectl status, o en los campos IP4.DNS de nmcli device show en hosts con NetworkManager.
Scripts: guardar la dirección IP en una variable
La salida interactiva está pensada para humanos; un script necesita una sola dirección sin nada alrededor. Estos patrones aguantan bien, del más simple al más 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)La opción -o hace que ip imprima una dirección por línea, lo que mantiene seguras las posiciones de campo de awk; añade head -n 1 si la interfaz lleva varias direcciones IPv4. La opción -j cambia ip a salida JSON, y jq selecciona entonces los campos por nombre. Prefiere esa forma en todo lo que se ejecute en más de una máquina: los nombres de interfaz difieren de un host a otro, los nombres de campo no.
| Comando | Qué muestra | Ideal para |
|---|---|---|
ip addr / ip -br -4 addr | Todas las interfaces, todas las direcciones, el estado | Uso diario, la visión completa |
hostname -I | Todas las direcciones en una línea | Un vistazo rápido |
ip route get 1.1.1.1 | Dirección de origen usada hacia internet | Scripts, hosts con varias interfaces |
ifconfig | Una IPv4 por interfaz (en desuso) | Sistemas heredados, tutoriales antiguos |
curl -4 icanhazip.com | IPv4 pública tal como la ve internet | NAT, VPN, confirmar la dirección de un VPS |
Qué cambia en un VPS
En un VPS con IPv4 dedicada, ip -4 addr, hostname -I y curl -4 icanhazip.com deberían devolver la misma dirección, porque la IP pública se configura directamente en la interfaz sin NAT de por medio. Cuando no coinciden, hay algo en el camino: un NAT del proveedor, un cliente VPN olvidado o un puente de Docker que ocupó el primer puesto en hostname -I.
Una vez confirmada la dirección, comprueba dos cosas. Primero, si es realmente accesible y en qué puertos, que es una pregunta distinta de si está configurada: comprueba los puertos abiertos de tu servidor Linux desde dentro con ss -tulpn y desde fuera con nmap. Segundo, el DNS inverso. Consulta el registro PTR de tu dirección:
dig -x 203.0.113.25 +shortUn VPS recién creado suele responder con un nombre genérico del proveedor, o con nada. Si el servidor envía correo o expone algún servicio público, configura el nombre de host y el DNS inverso para que coincidan; el correo saliente en particular se rechaza de forma rutinaria cuando el registro PTR y el nombre HELO no concuerdan.
Estos comandos se vuelven reflejos más rápido en un servidor cuya dirección es solo tuya y no cambia. Un VPS Linux de rdp.monster incluye una IPv4 dedicada, acceso root completo, CPU y RAM dedicadas, ancho de banda ilimitado (uso razonable) y sin KYC, con criptomonedas aceptadas, desde 8,99 $/mes. El servidor está en línea unos 10 segundos después de confirmarse el pago, así que el primer ip -br -4 addr que ejecutes en él está a un instante de distancia.
Preguntas frecuentes
¿Por qué hostname -I muestra más de una dirección IP?
hostname -I imprime todas las direcciones de todas las interfaces salvo el loopback y las IPv6 link-local, así que una máquina con Docker, libvirt, un cliente VPN o una segunda tarjeta de red muestra varias. docker0 aporta 172.17.0.1, virbr0 normalmente 192.168.122.1, y un host de doble pila añade su dirección IPv6 global. El orden no está garantizado. Cuando necesites la dirección desde la que sale realmente tu tráfico, ejecuta ip route get 1.1.1.1 y lee su campo src.¿Por qué ifconfig da command not found en Ubuntu?
ifconfig forma parte del paquete net-tools, en desuso en favor de iproute2 y ausente de la instalación por defecto de las versiones actuales de Ubuntu, Debian y Fedora/RHEL. Su sustituto es ip addr, disponible en todas partes. Si un script o una vieja costumbre lo exigen, instala el paquete con sudo apt install net-tools o sudo dnf install net-tools, teniendo en cuenta que ifconfig solo muestra una IPv4 por interfaz y oculta las direcciones secundarias añadidas con ip addr add.¿Por qué hostname -i devuelve 127.0.1.1?
hostname -i no inspecciona la red en absoluto: resuelve el nombre de host del sistema como lo haría cualquier aplicación, a través de /etc/hosts y luego del DNS. Los instaladores de Debian y Ubuntu añaden una línea que asocia el nombre de host a 127.0.1.1 para que la máquina pueda resolver su propio nombre sin red, y esa línea es lo que se devuelve. Usa la forma con I mayúscula, hostname -I, que lee las direcciones reales de las interfaces, o ip -4 addr para el detalle completo.¿Cómo encuentro las direcciones IP de otros dispositivos de mi red?
ip neigh show (o arp -a si net-tools está instalado). Para una visión completa, haz un barrido ping de la subred: nmap -sn 192.168.1.0/24 lista todos los hosts que responden, con sus nombres cuando el DNS inverso los proporciona. Sustituye por tu propia red, que puedes leer en la ruta scope link de ip route. En un VPS esto rara vez es útil, y escanear direcciones vecinas puede infringir las condiciones de tu proveedor.Adrien Roche, Editor de infraestructura y hosting
Ingeniero de sistemas con más de 10 años operando flotas de Windows Server y Linux. Adrien mantiene la documentación de infraestructura de rdp.monster y escribe nuestras guías sobre RDP, hosting VPS, administración de servidores, redes y herramientas de privacidad.




