Protocolo IP
Funcionalidad
El protocolo IP, como bien es sabido, es el que se emplea a nivel de red, dentro de la arquitectura de protocolos de comunicaciones TCP/IP para la transmisión de paquetes desde un equipo hasta otro, a través de pasarelas y encaminadores. Es el que nos va a permitir asignar direcciones a las distintas interfaces de un equipo y crear la tabla de rutas correspondiente, que será la que se utilice para determinar qué camino han de tomar los paquetes.
A eso se resume la funcionalidad básica del protocolo IP propiamente dicho. No obstante, puesto que hay muchos protocolos que se apoyan en él (RIP, OSPF, BGP, etc.), existen otros aspectos a los que hay que hacer referencia y que necesitan ser explicados más detalladamente. En este caso, como se puede observar a continuación, el único parámetro que ha hecho falta analizar ha sido el modo de envío broadcast de los datagramas IP.
Broadcast
De entre todas las formas en las que el protocolo IP puede enviar un paquete, el modo broadcast es aquel mediante el cuál un paquete enviado por un equipo es distribuido a todos los equipos conectados a esa misma red. Como ya hemos comentado anteriormente, esta opción en sí no es relevante para el funcionamiento del protocolo IP sin embargo, para protocolos de encaminamiento dinámico como RIP, OSPF o BGP, es fundamental, ya que es uno de los mecanismos que utilizan para que un router pueda enviar las rutas que tiene almacenadas al resto de router conectados a la red.
Configuración CIT
Para poder implementar las operaciones anteriores en el router GNU/Linux es necesario averiguar previamente cómo se hacen en CIT, porque nos pueden servir de guía y porque nos van a hacer falta cuando queramos realizar alguna prueba concreta en la que haya un router CIT involucrado.
Interfaces
Agregar dirección
Operación que asigna una dirección IP a una interfaz determinada.
p 4 Config> protocol ip -- Internet protocol user configuration -- IP config> address <interfaz> <dir_IP> <máscara>
Borrar dirección
Operación que borra la dirección IP asociada a una interfaz concreta.
p 4 Config> protocol ip -- Internet protocol user configuration -- IP config> no address <interfaz> <dir_IP> <máscara>
Mostrar interfaces
Operación que muestra la información relativa a todas y cada una de las interfaces existentes.
p 4 Config> protocol ip -- Internet protocol user configuration -- IP config> list addresses
Habilitar broadcast
Con esta opción lo que hacemos es habilitar el envío de direcciones broadcast a través de una interfaz concreta, determinando para ello cómo queremos que se construya la parte de la dirección correspondiente a la máquina (completando con 1’s, que es como vamos a hacerlo nosotros, o completando con 0’s).
p 4 Config> protocol ip -- Internet protocol user configuration -- IP config> broadcast-address network <interfaz|dir_interfaz> 1
Deshabilitar broadcast
Con esta opción se deshabilita el envío de direcciones broadcast a través de una interfaz concreta.
p 4 Config> protocol ip -- Internet protocol user configuration -- IP config> no broadcast-address network <interfaz|dir_interfaz> 1
Rutas
Agregar ruta
Operación que inserta una nueva entrada en la tabla de rutas.
p 4 Config> protocol ip -- Internet protocol user configuration -- IP config> route <dir_destino> <máscara> <dir_sig_salto|interfaz>
Borrar ruta
Operación que elimina una entrada concreta de la tabla de rutas.
p 4 Config> protocol ip -- Internet protocol user configuration -- IP config> no route <dir_destino> <máscara> <dir_sig_salto|interfaz>
Mostrar rutas
Existen dos tipos de rutas que un router puede manejar y almacenar: rutas estáticas y rutas dinámicas. Las rutas estáticas son aquellas que no varían nunca y que fueron creadas en su momento por el administrador de la máquina, mientras que las rutas dinámicas son aquellas que el router aprende de forma automática de otros router, a través de protocolos específicos como RIP, OSPF o BGP.
Para ver únicamente la tabla de rutas estáticas del router, basta con hacer lo siguiente:
p 4 Config> protocol ip -- Internet protocol user configuration -- IP config> list routes
Ahora bien, si lo que se quiere es ver todas las rutas existentes (estáticas y dinámicas), se debe proceder de la siguiente manera:
p 3 Console Operator +protocol ip -- IP protocol monitor -- IP+ dump-routing-table rip
Configuración GNU/Linux
La manera en que se van a realizar las operaciones aquí descritas va a ser a través del servicio Zebra (Quagga), que es el que se encarga de gestionar todo lo relacionado con el protocolo IP. Sin embargo, puesto que el router trabaja con un kernel Linux, se va a mostrar también como podrían llevarse a cabo algunas de estas operaciones desde la consola.
Interfaces
Agregar dirección
Si queremos asignar una dirección IP a una interfaz específica, podemos hacerlo desde la consola de GNU/Linux procediendo de la siguiente forma:
> sudo ifconfig <interfaz> <dir_IP> netmask <máscara>
Y si lo hacemos a través de Zebra, habrá que hacer lo siguiente:
Router> enable Password: Router# configure terminal Router(config)# interface <interfaz> Router(config-if)# ip address <dir_IP>|<máscara>
Borrar dirección
Para borrar la dirección IP asociada a una determinada interfaz, sólo podemos hacerlo a través de Zebra ejecutando los siguientes mandatos:
Router> enable Password: Router# configure terminal Router(config)# interface <interfaz> Router(config-if)# no ip address <dir_IP>|<máscara>
Mostrar interfaces
Para mostrar la información relativa a todas y cada una de las interfaces existentes, tenemos que ejecutar cualquiera de los siguientes mandatos, si decidimos hacerlo a través de la consola de GNU/Linux:
> ifconfig > ifconfig <interfaz>
Y si lo hacemos con Zebra, entonces habrá que ejecutar lo siguiente:
Router> show interface
Rutas
Antes de pasar a comentar en detalle cada una de las operaciones relacionadas con la gestión de la tabla de rutas, es importante recalcar algo muy importante a tener en cuenta. En el caso en el que se decida trabajar desde la consola de GNU/Linux se debe habilitar el reenvío de paquetes, ya que por defecto no está activo (esta funcionalidad es exclusiva de los router y GNU/Linux no es un sistema operativo específico para router).
> sysctl -w net.ipv4.ip_forward=1
En Zebra, en cambio, no es necesario activarlo porque lo hace automáticamente y de forma transparente al usuario. No obstante, como se puede ver en la implementación de los scripts correspondientes al tratamiento de rutas, se activa para evitar posibles situaciones indeseadas.
Agregar ruta
Desde la consola de GNU/Linux, para insertar una nueva entrada en la tabla de rutas, podemos ejecutar uno de los siguientes mandatos:
> sudo route add -net <dir_IP> netmask <máscara> dev <interfaz> > sudo route add default gw <dir_sig_salto>
Para hacer esto mismo a través de Zebra, se debe hacer lo siguiente:
Router> enable Password: Router# configure terminal Router(config)# ip route <dir_IP>/<máscara> <dir_sig_salto|interfaz>
Borrar ruta
Si queremos borrar una entrada concreta de la tabla de rutas, desde la consola de GNU/Linux, debemos ejecutar el mandato de los dos siguientes que corresponda:
> sudo route del -net <dir_IP> netmask <máscara> dev <interfaz> > sudo route del default gw <dir_sig_salto>
Para hacer ésto mismo, pero a través de Zebra:
Router> enable Password: Router# configure terminal Router(config)# no ip route <dir_IP>/<máscara> <dir_sig_salto|interfaz>
Mostrar rutas
Para mostrar toda la información almacenada en la tabla de rutas, debemos hacer lo siguiente, suponiendo que estemos trabajando desde la consola de GNU/Linux:
> route
Con el siguiente mandato de Zebra podemos ver todas las rutas activas del router, tanto las estáticas como las dinámicas.
Router> show ip route
Aunque en este último caso, si sólo queremos ver las rutas dinámicas aprendidas por un protocolo como RIP, entonces es recomendable acceder al servicio correspondiente (Ripd) y hacer lo siguiente:
ripd> show ip rip
Pruebas
Para comprobar que el protocolo IP funciona correctamente en el router GNU/Linux, se han preparado dos pruebas de testeo de las funcionalidades básicas. La forma en que se van a describir las pruebas consiste en un diagrama de red, en el que se muestran todos los equipos que participan y la manera en que están interconectados entre sí, y la configuración de cada uno de esos equipos.
Prueba-1: Funcionalidad Básica
Pasamos a detallar equipo por equipo cuáles son los pasos que hay que seguir para configurar cada uno de ellos. En el caso del router GNU/Linux la configuración se hará a través de Zebra, ya que, junto con el resto de componentes que conforman Quagga, resulta ser la base Software sobre la que se va realizar todo el desarrollo del proyecto, así como las futuras ampliaciones.
En el caso de los terminales, la configuración se hará directamente desde la consola GNU/Linux.
EQUIPO_A
- Asignamos la dirección IP 192.168.1.1 a la interfaz
eth0
del equipo. - Creamos una ruta por defecto al router GNU/Linux.
- Mostramos la tabla de rutas para comprobar que se ha actualizado correctamente.
> sudo ifconfig eth0 192.168.1.1 netmask 255.255.255.0 > sudo route add default gw 192.168.1.2 > route ================================================================================== Tabla de rutas IP del núcleo Destino Pasarela Genmask Indic Métric Ref Uso Interfaz 192.168.1.0 * 255.255.255.0 U 0 0 0 eth0 link-local * 255.255.0.0 U 1000 0 0 eth0 default 192.168.1.2 0.0.0.0 UG 0 0 0 eth0 ==================================================================================
Router GNU/Linux
- Asignamos la dirección IP 192.168.1.2 a la interfaz
eth0
del router. - Asignamos la dirección IP 192.168.2.1 a la interfaz
eth1
del router. - Creamos una ruta a la red 192.168.1.0 a través de la interfaz
eth0
. - Creamos una ruta a la red 192.168.2.0 a través de la interfaz
eth1
. - Mostramos la tabla de rutas para comprobar que se ha actualizado correctamente.
Router> enable Password: Router# configure terminal Router(config)# interface eth0 Router(config-if)# ip address 192.168.1.2/24 Router(config-if)# quit Router(config)# interface eth1 Router(config-if)# ip address 192.168.2.1/24 Router(config-if)# quit Router(config)# ip route 192.168.1.0/24 eth0 Router(config)# ip route 192.168.2.0/24 eth1 Router(config)# quit Router# show ip route
EQUIPO_B
- Asignamos la dirección IP 192.168.2.2 a la interfaz
eth0
del equipo. - Creamos una ruta por defecto al router GNU/Linux.
- Mostramos la tabla de rutas para comprobar que se ha actualizado correctamente.
> sudo ifconfig eth0 192.168.2.2 netmask 255.255.255.0 > sudo route add default gw 192.168.2.1 > route ================================================================================== Tabla de rutas IP del núcleo Destino Pasarela Genmask Indic Métric Ref Uso Interfaz 192.168.2.0 * 255.255.255.0 U 0 0 0 eth0 link-local * 255.255.0.0 U 1000 0 0 eth0 default 192.168.2.1 0.0.0.0 UG 0 0 0 eth0 ==================================================================================
Por último, si hacemos un ping
desde un equipo a otro podemos observar que se lleva a cabo satisfactoriamente.
Prueba-2: Funcionalidad Básica
Pasamos a detallar equipo por equipo cuáles son los pasos que hay que seguir para configurar cada uno de ellos. En el caso del router GNU/Linux la configuración se hará a través de Zebra, ya que, junto con el resto de componentes que conforman Quagga, resulta ser la base Software sobre la que se va realizar todo el desarrollo del proyecto, así como las futuras ampliaciones.
En el caso de los terminales, la configuración se hará directamente desde la consola GNU/Linux.
EQUIPO_A
- Asignamos la dirección IP 192.168.1.1 a la interfaz
eth0
del equipo. - Creamos una ruta por defecto al router GNU/Linux.
- Mostramos la tabla de rutas para comprobar que se ha actualizado correctamente.
> sudo ifconfig eth0 192.168.1.1 netmask 255.255.255.0 > sudo route add default gw 192.168.1.2 > route ================================================================================== Tabla de rutas IP del núcleo Destino Pasarela Genmask Indic Métric Ref Uso Interfaz 192.168.1.0 * 255.255.255.0 U 0 0 0 eth0 link-local * 255.255.0.0 U 1000 0 0 eth0 default 192.168.1.2 0.0.0.0 UG 0 0 0 eth0 ==================================================================================
Router GNU/Linux
- Asignamos la dirección IP 192.168.1.2 a la interfaz
eth0
del router. - Asignamos la dirección IP 192.168.2.1 a la interfaz
eth1
del router. - Creamos una ruta a la red 192.168.1.0 a través de la interfaz
eth0
. - Creamos una ruta a la red 192.168.2.0 a través de la interfaz
eth1
. - Mostramos la tabla de rutas para comprobar que se ha actualizado correctamente.
Router> enable Password: Router# configure terminal Router(config)# interface eth0 Router(config-if)# ip address 192.168.1.2/24 Router(config-if)# quit Router(config)# interface eth1 Router(config-if)# ip address 192.168.2.1/24 Router(config-if)# quit Router(config)# ip route 192.168.1.0/24 eth0 Router(config)# ip route 192.168.2.0/24 eth1 Router(config)# quit Router# show ip route
Router CIT
- Asignamos la dirección IP 192.168.2.2 a la interfaz
eth0
del router. - Asignamos la dirección IP 192.168.3.1 a la interfaz
eth1
del router. - Creamos una ruta a la red 192.168.2.0 a través de la interfaz
eth0
. - Creamos una ruta a la red 192.168.3.0 a través de la interfaz
eth1
. - Mostramos la tabla de rutas para comprobar que se ha actualizado correctamente.
p 4 Config> protocol ip -- Internet protocol user configuration -- IP config> address ethernet0/0 192.168.2.2 255.255.255.0 IP config> address ethernet0/1 192.168.3.1 255.255.255.0 IP config> route 192.168.2.0 255.255.255.0 ethernet0/0 IP config> route 192.168.3.0 255.255.255.0 ethernet0/1 IP config> list routes
EQUIPO_B
- Asignamos la dirección IP 192.168.3.2 a la interfaz
eth0
del equipo. - Creamos una ruta por defecto al router GNU/Linux.
- Mostramos la tabla de rutas para comprobar que se ha actualizado correctamente.
> sudo ifconfig eth0 192.168.3.2 netmask 255.255.255.0 > sudo route add default gw 192.168.3.1 > route ================================================================================== Tabla de rutas IP del núcleo Destino Pasarela Genmask Indic Métric Ref Uso Interfaz 192.168.2.0 * 255.255.255.0 U 0 0 0 eth0 link-local * 255.255.0.0 U 1000 0 0 eth0 default 192.168.3.1 0.0.0.0 UG 0 0 0 eth0 ==================================================================================
Del mismo modo que en la prueba anterior, podemos comprobar que un ping
desde un equipo a otro se realiza correctamente.