2011-12-09

Uso del comando IP

Teniendo en cuenta que ha muchos usuarios o administradores principiantes no conocen herramientas por consola para determinar el estado de las red, del enlace, el direccionamiento IP, las rutas y demás parámetros de TCP/IP del sistema, decidí hacer esta entrada como un aporte básico de administración usando el comando IP, que es el que Debian y casi todos los Linux traen por defecto en sus instalaciones.

Este comando tiene 10 opciones complementarias de sintaxis, ya que no se puede usar completamente solo, y estas son las siguientes:


  1. link --> Permite realizar monitoreo y configuraciones directamente sobre el dispositivo de red.
  2. addr --> Permite la configuración y visualización de parámetros de IPv4 e IPv6 que se encuentran en el dispositivo.
  3. addrlabel --> Permite colocarle una etiqueta a la configuración de la tarjeta.
  4. neighbour --> Permite administrar y monitorear entradas guardadas en el cache de ARP.
  5. route --> Permite la administración de la tabla de enrutamiento de TCP/IP.
  6. rule --> Permite generar reglas para la base de datos de enrutamiento del sistema
  7. maddr --> Administración de direccionamiento multicast
  8. mroute --> Administración de enrutamiento multicast
  9. tunnel --> Permite la generación de túneles sobre IP
  10. xfrm --> Administración de características de IPSec 

No las se manejar todas por lo que mostrare los ejemplos mas relevantes de los que conozco.

IP LINK

Permite manejar las características de la capa de enlace en el dispositivo de red, por defecto el muestra datos como el mtu, el estado de la conexión, longitud de la cola de transmisión, dirección MAC, entre otros, como se ve a continuación

root@localhost:~# ip link
1: lo: mtu 16436 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
    link/ether 6c:62:6d:4e:98:2d brd ff:ff:ff:ff:ff:ff

Sin embargo, si le adicionas la opción S el sistema te mostrara algunos datos adicionales muy importantes, tales como si la tarjeta tiene o no colisiones y/o errores en la transmisión, además la cantidad de bytes transmitidos y recibidos, como se ve en el ejemplo a continuación

root@guardianmar ~]# ip -s link show eth0
2: eth0: mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 2c:27:d7:14:18:5b brd ff:ff:ff:ff:ff:ff
    RX: bytes  packets  errors  dropped overrun mcast   
    1959086592 582608492 0       0       0       6      
    TX: bytes  packets  errors  dropped carrier collsns 
    858442681  433455195 4596945 0       0       8807701



IP ADDR

Este permite administrar la capa de red del dispositivo, configurando el direccionamiento de IPv4 e IPv6. La salida por defecto muestra la configuración IP actual de todos los dispositivos, como se ve a continuación

root@localhost:~# ip addr
1: lo: mtu 16436 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
    link/ether 6c:62:6d:4e:98:2d brd ff:ff:ff:ff:ff:ff
    inet6 fe80::6e62:6dff:fe4e:982d/64 scope link 
       valid_lft forever preferred_lft forever
3: eth1: mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
    link/ether 00:e0:b3:10:80:99 brd ff:ff:ff:ff:ff:ff
4: vnet0: mtu 1500 qdisc noqueue state UNKNOWN 
    link/ether 6c:62:6d:4e:98:2d brd ff:ff:ff:ff:ff:ff
    inet 10.0.1.38/24 brd 10.255.255.255 scope global vnet0
    inet6 fe80::6e62:6dff:fe4e:982d/64 scope link 
       valid_lft forever preferred_lft forever

Ahora para adicionar una dirección a una tarjeta sería con el siguiente comando

root@localhost:~# ip addr add 10.0.1.39/24 dev eth0

Con esto adicionas la IP 10.0.1.39 al dispositivo eth0, creando una IP virtual si este ya tiene dirección. Para eliminarla es practicamente el mismo comando pero con la opción del, como se ve a continuación

root@localhost:~# ip addr del 10.0.1.39/24 dev eth0

Para ver los datos únicamente de un dispositivo se debe usar la opción show y el dispositivo que se deseea así

root@localhost:~# ip addr show eth4.20
10: eth4.20@eth4: mtu 1500 qdisc noqueue 
    link/ether 00:26:55:e3:9b:aa brd ff:ff:ff:ff:ff:ff
    inet 172.30.234.1/24 brd 172.30.234.255 scope global eth4.20
    inet 172.30.234.26/24 brd 172.30.234.255 scope global secondary eth4.20:1
    inet 172.30.234.35/24 brd 172.30.234.255 scope global secondary eth4.20:2
    inet 172.30.234.125/24 brd 172.30.234.255 scope global secondary eth4.20:3
    inet 172.30.234.126/24 brd 172.30.234.255 scope global secondary eth4.20:4
    inet 172.30.234.36/24 brd 172.30.234.255 scope global secondary eth4.20:5
    inet 172.30.234.37/24 brd 172.30.234.255 scope global secondary eth4.20:6

Esta última es especial por que es una configuración de VLAN con 7 direcciones IP configuradas en el dispositivo.


 IP NEIGH

