IPRoute el gran director I

IPRoute, la otra cara de la moneda

Por herencia de los ancestrales unixs, linux, tiene 3 herramientas fundamentales para la configuración de las redes:

ifconfig, route y arp.

Sin embargo, estos comandos, no nos pueden proveer de todo el potencial que el kernel linux puede darnos para nuestras redes.
He tratado de exponer en los artículos sobre Netfilet, la punta del iceberg de lo que Linux puede hacer en cuanto al manejo de paquetes de red.
IPRoute2, es el conjunto de herramientas que nos  terminará de dar el control completo sobre todo ‘paquetito’ que quiera circular por nuestra red.

Adiciono una lista de los programas que instala IProute2:

Programas instalados: arpd, ctstat (enlace a lnstat), genl, ifcfg, ifstat, ip, lnstat, nstat, routef, routel, rtacct, rtmon, rtpr, rtstat (enlace a lnstat), ss y tc

Descripciones cortas

arpd Demonio ARP a nivel de usuario, útil en redes realmente grandes en las que la implementación ARP del núcleo es insufuciente, o cuando se configura un “honeypot”.
ctstat Utilidad para el estado de la conexión.
genl
ifcfg Un guión del intérprete de comandos que actúa como envoltorio para el comando ip.
ifstat Muestra las estadísticas de las interfaces, incluida la cantidad de paquetes enviados y recibidos por la interfaz.
ip El ejecutable principal. Tiene diferentes funciones:

ip link <dispositivo> permite a los usuarios ver el estado del dispositivo y hacer cambios.

ip addr permite a los usuarios ver las direcciones y sus propiedades, añadir nuevas direcciones y borrar las antiguas.

ip neighbor permite a los usuarios ver los enlaces de vecindad, añadir nuevas entradas de vecindad y borrar las antiguas.

ip rule permite a los usuarios ver las políticas de enrutado y cambiarlas.

ip route permite a los usuarios ver las tablas de enrutado y cambiar las reglas de las tablas.

ip tunnel permite a los usuarios ver los túneles IP y sus propiedades, y cambiarlos.

ip maddr permite a los usuarios ver las direcciones multienlace y sus propiedades, y cambiarlas.

ip mroute permite a los usuarios establecer, cambiar o borrar el enrutado multienlace.

ip monitor permite a los usuarios monitorizar continuamente el estado de los dispositivos, direcciones y rutas.

lnstat Proporciona estadísticas de redes Linux. Es un sustituto generalista y con características más completas para el antiguo programa rtstat.
nstat Muestra las estadísticas de la red.
routef Un componente de ip route. Este es para refrescar las tablas de enrutado.
routel Un componente de ip route. Este es para listar las tablas de enrutado.
rtacct Muestra el contenido de /proc/net/rt_acct.
rtmon Utilidad para la monitorización de rutas.
rtpr Convierte la salida de ip -o a un formato legible
rtstat Utilidad para el estado de rutas.
ss Similar al comando netstat. Muestra las conexiones activas.
tc Ejecutable para el control del tráfico. Este es para las implementaciones Quality Of Service (QOS, Calidad de Servicio) y Class Of Service (COS, Clase de Servicio).

tc qdisc permite a los usuarios establecer la disciplina de colas.

tc class permite a los usuarios establecer clases basadas en la planificación de las disciplinas de colas.

tc estimator permite a los usuarios hacer una estimacón del flujo de red en una red.

tc filter permite a los usuarios establecer el filtrado de paquetes QOS/COS.

tc policy permite a los usuarios establecer las políticas QOS/COS.

Como veran, iproute no es un tema trivial, la idea de este articulo es ver el manejo BÁSICO del comando ip.

Para comenzar a ver los primeros rayos de luz, comenzaremos por la administración mas básica y cotidiana.

Adios ifconfig

Repasemos el uso de ifconfig:

Onix:~# ifconfig eth1
eth1      Link encap:Ethernet  HWaddr 00:00:01:51:31:61
          inet addr:10.6.1.1  Bcast:10.6.1.255  Mask:255.255.255.0
          inet6 addr: fe80::221:86ff:fe5c:3761/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:44098 errors:0 dropped:0 overruns:0 frame:0
          TX packets:27090 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:16877090 (16.0 MiB)  TX bytes:6276440 (5.9 MiB)
          Memory:fe000000-fe020000

