Internetworking

Vicente González Ruiz

December 26, 2013

Contents

1 Introducci’on
2 Requerimientos del router/NAT (R)
3 Configuraci’on del router/NAT (R)
4 Configuraci’on del/los host/s (H)

1 Introducci’on


PIC


Figure 1: Dos redes conectadas mediante un router NAT.


En esta pr’actica vamos a configurar un host con Linux para que permita la conexi’on de dos redes diferentes, es decir, vamos a “crear” un router sencillo que sea capaz de encaminar tr’afico entre dos redes.

Probablemente, el caso m’as frecuente que como administradores de una red nos podemos encontrar consiste en la interconexi’on de una red privada a una red p’ublica o privada ya conectada a Internet. En la Figura 1 se muestra la arquitectura de la red que deseamos construir. Esta configuraci’on, aunque es simple en extremo, puede sernos muy ’util en situaciones donde, por ejemplo, tengamos un host R ya conectado a Internet y queramos conectar otro host H a Internet, a trav’es de R. En este contexto, al host R se le llama tpicamente NAT-box (o simplemente, NAT).

2 Requerimientos del router/NAT (R)

El host R que hace de router/NAT debe tener una caracter’istica especial: poseer al menos dos adaptadores de red para poder conectar las dos redes (en la Figura 1, las redes 192.168.0.0/16 y 10.0.0.0/8). Los adaptadores de red no tienen que ser del mismo tipo. En este sentido, un portatil podr’ia servir perfectamente si el puerto Ethernet se conecta, por ejemplo, a Internet (192.168.0.0/16) y el puerto WiFi se utiliza para crear la nueva subred (10.0.0.0/8) y conectar a trav’es de ella cualquier otro host H (tambi’en con Wifi) al portatil R (v’ease el Ap’endice ??).

Finalmente, ¡n’otese que la red 10.0.0.0/8 posee 224 direcciones IP! Esto significa que, en la inmensa mayora de las situaciones no vamos a nacesitar utilizar una red tan grande, y evidntemente, podemos usar una mscara de red diferent, /24 por ejemplo, para trabajar con un rango de direcciones mucho ms tratable.

3 Configuraci’on del router/NAT (R)

Para configurar el router/NAT tenemos que hacer b’asicamente tres cosas:

  1. Habilitar el “forwarding” en el kernel.
  2. Definir las reglas de filtrado (en principio ninguna ya que no estamos diseñando un cortafuegos (v’ease el Ap’endice ?? para m’as informaci’on)).
  3. Configurar el adaptador de red WiFi del router/NAT (definir el ESSID, el canal y el gateway de la nueva subred).

