lunes, 13 de mayo de 2013

La breve chuleta del comando ip

El comando ip forma parte de iproute (o iproute2). Iproute en sí es un gran desconocido. De hecho, me he encontrado en varios clientes que la utilización de iproute lo ven como algo 'opcional'. Un sin sentido que muestra desconocimiento de los sistemas Linux actuales.

También parte es culpa de muchos manuales, que todavía nos hablan de los comandos ifconfig y route como la referencia para la configuración de la red, la realidad es que esto no es así, teniendo comportamientos inadecuados en ciertos escenarios. Bueno, al grano que me pierdo, que esto sólo iba a ser una breve chuleta de lo se puede hacer con ip para consulta rápida.

Configuración de la IP en una interfaz


Aunque la configuración de la IP en una interfaz de red se hace en los ficheros de configuración (/etc/network/interfaces en Debian o /etc/sysconfig/networking-scripts/ifcfgX en Red Hat) o con los comandos ifconfig, esto no hace más que llamar a ip para realizar las acciones convenientes. 

El esquema general de ip es
ip [OPTIONS] OBJECT { COMMAND }
Los objetos son link, addr (utilizados ambos por ifconfig para asignación de ip y activar la interfaz), route (empleado por el comando route). Hay otros objetos como rule (configuración de rutas más avanzada) o tunnel (para los túneles) por nombrar alguno.

Poner la ip 10.20.30.40 con mascara de red 255.255.255.0 a la interfaz eth0 es algo tan simple como
ip addr add 10.20.30.40/24 dev eth0
Para retirar la ip a la interfaz, sustituimos el add por un del.
ip addr del 10.20.30.40/24 dev eth0
Al ejecutar el comando asignación de ip, también estamos estableciendo una ruta para comunicarnos con la red 10.230.30.0/24. Podemos hacer la prueba viendo antes las rutas (con el comando ip route) antes y despues de quitar la ip a la interfaz eth0.

Rutas y rutas por defecto


Aunque antes lo dije, cuando se establece un ip a un dispositivo, ya estamos agregando una entrada de ruta. Esta ruta sirve para comunicarse con los dispositivos de la misma red. Para comunicarnos con dispositivos de otras redes, hay que poner rutas adicionales. Con estas rutas indicamos que dispositivos se puede utilizar para enviar esas comunicaciones (o que ips se deben utilizar para comunicarnos con esos elementos).

Para comunicarnos con un equipo que pertenece a una red 192.168.100.1/26 podemos hacerlo mediante la una ruta que utilice la interfaz eth0 o con un ruta por defecto (todas las comunicaciones que vayan fuera, utilizan la de por defecto)
ip route add 192.168.100.100/26 via eth0ip route add default via eth0
Para quitar las rutas, se emplan los mismos comandos pero se sustituyen los add por del.

En el 100% de los casos, con esto tenemos resuelto los problemas que puede traernos hacer la configuración ip de cualquier dispositivo en nuestro Linux. Los problemas que nos pueden surgir desde aquí, tendrán más bien relación con el establecimiento de rutas avanzadas (objeto rules) y quedan fuera de esta chuleta.