Ejecutando ifconfig con una interfaz como argumento nos muestra cierta cantidad de información, generalmente mas que suficiente para las tareas diarias.
Generalmente usaremos ifconfig, para configuar la dirección IP (direccion ip y mascara de de sub red), tambien para saber justamente cual es la dirección configurada, o bien para activar o desactivar una interfaz (up / down). Otra tarea, es la de crear interfaces virtuales o alias (ifconfig eth1:1 192.168.0.1).
Veamos como traducir esto a iproute, y luego explicamos como funciona!

Primeramente, iproute es un paquete que contiene 2 herramientas fundamentales ip y tc. En este momento nos centraremos en el comando ip que al igual que iptables, es una interfaz para el manejo que hace el kernel.

Basta de alaraca!

Lo que ante haciamos con un ‘ifconfig -a’ (mostrar la info de todas las interfaces), ahora podremos hacerlo con:

Onix:~# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> 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: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 100
link/ether 00:00:01:51:31:61 brd ff:ff:ff:ff:ff:ff
inet 10.6.1.1/24 brd 10.6.1.255 scope global eth1
inet6 fe80::221:86ff:fe5c:3761/64 scope link
valid_lft forever preferred_lft forever

Probablemente te tire algo parecido, pero lo primero a recalcar, es que la información básica que encontrábamos en el comando ancestral, también la encontraremos aquí. Nos estamos refiriendo a la dirección ip (dirección y mascara), pero antes de ahondar, hagamos unos ejemplos mas.

Lo que antes haciamos con ‘ifconfig eth1’.. adivinen…

Onix:~# ip addr show eth1
2: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 100
link/ether 00:00:01:51:31:61 brd ff:ff:ff:ff:ff:ff
inet 10.6.1.1/24 brd 10.6.1.255 scope global eth1
inet6 fe80::221:8
6ff:fe5c:3761/64 scope link
valid_lft forever preferred_lft forever

Eso es simple.. sigamos.

Lo que antes haciamos con ‘ifconfig eth1:1 10.0.0.1’ (un alias, o una interfaz virtual) ahora lo haríamos:

Onix:~# ip addr add 10.0.0.1 dev eth1 &&  ip addr show eth1
2: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 100
link/ether 00:00:01:51:31:61 brd ff:ff:ff:ff:ff:ff
inet 10.6.1.1/24 brd 10.6.1.255 scope global eth1
inet 10.0.0.1/32 scope global eth1
inet6 fe80::221:8
6ff:fe5c:3761/64 scope link
valid_lft forever preferred

Vemos que se agrego una linea ‘inet 10.0.0.1/32 scope global eth1’, que si hacemos un ifconfig, es como si ni existiera.
Hasta ahi con el ifconfig, veamos como cambia el tema de las rutas.

‘route’, es un comando simple de usar, pero suficientemente potente para las tareas mas comunes, pero, no explota de forma completa lo que Linux puede hacer por nosotros.

Si antes haciamos ‘route -n’, ahora podemos hacer:

Onix:~# ip route list
10.1.1.0/24 dev eth1  proto kernel  scope link  src 10.1.1.1
default via 10.1.1.100 dev eth1

La informacion es casi la misma…

Bien ya vimos suficiente como para darnos cuenta que el comando ip centraliza las tareas, y trabaja de una forma distinta a la acostumbrada en los sistemas unix, sin embargo esto se adecua más a los sistemas embebidos, como por ejemplo los sistemas CISCO.
Ahora, ya dejemos las recetas prácticas y veamos un poco de teoria.

Primero, vamos a convencernos de que iproute2 no solo provee una nueva sintaxis, si no que tiene verdaderos beneficios.
Para varios, les sera de interés, saber que iproute provee la posibilidad de hacer balanceo de carga,  es decir, dividir la cantidad de tráfico en distintas conexiones.
Otro de los beneficios, es poder tener varias tablas de routeo, para configurar redes complejas, y algo de lo que se habla mucho en este tiempo, que es la posibilidad de usar QoS para limitar el ancho de banda de las conexiones.
Si comparamos esto, con las arcaicas herramientas, veremos que iproute2 es una herramienta poderosa.
Revisemos entonces la forma de trabajar de iproute2, en particular, del comando ip.