Permite visualizar la tabla de cache de ARP del sistema e identificar con esto un posible ataque de hombre en el medio o conocer las MAC de sus vecinos, como se puede apreciar a continuación

root@localhost:~# ip neigh
10.0.1.3 dev vnet0 lladdr 8c:89:a5:13:ee:c0 STALE
10.0.1.1 dev vnet0 lladdr 00:03:ce:89:e8:12 REACHABLE

Con la opción add permite adicionar una entrada a la tabla ARP de forma permanente o con el del eliminar una entrada directamente. Si se desea eliminar completamente la tabla se debe realizar el siguiente comando

root@localhost:~# ip neigh flush

Y para ver la tabla de una sola tarjeta se debe ejecutar el siguiente comando

root@localhost:~# ip neigh show dev eth0


IP ROUTE

Permite la administración y control de la capa de red del modelo TCP/IP en Linux, donde podemos visualizar las tablas de enrutamiento IP. A diferencia del comando route, este entrega todas las posibilidades de la tabla de enrutamiento, como por ejemplo cuando se tiene una máquina que balancee tráfico y tiene dos puertas de enlace. Por defecto en una máquina normal la salida de este comando sería así


root@localhost:~# ip route
10.0.1.0/24 dev eth0  proto kernel  scope link  src 10.0.1.39 
169.254.0.0/16 dev eth0  scope link 
default via 10.0.1.1 dev eth0

Pero si el sistema posee múltiples conexiones y varias rutas por defecto para hacer balanceo, el comando nos permite identificar cada una de estas y su peso en el balanceo, como se ve a continuación


root@localhost:~# ip route
172.16.30.2 dev tun0  proto kernel  scope link  src 172.16.30.1 
172.19.0.2 dev tun3  proto kernel  scope link  src 172.19.0.1 
172.17.0.2 dev tun2  proto kernel  scope link  src 172.17.0.1 
200.293.151.188/30 dev eth1  proto kernel  scope link  src 230.293.151.189 
198.125.251.200/29 dev eth2  proto kernel  scope link  src 198.125.251.202 
192.168.20.0/24 via 172.17.0.2 dev tun2 
10.0.0.0/24 via 192.168.0.8 dev eth0 
192.168.150.0/24 via 192.168.0.8 dev eth0 
192.168.1.0/24 via 172.19.0.2 dev tun3 
192.168.0.0/24 dev eth0  proto kernel  scope link  src 192.168.0.100 
172.16.30.0/24 via 172.16.30.2 dev tun0 
192.168.30.0/24 via 192.168.0.8 dev eth0 
169.254.0.0/16 dev eth2  scope link 
default 
nexthop via 198.125.251.205  dev eth2 weight 8
nexthop via 230.293.151.190  dev eth1 weight 1


Ahora como también permite administrar tiene mecanismos para adicionar o eliminar rutas, los cuales he mostrado en anteriores entradas, y que tienen la siguiente estructura.

Adicionar
root@localhost:~# ip route add 225.255.225.16/30 via 192.168.2.1 dev eth0

Elminiar
root@localhost:~# ip route del 225.255.225.16/30 via 192.168.2.1 dev eth0

Modificar la Ruta por defecto
root@localhost:~# ip route change default  via 12.16.152.15 dev eth1

Adición de Ruta por defecto con varios canales
root@localhost:~# ip route add default scope global nexthop  via 84.2.18.12 dev eth1 weigth 1 nexthop via 15.5.25.66 dev eth0 weigth

Ahora para la parte de control también tiene sus ayudas especiales, como poder hacer búsquedas de una red, ver solo la tabla de enrutamiento de una regla establecida (veremos más adelante las reglas), entre otras como veremos a continuación.

Búsqueda de red
root@localhost:~# ip route show match 172.20.0

172.20.0.0/22 via 172.20.254.18 dev eth1 
default via 86.58.43.17 dev eth6
root@localhost:~# ip route show match 172.20.4
172.20.4.0/22 via 10.1.1.5 dev eth3 
default via 86.58.43.17 dev eth6

 Visualizar una sola tabla

root@localhost:~# ip route show table 10
210.3.11.188/30 dev eth1  proto kernel  scope link  src 210.3.11.189 
141.5.1.200/29 dev eth2  proto kernel  scope link  src 141.5.1.204 
192.168.0.0/24 dev eth0  proto kernel  scope link  src 192.168.0.100 
192.168.30.0/24 via 192.168.0.8 dev eth0 
169.254.0.0/16 dev eth2  scope link 
default via 141.5.1.202 dev eth2
root@localhost:~#ip route show table 20

210.3.11.188/30 dev eth1  proto kernel  scope link  src 210.3.11.189 
141.5.1.200/29 dev eth2  proto kernel  scope link  src 141.5.1.204 
192.168.0.0/24 dev eth0  proto kernel  scope link  src 192.168.0.100 
192.168.30.0/24 via 192.168.0.8 dev eth0 
169.254.0.0/16 dev eth2  scope link 

default via 210.3.11.190 dev eth1