RDP Monster

Cómo ver tu dirección IP en Linux: ip addr, hostname -I, curl

Cómo ver tu dirección IP en Linux: ip addr, hostname -I, curl

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

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

Cómo leerla:

  • Nombre de la interfaz. lo es el loopback, siempre 127.0.0.1, accesible solo desde la propia máquina. Aquí la tarjeta real es eth0; con los nombres de interfaz predecibles aparece como ens3, enp0s3 o eno1, y las tarjetas inalámbricas empiezan por wl.
  • inet es la dirección IPv4 e inet6 la IPv6. El sufijo /24 es la longitud del prefijo en notación CIDR, la escritura moderna de la máscara de red 255.255.255.0.
  • scope global significa enrutable más allá de este host; scope link (la línea fe80::) solo es válida en el segmento de red conectado; scope host es loopback.
  • state UP con LOWER_UP significa que la interfaz está habilitada y tiene enlace. state DOWN o NO-CARRIER es 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 interface

La 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/16

hostname -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::25

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

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

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

Si 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.25

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

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

ComandoQué muestraIdeal para
ip addr / ip -br -4 addrTodas las interfaces, todas las direcciones, el estadoUso diario, la visión completa
hostname -ITodas las direcciones en una líneaUn vistazo rápido
ip route get 1.1.1.1Dirección de origen usada hacia internetScripts, hosts con varias interfaces
ifconfigUna IPv4 por interfaz (en desuso)Sistemas heredados, tutoriales antiguos
curl -4 icanhazip.comIPv4 pública tal como la ve internetNAT, 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 +short

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

Lista todas las direcciones configuradas en todas las interfaces, incluidos los puentes virtuales.
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 pertenece a net-tools, que las distribuciones actuales ya no instalan por defecto.
El comando 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?

La -i en minúscula resuelve el nombre de host a través de /etc/hosts, donde los sistemas basados en Debian lo asocian a 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?

Consulta la tabla de vecinos con ip neigh, o barre la subred con nmap -sn.
Los dispositivos con los que tu máquina ha intercambiado paquetes recientemente están en la caché ARP/de vecinos, que muestra 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.

Regístrate en nuestro programa de revendedores

Tus datos

Si tienes alguna pregunta, contáctanos haciendo clic aquí !
Nombre y apellidos(Obligatorio)
Introduce tu correo electrónico; debes tener una cuenta en dashboard.rdp.monster !

Tu empresa

Introduce la dirección de tu sitio web si tienes uno
Explica brevemente cómo vas a vender los servicios a tus clientes. Por ejemplo, hablando con gente en foros.

¡Usamos cookies!

Utilizamos cookies para mejorar tu experiencia de navegación, mostrar anuncios o contenido personalizados y analizar nuestro tráfico. Al hacer clic en «Aceptar», consientes nuestro uso de cookies.