Sintanxis

El comando ip, concibe a todo como un objeto, al cuál le cambiará ciertas cualidades de dicho objeto.
Por lo cuál su sintaxis es la siguiente:

ip [ opciones ] Objeto [ Comando [ argumentos ]]

Los objetos son los siguientes (extraido de wikipedia):

  • link Para configurar los objetos físicos o lógicos de la red
  • address Manejo de direcciones asociadas a los diferentes dispositivos. Cada dispositivo debe tener al menos una dirección asociada.
  • neighbour Permite a los usuarios ver los enlaces de vecindad, añadir nuevas entradas de vecindad y borrar las antiguas.
  • rule Permite a los usuarios ver las políticas de enrutado y cambiarlas.
  • route Permite a los usuarios ver las tablas de enrutado y cambiar las reglas de las tablas.
  • tunnel Permite a los usuarios ver los túneles IP y sus propiedades, y cambiarlos.
  • maddr Permite a los usuarios ver las direcciones multienlace y sus propiedades, y cambiarlas.
  • mroute Permite a los usuarios establecer, cambiar o borrar el enrutado multienlace.
  • monitor Permite a los usuarios monitorizar continuamente el estado de los dispositivos, direcciones y rutas

Veamos el ‘objeto’ mas común: address

Desde aquí se administraran las direcciones del protocolo IP (v4 o v6) asignadas a los dispositivos (interfaces).
Como ya se mencionó cada dispositivo debe tener como mínimo una dirección, lo que significa que podrá tener mas de una también.
A diferencia de ‘ifconfig’, no se llama ‘alias’ a las direcciones agregadas, si no que iproute llama dirección primaria (a la dirección principal) y direcciones secundarias (a lo que llamabamos alias).

Address, también abreviado como ‘addr’, tiene los siguientes comandos:
‘add’, ‘del’, ‘show’, ‘flush’, ‘change’, y ‘replace’.
No son dificil de imaginar para que sirven cada uno, pero veremos algunos ejemplos.

Add:
Agrega una dirección a un dispositivo.

ip route add 10.0.0.1/24 broadcast 10.0.0.255 dev eth1

Como verán, no implica mucha complejidad.
Vimos en su sintaxis, que ‘route’ era el objeto, y ‘add’ es un comando.
Los argumentos usados para este comando, fueron:
10.0.0.1/24 : Dirección IPv4 en notación CDIR.
broadcast 10.0.0.255 : Dirección de broadcast
dev eth1 : Nombre del dispositivo

Existen otros argumentos opcionales para el comando add, y se pueden ver haciendo, como siempre.. un man ip

Del:

Borra una dirección de un dispositivo.

ip address del 10.0.0.1/24 dev eth1

El comando del, necesita que le mencionen el dispositivo al cual se le quiere borrar una dirección, y la dirección que se quiere borrar, que si no se mencionara, se borraría la primera.

Show:

Lista las interfaces y sus direcciones, y se especifica una en particular, se lista las características de esa.

Onix:~# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> 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: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 100
    link/ether 00:11:46:6c:34:61 brd ff:ff:ff:ff:ff:ff
    inet 10.1.1.1/24 brd 10.1.1.255 scope global eth1
    inet6 fe80::221:86ff:fe5c:3761/64 scope link
      valid_lft forever preferred_lft forever

O bien podemos listar una sola usando ‘ip addr show eth1’, para mostrar solo la eth1.
El comando show, también soporta mostrar las interfaces que cumplen con una característica, por ejemplo:

ip addr show to 192.168.1.1/24