Con la idea de facilitar tanto como sea posible dicha configuraci’on, se ha diseñado un script que acepta dos par’ametros: start y stop, para activar y desactivar las habilidades de routing/NATing en el host R, respectivamente. Dicho script (que deber’ia modificarse si alguno de los interfaces de red de R se llaman de otra forma) puede encontrarse en http://www.ace.ual.es/\~vruiz/redes/practicas/nat.sh y su contenido es:

 
1#!/bin/bash 
2 
3set -x 
4 
5# Nombre del interface de red que conecta al router/NAT con Internet. 
6#export WAN_IFACE=eth1 
7export WAN_IFACE=wlan1 
8 
9# Nombre del interface de red que conecta al router/NAT con la nueva 
10# subred. Si el interface de red no esta habilitado, podemos 
11# encontrar su nombre escribiendo "ifconfig -a". 
12#export LAN_IFACE=wlan1 
13export LAN_IFACE=eth1 
14 
15# Definicion de la nueva subred (direccion de la subred/tama~no). 
16export LAN_PREFIX=10.0.0.0/24 
17 
18# Dir IP del GateWay de la nueva subred. Por norma, el GW suele ser la 
19# primera direccion IP del rango de direcciones ultiles de la 
20# subred. Esta direccion IP deberia ser la asignada al adaptador de 
21# red que conecta la LAN con la WAN (el resto de Internet). 
22export LAN_GW=10.0.0.1 
23 
24# Como la subred la vamos a crear usando un enlace WiFi es necesario 
25# definir el ESSID de la LAN. 
26export ESSID=ad-hoc 
27 
28# Canal de frecuencias usada en la LAN. 
29export CHANNEL=11 
30 
31# Rutina para "start". 
32do_start () { 
33 
34  # Creamos la subred usando el modo ad-hoc, canal $CHANNEL y configuramos el 
35  # IP del GW. 
36  #ifconfig ${LAN_IFACE} down 
37#  ifconfig ${LAN_IFACE} up 
38#  iwconfig ${LAN_IFACE} mode ad-hoc essid ${ESSID} channel ${CHANNEL} 
39#  ifconfig ${LAN_IFACE} ${LAN_GW} 
40  #ifconfig ${LAN_IFACE} up 
41 
42  # Borrarmos todas las politicas de filtrado anteriores que pudieran 
43  # existir. 
44  iptables -F 
45  iptables -t nat -F 
46 
47  # El router/NAT aceptara todos los paquetes que lleguen, enviara 
48  # todos los paquetes que genere y reencaminara todos los paquetes 
49  # que son recibidos y no van dirigidos al router/NAT. 
50  iptables -P INPUT ACCEPT 
51  iptables -P OUTPUT ACCEPT 
52  iptables -P FORWARD ACCEPT 
53 
54  # Habilitamos el NATing ya que estamos definiendo una red privada. 
55  iptables -t nat -A POSTROUTING -s ${LAN_PREFIX} -o ${WAN_IFACE} -j MASQUERADE 
56  #iptables -A FORWARD -i ${WAN_IFACE} -o ${LAN_IFACE} -m state --state RELATED,ESTABLISHED -j ACCEPT 
57  #iptables -A FORWARD -i ${LAN_IFACE} -o ${WAN_IFACE} -j ACCEPT 
58 
59  # Finalmente, habilitamos el forwarding en el kernel. 
60  echo 1 > /proc/sys/net/ipv4/ip_forward 
61  for f in /proc/sys/net/ipv4/conf/*/rp_filter ; do echo 1 > $f ; done 
62 
63  # Un mensajito tranquilizante ... 
64  echo "NATcorriendo..." 
65} 
66 
67# Rutina para "stop". 
68do_stop () { 
69  iptables -F 
70  iptables -t nat -F 
71 
72  ifconfig ${LAN_IFACE} down 
73 
74  echo 0 > /proc/sys/net/ipv4/ip_forward 
75  for f in /proc/sys/net/ipv4/conf/*/rp_filter ; do echo 0 > $f ; done 
76 
77  echo "NATdetenido..." 
78} 
79 
80# Tratamiento de los parametros de la linea de comandos. 
81case "$1" in 
82        start) 
83                do_start 
84                ;; 
85        stop) 
86                do_stop 
87                ;; 
88        *) 
89                echo "Usage:$0start|stop" >&2 
90                exit 3 
91                ;; 
92esac

Un aspecto importante de cara a realizar esta pr’actica es que no pueden existir dos redes vecinas con el mismo nombre. Si esto ocurriera, habr’ia que modificar el script y cambiar el nombre de la red WiFi (LAN) por cualquier otro nombre diferente. Tras esto, deber’ian estar visibles todas las redes. Tras esta breve aclaraci’on, desc’argese este script, modif’iquelo a su gusto, aseg’usrese de que la utilidad network-manager no est’a controlando su enlace WiFi, y, finalmente, ejec’utelo como administrador mediante el comando:

root# ./nat.sh start

4 Configuraci’on del/los host/s (H)

Simplemente hay que configurar el enlace WiFi usando el mismo ESSID y canal que los usados por el router/NAT y a continuaci’on asignar una direcci’on IP del rango 10.0.0.0/8 que no est’e siendo usada por ning’un otro adaptador de red.

A continuaci’on se muestran los comandos que hay que ejecutar para un host H que reciba la IP 10.0.0.2 en eth2. Puesto que la configuraci’on de los hosts se est’a realizando a mano, ¡hay que tener cuidado de que no exista m’as de un host con la misma direcci’on IP!

# Deshabilitar el gestor de red "network-manager" o similar.  
# Esto se puede hacer desde el entorno gr’afico o desde la  
# consola con  
root# service network-manager stop  
 
# El paso anterior deber’ia dejar completamente desconfigurado el IP  
# para todos los adaptadores de red.  
 
# Configuramos el adaptador de red WiFi "eth2" con "10.0.0.2"  
root# ifconfig eth2 down  
root# iwconfig eth2 mode ad-hoc essid LAN channel 11  
root# ifconfig eth2 10.0.0.2  
root# ifconfig eth2 up  
 
# Comprobamos que la conexi’on se ha establecido con ’exito  
root# ping 10.0.0.1  
 
# A~nadimos el servidor de nombres a /etc/resolv.conf  
root# echo "nameserver 150.214.156.2" >> /etc/resolv.conf  
 
# Comprobamos que en la "edici’on" todo ha ido bien ...  
root# cat /etc/resolv.conf  
 
# Creamos la ruta por defecto en la tabla de rutas del kernel  
root# route add default gw 10.0.0.1  
 
# Comprobamos que la ruta se a a~nadido ...  
root# route  
 
# Y ya deber’iamos "tener" Internet!  
usuario$ ping www.google.es