# Iproute2

Iproute2 es un paquete de utilidades desarrollado por Alexey Kuznetsov. Este paquete es un conjunto de herramientas muy potentes para administrar interfaces de red y conexiones en sistemas Linux.
Este paquete reemplaza completamente las funcionalidades presentes en ifconfig, route, y arp y las extiende llegando a tener características similares a las provistas por dispositivos exclusivamente dedicados al ruteo y control de tráfico.
Este paquete se incluye en distribuciones de Debian y RedHat con versiones del núcleo posteriores a 2.2.

## Instalación

Se puede obtener de (enlace roto disponible en Internet Archive; véase el historial, la primera versión y la última).. Para poder instalar correctamente el paquete debemos asegurarnos previamente de que el núcleo sobre el que estamos corriendo este compilado con las siguientes opciones:
* Opción del Núcleo
* Kernel/User netlink socket
* Routing messages

## Funcionalidades

Algunas de las funcionalidades principales que provee iproute2 son:
* QoS (Quality of service), priorizando distintos tipos de tráfico. El control de tráfico está compuesto por varias operaciones distintas, entre ellas: un mecanismo de clasificación en el que se identifican los paquetes y se colocan en distintas clases o flujos, políticas en donde se limita el número de paquetes o en bytes que pueden ser utilizados en un stream de clasificación particular, además se tienen decisiones de planificación en donde se decide el orden.
* Mantener múltiples tablas de ruteo por diferentes puertas de enlaces conectadas a distintos dispositivos
* Balanceo de carga, asignándole pesos a cada una de las placas existentes dentro de mi máquina.
* Definición de túneles Los objetos tunnel son túneles que encapsulan paquetes en un formato IPv4 y se envían por la infraestructura IP

## La orden ip

La herramienta principal del paquete iproute2 es ip, su sintaxis y descripción se detalla a continuación:
OBJETO:
* 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

## ip route

Este comando administra las entradas de route con las tablas de encaminamiento que maneja el núcleo. Las tablas de encaminamiento del núcleo mantienen información sobre caminos hacía otros nodos conectados en la red.
Por cada entrada se tiene: el prefijo de protocolo, el cual es el par de dirección y máscara, y opcionalmente el valor para el tipo de servicio TOS (Type of Service).
Linux puede colocar múltiples tablas de encaminamiento identificadas por un número que va desde 1 a 255, o por un nombre tomado del archivo /etc/iproute2/rt_tables. Por defecto todas las tablas de encaminamiento son ingresadas en la tabla principal (Id 254) y el núcleo utiliza solo esta tabla para calcular los caminos.
Existe otra tabla que aunque no es visible es importante. Esta es la tabla id 255, la cual contiene información de caminos para direcciones locales y de broadcast. El núcleo mantiene esta tabla automáticamente y los administradores no deberían modificarla.
Las múltiples tablas de encaminamiento son utilizadas cuando se especifica la política de encaminamiento a utilizar.

## Ejemplos

* Agregar un camino hacia la red 10.0.0/24 por la puerta de enlace 192.168.0.2
* cambiar por una ruta directa por el dispositivo disp
* agrega un multicamino por defecto dividiendo la carga entre p1 y p2
* si quisieramos aplicar NAT antes de transmitir
* encontrar una salida para los paquetes de 192.168.0.2
* encontrar una ruta para enviar paquetes que llegan de 10.0.0.1 con destino 192.168.0.3
* para realizar Equilibrado de carga
El equilibrado de carga se realiza asignando pesos a cada puerta de enlace. Por ejemplo si tenemos dos puertas de enlace por defecto, ejecutamos:
Esto quiere decir que de tres paquetes que deban ser enviados por alguno de los dos gateways 2 serán enviados por 172.16.1.2 y 1 será enviado por 192.168.1.2