Me mostraría todas las interfaces con una dirección 192.168.1.1.
Algunas de las características que se pueden usar son:
dev: Nombre del dispositivo.
scope: Dispositivos que coincidan con ese ‘scope’ (ámbito)
to: Dispositivos que contengan la ip dada.
label: ‘etiqueta’ del dispositivo
Y aquí paramos un segundito, ya que es valido aclarar, que cuando agregamos una dirección secundaria, podemos asignarle una etiqueta.
Pensemos que cuando hacemos un ‘ifconfig eth1:1 192.168.1.11’, en realidad lo que hacemos es asignarle una dirección más a la interfaz eth1, la cual llamamos eth1:1 para identificarla de forma diferente. Con ‘ip’, podemos agregar una dirección, de forma lisa y llana, o bien, asignandole una etiqueta, la cual debe coincidir en las primeras letras con el nombre del dispositivo. Por ejemplo, una dirección secundaria a eth1, podria tener un ‘label’ que se llame eth1secu o bien eth1:1.

Flush:

Se darán cuenta que hace un flush (borrado, lavado) de las direcciones de una interfaz.

ip addr flush eth1

Con lo que eth1 quedaria sin ninguna dirección IP

Bien, con esto, solo hemos visto apenas como usar el comando ip, para manejar direcciones ip.
Veamos ahora un poquito acerca de las rutas.

Otro ‘objeto’ muy usado es ‘route’, desde el cual se puede controlar de forma avanzada el sistema de router del kernel. Para finalizar este pequeño articulo sobre iproute, veamos el manejo básico y estaremos en condiciones para el proximo artículo, de hablar de cosas un poco mas ‘avanzadas’.
Con ‘ip route’ así solito, el comando nos listará las rutas definidas. Usar ‘ip route’ es sinonimo de ‘ip route show’ ó ‘ip route list’.
Al igual que Netfilter, ‘ip’ utiliza tablas, que sirven para definir las reglas de  routeo.
Cada entrada de la tabla contiene un dato clave, que es la dirección de la red/host. Cuando un paquete matchea contra esa regla/ruta, (o matchea con el TOS, veremos mas adelante), se le aplica la ruta a dicho paquete.  En caso de encontrarse varias coincidencias, primero se observa la dirección de red, luego el TOS, y finalmente la preferencia)

Podemos ver, que los comandos que podemos tirar sobre este objeto son iguales a los de addres.
Flush, como es de esperar, borrará la ruta/s deseadas, o todas si no se pasan argumentos, y ya dijimos que show, ó list (también abreviado como s, sh, ó l, ls, list, nos muestra las rutas, y si lo indicamos, las rutas pertenecientes a algún criterio en particular como lo vimos con address. Se agrega un comando iteresante, que es get, el cual nos permite comprobar las rutas.
Para agregar una ruta, usamos:

ip route add 'ruta'

Donde en ‘ruta’, se definirán las distintas opciones que debe cumplir un paquete para matchear con la dicha ruta. Pero algo que no es opcional, es la dirección de la red, y justamente el destino que debe tomar los paquetes que matcheen con dicha ruta.
El uso mas común sería:

ip route add 10.0.0.0/24  via 192.168.1.2

Donde le decimos al kernel, que todo lo que quiera ir hacia la red 10.0.0.0/24, utilice de pasarela a la ip 192.168.1.2.
Para cambiar una ruta podemos usar, replace o change de la misma manera.
Y para borrar una ruta, cambiariamos el del, en lugar del add, y dejando todo lo demas igual.

Queda más por ver, pero trataremos de analizarlas de forma mas profunda en la segunda parte.

Todas las correcciones son bienvenidas! 😉

/* A partir de marzo nos estamos mudando a http://netsecure.com.arhttp://www.netvulcano.com.ar */

Anuncios
Publicado en Articulos. Etiquetas: , , , , , . 4 Comments »

4 comentarios to “IPRoute el gran director I”

  1. 9stepstofinancialfreedom Says:

    gracisa por la info

  2. José Adán Tapia C Says:

    Excelente gracias por el aporte

  3. sceuss Says:

    Super completa la informacion y muy util, gracias

  4. Ruteo en Linux vs Cisco – Parte 2 « NetVulcano Says:

    […] unixs, ya que la mejor manera de configurar las interfaces en linux, es con el pack de utilidades iproute2, que se haría de la siguiente […]


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: