La respuesta a esta interrogante puede parecer simple: "pues mirar en la boca de red de la interfaz de nuestra computadora a ver si tiene un cable conectado". Aunque la cosa cambia si estamos trabajando con un servidor, en un entorno corporativo. La respuesta puede cambiar a: "pues vamos hasta el CPD (centro de procesamiento de datos, centro de cómputos) a ver si el servidor tiene un cable conectado a la interfaz de red", eso si el CPD queda cerca de nuestra ubicación actual, y si tenemos permisos de acceso físico al mismo. Puede que estemos realizando un trabajo de consultoría en un cliente y no tengamos permiso de acceso físico al centro de cómputos. Pero la situación se complica aún más si el CPD queda relativamente lejos. Puede que estemos trabajando remotamente en un equipo ubicado a algunos cientos de metros, inclusive kilómetros, o miles de kilómetros si es un servicio en la nube. La posibilidad de acercarse físicamente al servidor a revisar su interfaz se diluye.

Por ello, en este breve artículo voy a demostrar diferentes técnicas para determinar, en GNU/Linux, si el cable de red está conectado a la interfaz y tiene enlace (link), es decir, que en la otra punta del cable haya algo conectado, y no sea una tostadora.

La primera técnica es la más común y conocida, y la que no puede fallar nunca: utilizar el viejo y querido comando ip. La herramienta ip es una suite completa para manipular absolutamente todos los componentes del protocolo IP (Internet Protocol) desde dispositivos, direcciones, tablas y políticas de ruteo, túneles y monitoreo. Esta herramienta se incluye desde la versión 2.2 del kernel Linux, razón por la cual funciona en absolutamente todo sistema GNU/Linux existente (no sé cuantos sistemas con kernel Linux < 2.2 pueden quedar aún con vida).

Esta herramienta aplica y obtiene configuraciones utilizando diferentes "objetos" para cada componente del protocolo. Por ejemplo, las direcciones IP se obtienen y configuran a través del objeto address, el cual se puede identificar utilizando "address", "addr", o simplemente "a". Puede resultar una herramienta demasiado avanza y compleja para un novato en el área de redes y teleprocesamiento, así que simplemente voy a comentar que para obtener configuraciones a nivel dispositivo se debe utilizar el objeto "link".

Por ejemplo, para obtener el estado de enlace del dispositivo "eth0", ejecutar ip link show eth0:

root@debian7# ip link show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT qlen 1000
    link/ether ff:fe:f5:dd:d4:43 brd ff:ff:ff:ff:ff:ff

Como se observa en la salida, la información de estado, "state UP", indica que la interfaz tiene enlace (link, tiene el cable conectado y enlazado correctamente con algún otro dispositivo de red). Si no tiene link, la salida reporta "state DOWN":

root@debian7# ip link show eth1
3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT qlen 1000
    link/ether ff:fe:f5:dd:d4:44 brd ff:ff:ff:ff:ff:ff

Si se desea ver el estado de enlace de todos los dispositivos, simplemente ejecutar ip link show.

Utilizando esta herramienta es posible, por ejemplo, agregar una dirección IP adicional a una interfaz ejecutando ip address add 192.168.1.34/24 dev eth0, o de forma abreviada ip a a 192.168.1.34/24 dev eth0. La suite ip autocompleta todos los objetos y comandos (al igual que Quagga es un comportamiento heredado de una conocida marca de equipos de red). Cabe aclarar que todos los cambios realizados con esta suite se pierden en cada reinicio, por ello cada distribución GNU/Linux implementa la persistencia de las configuraciones de red de diferentes formas.

Para dominar esta herramienta, leer la página de manual: man ip. En debian y derivados la documentación se encuentra separada en diferentes manpages: 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-tunnel(8) y ip-xfrm(8).

Otra forma de obtener información del estado de un enlace es utilizar ethtool. Esta herramienta se utiliza para consultar y controlar dispositivos de red Ethernet cableados. En Debian y derivados se instala ejecutando apt- get install ethtool.

Esta herramienta reporta información interesante, como la velocidad negociada y los modos de links soportados y ofrecidos:

root@debian7# ethtool eth0
Settings for eth0:
        Supported ports: [ TP ]
        Supported link modes:   10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Full
        Supported pause frame use: No
        Supports auto-negotiation: Yes
        Advertised link modes:  10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Full
        Advertised pause frame use: No
        Advertised auto-negotiation: Yes
        Speed: 1000Mb/s
        Duplex: Full
        Port: Twisted Pair
        PHYAD: 1
        Transceiver: internal
        Auto-negotiation: on
        MDI-X: Unknown
        Supports Wake-on: g
        Wake-on: d
        Link detected: yes

La salida reporta si una interfaz tiene enlace, y es posible filtrarla con grep:

root@debian7# ethtool eth0 | grep Link
        Link detected: yes

Una tercera técnica para determinar si una interfaz tiene link, consiste en consultar el nodo /sys/class/net del sistema de archivos virtual /sys que contiene información de controladores y dispositivos:

root@debian7# ls /sys/class/net/
eth0  eth1  eth2  eth3  lo

Como se observa, en este nodo existe un directorio para cada dispositivo de red, y diferentes archivos que exportan información relevante sobre los mismos:

root@debian7# ls /sys/class/net/eth0
addr_assign_type  broadcast  dev_id   flags    iflink     netdev_group  queues      subsystem     uevent
address           carrier    dormant  ifalias  link_mode  operstate     speed       tx_queue_len
addr_len          device     duplex   ifindex  mtu        power         statistics  type

Los archivos carrier y operstate reportan si la interfaz tiene "carrier" (cual es el estado del link físico, es decir, si la interfaz tiene señal) y cual es su estado operacional, respectivamente:

root@debian7# cat /sys/class/net/eth0/carrier
1
root@debian7# cat /sys/class/net/eth0/operstate
up

Como se observa, la interfaz tiene carrier y está levantada (up). Los diferentes estados operacionales pueden ser: "unknown" (por ejemplo, si no tiene driver), "notpresent" (no se detecta su presencia), "down", "lowerlayerdown" (si la interfaz está apilada a otra interfaz que está "down"), "testing", "dormant" y "up".

Si desconectan el cable el carrier pasa a 0, y el estado operacional a "down":

root@debian7# cat /sys/class/net/eth0/carrier
0
root@debian7# cat /sys/class/net/eth0/operstate
down

Yo hice la prueba con una máquina virtual VMware, ya que permite desconectar el cable sin remover la interfaz de hardware virtual (QEMU/KVM aún no posee esta funcionalidad).


Tal vez pueda interesarte


Compartí este artículo