------------------------------------------------------------------------
Autor : NaTaSaB (natasab @ merlos . org)
Web   : http://www..merlos.org
Fecha Publicación: Abril 2003
Último Cambio : Septiembre 2003
------------------------------------------------------------------------

Introducción

En este texto se explicarán los distintos pasos que se han dado para la configuración de una pequeña red casera que tiene servidor un ordenador en el que a veces se ejecuta Linux y otras Windows y varios ordenadores clientes que también pueden usar de forma alternativa Windows o Linux. Iremos comentando paso a paso, que hay que hacer en cada sistema. La idea es la de dar los mismos servicios de internet tanto si el servidor se encuentra corriendo Linux como si está ejecutando Windows sin tener que realizar modificaciones en los clientes.


Nota: Parte de como configurar Windows como servidor está por escribir

Este tutorial no pretende sentar cátedra ni tampoco tener en cuenta todos los casos y configuraciones posibles, sino que se intenta explicar l os pasos llevados a cabo para conseguir el objetivo en un sistema particular.

Para seguir el tutorial se requieren un mínimo de conocimientos de red, no se explicarán conceptos de red como que es IP, una máscara subred, que son los DNS, etc.

Sistemas Empleados

En este caso práctico se han empleado:

  • Servidor

    • Debian GNU/Linux (Woody) con Kernel 2.4.18
    • Windows 2000 Pro
    • 2 Tarjetas de red, una conectada al cablemodem (eth0) y la otra conectada a la red local (eth1)
  • Clientes

    • Debian GNU/Linux
    • Windows 98
    • Windows XP
    • Tarjeta de red conectada a la red local

Instalación/Configuración de las Tarjetas de Red

Windows

La instalación de tarjetas, en el caso de Windows es bastante sencillo, tan sólo hay que pinchar la tarjeta en el ordenador, y para tarjteas que sean relativamente nuevas, puesto que serán Plug&Play, se detectarán al arrancar el ordenador.

Si ya teníamos un interfaz de red instalado porque teníamos una red local y ahora tenemos que instalar la tarjeta de red del cablemodem, no tendremos ningún probema ya que nos aparecerá otro nuevo, sin embargo, si tenemos que instalar las 2 tarjetas de red simultáneamente, es mejor, pinchar una, configurarla parala red local y luego instalar la segunda, de esa forma nos evitamos el tener que averiguar que tarjeta se corresponde con cual (sobre todo si ambas son iguales)

A la hora de configurar internet, en mi caso la IP y los DNS me los proporciona mediante DHCP la empresa de cable contratada. Esta configuración es la que viene por defecto al instalar la tarjeta de red en Windows, por lo que no hay que tocar a nada en las propiedades de ésta tarjeta.

Lo primero que tenemos que hacer es ir Entorno de Red/Propiedades

Interfaces de Red Configuración tarjeta Modemcable

En cuanto a la configuración de la tarjeta de la red local, en mi caso uso la IP 192.168.0.1/255.255.255.0 para el servidor y 192.168.0.2, 192.168.0.3...para los clientes.

Linux

Lo primero que tenemos que hacer es, si acabamos de instalar las tarjetas de red, comprobar que el kernel ha cargado el módulo (driver) que las gestiona. Para ello podemos ver los mensajes que el kernel audita al arrancar, esto es, las últimas líneas del fichero

      /var/log/messages

Tendremos unas líneas parecidas a las que siguen:


Mar 30 12:26:46 natasab kernel: 8139too Fast Ethernet driver 0.9.24
Mar 30 12:26:46 natasab kernel: PCI: Assigned IRQ 12 for device 00:08.0
Mar 30 12:26:46 natasab kernel: eth0: RealTek RTL8139 Fast Ethernet at
0xc88e3000, ff:50:f0:f0:cf:ff, IRQ 12

Si no es así, tenemos que cargar el módulo para que nos reconozca la tarjeta de red. En debian tenemos un fantástico programa llamado modconf

Captura del modconf

Sólo tendremos que ir a la sección kernel/drivers/net y seleccionar el driver de nuestra tarjeta de red.

Si tienes otra distribución distinta de debian, puedes ejecutar los comandos modprobe -L |grep net para visualizar la lista de módulos, modprobe nombremódulo, para probar a cargar el módulo y lsmod para ver la lista de módulos cargados, también busca información sobre como cargar los módulos al arrancar en tu distribución, ya que modprobe sólo lo hace en la sesión actual.

Una vez que el núcleo ha detectado la tarjeta de red tendremos que configurarlas (asignarles IPs,máscara subred, etc..). En Debian para la configuración de la red tenemos un programa llamado etherconf que nos ayudará a configurar los interfaces de red del tipo ethernet. Durante la instalación ya se ejecuta y podremos configurar las tarjetass. Para instalarlo usaremos el apt-get,si no sabes usar apt-get puedes leer el APT-Cómo.


	   apt-get install etherconf

Nota: Para ejecutar más veces el etherconf hay que utilizar el siguiente comando:


         dpkg-reconfigure etherconf

Este programa lo que hará será detectar todas las tarjetas ethernet y nos irá haciendo una serie de preguntas sencillas. En el servidor tenemos 2 tarjetas, una será el interfaz eth0 y la otra el interfaz eth1. Es de vital importancia el saber que tarjeta se corresponde con cada interfaz. Si las tarjetas son distintas, esto es, hardware distinto, no habrá problemas, sólo tendremos que mirar en los mensajes de /var/log/messages que tarjeta se corresponde con cada interfaz de red ethX,pero si las tarjetas son iguales (mismo hardware) un problema con el que nos encontraremos es que si, por ejemplo, en el servidor tenemos 2 sistemas operativos tenemos que asignarle a cada tarjeta la misma función en ambos, es decir, que por ejemplo, la tarjeta 1 esté configurada para ser el interfaz de la red local y la tarjeta 2 que esté configurada para la conexión del modemcable. Para resolver este pequeño problema, simplemente configuramos ambas tarjetas para la red local y mediante ping comprobamos que nombre le da el sistema a cada una. En mi caso, eth0 se correspondía con la tarjeta conectada al modem y eht1 con la tarjeta de la LAN.

Al ejecutar el etherconf nos preguntará el hostname (nombre del PC), el dominio (podemos poner lo que queramos), si usamos dhcp y en caso de no usarlo la IP, máscara subred, el gateway.

Para el servidor y la tarjeta de red del cablemodem contestaremos que si a la pregunta de si usamos DHCP. Para la tarjeta de red asociada a la red local contestaremos que no usamos DHCP, asignaremos la IP/máscara (192.168.0.1/255.255.255.0) y dejaremos en blanco el gateway

Para comprobar que todo ha ido bien ejecutaremos el comando ifconfig y comprobaremos que los datos introducidos son correctos, es decir, que eth0 tiene una IP de nuestro proveedor de Internet y eth1 tiene la IP/máscara que queremos:

 ~$ /sbin/ifconfig      
eth0      Link encap:Ethernet  HWaddr FF:FF:21:FF:71:FD  
          inet addr:80.33.224.46  Bcast:255.255.255.255  Mask:255.255.252.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:2404242 errors:0 dropped:140 overruns:0 frame:39
          TX packets:1688624 errors:23 dropped:0 overruns:0 carrier:44
          collisions:13673 txqueuelen:100 
          RX bytes:1131690037 (1.0 GiB)  TX bytes:618310033 (589.6 MiB)
          Interrupt:10 Base address:0x6500 

eth1      Link encap:Ethernet  HWaddr FF:FF:21:FF:FF:D5  
          inet addr:192.168.0.1  Bcast:192.168.0.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:108495 errors:0 dropped:0 overruns:0 frame:0
          TX packets:120889 errors:0 dropped:0 overruns:0 carrier:0
          collisions:513 txqueuelen:100 
          RX bytes:13073360 (12.4 MiB)  TX bytes:99885590 (95.2 MiB)
          Interrupt:9 Base address:0x6600 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:114710 errors:0 dropped:0 overruns:0 frame:0
          TX packets:114710 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:9859981 (9.4 MiB)  TX bytes:9859981 (9.4 MiB)

También podemos ejecutar el comando route para ver que el encaminamiento se realiza de forma correcta:


 $ /sbin/route  
 Kernel IP routing table
 Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
 localnet        *               255.255.255.0   U     0      0        0 eth1
 80.33.224.0     *               255.255.252.0   U     0      0        0 eth0
 default         80.34.224.0     0.0.0.0         UG    0      0        0 eth0

A grosso modo, en esta tabla podemos ver que todos los paquetes que sean de la red local saldrán por el interfaz eth1,que todos los paquetes que vayan a la subred 80.33.224.0/255.255.255.0 salgan por eth0 y por último que el resto de los paquetes salgan por eth0 hacia la pasarela 80.34.224.0

Sólo falta comprobar la correcta configuración de los DNS, es decir, ver el contenido de /etc/resolv.conf y hacer algún ping

En los clientes, a la hora de configurar el interfaz de red con etherconf contestaremos que no usamos DHCP, y asignaremos IP/máscara (192.168.0.x/255.255.255), en cuanto al gateway pondremos la IP del servidor (192.168.0.1).

Una vez hecho estotendremos que indicarle cuales son los DNS de nuestro proveedor de internet. Para eso sólo tenemos que copiar el contenido del fichero del servidor /etc/resolv.conf a nuestro fichero local /etc/resolv.conf

También podemos comprobar que la tabla de encaminamiento está bien:


 # route
 Kernel IP routing table
 Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
 localnet        *               255.255.255.0   U     0      0        0 eth0
 default         principal       0.0.0.0         UG    0      0        0 eth0

Configuración de Netfilter (iptables && NAT)

Windows

Linux

De momento, si todo ha ido bien, sólo funcionará Internet en el PC que hace de servidor. Pero nosotros queremos que todos los ordenadores de la Intranet tengan acceso a la gran red, para ello Linux ya incorpora todo lo necesario en el núcleo en diversos módulos. En nuestro caso usamos un kernel 2.4.x, por lo que usaremos iptables

Tenemos dos taréas que realizar, por una parte, configurar NAT y por otra configurar el cortafuegos/firewall. Por lo general, los núcleos vienen precompilados para que los módulos que controlan esto. Aquí presentamos la configuración final del script que controla esto:



#!/bin/sh

##########  CONFIGURACION ############
#Local IP
L_IP="192.168.0.0"
# Local Network Mask
L_MASK="255.255.255.0"
# Local Network Interface
L_INT="eth1"
# Internet Network Interface 
I_INT="eth0"
# Squid Listening Port
SQUID_PORT="8080"
################################### 

########### CORTAFUEGOS ######################
echo "   -- Añadiendo Politicas + Cortafuegos Básico..."

# Establecemos las políticas por defecto.
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
# Para NAT 
iptables -P FORWARD ACCEPT 

# Creamos nueva cadena para añadir en esa cadena a los amigos
iptables -N KAISER

# Permitimos acceso desde localhost y sólo interfaz "lo" 
iptables -A INPUT -s 127.0.0.1/32 -i lo -j ACCEPT

# Permitimos acceso total a los ordenadores de la red local
iptables -A INPUT -s $L_IP/$L_MASK -i $L_INT -j ACCEPT

echo "  -- Añadiendo Reglas xMule del Servidor..."
# Regla para permitir compartir ficheros con  XMULE y HIGH ID.
iptables -A INPUT -i eth0 -p tcp --dport 4662 -j ACCEPT
iptables -A INPUT -i eth0 -p udp --dport 4672 -j ACCEPT
iptables -A INPUT -i eth0 -p udp --dport 4665 -j ACCEPT

# Las conexiones que estén establecidas = OK 
#(para cualquier interfaz)
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT


################## NAT ############################
echo "  -- Añadiendo Reglas de NAT..."
iptables -t nat -A POSTROUTING -o $I_INT -j MASQUERADE

echo "  -- Añadiendo Reglas de NAT... xmule"
#Con las siguientes reglas permitimos que un ordenador cliente pueda tener
#el xMule/eMule con HIGH ID usando como puertos el 5662 y 5672 
iptables -t nat -A PREROUTING -i $I_INT -p tcp --dport 5662 -j DNAT --to 192.168.0.122
iptables -t nat -A PREROUTING -i $I_INT -p udp --dport 5672 -j DNAT --to 192.168.0.122

############## Proxy Transparente con Squid (puerto 8080)######
# Ojo! Para que esto funcione ha de estar bien configurado el proxy 
# En esta página hay un tutorial sobre la configuración del SQUID.
# Se recomienda su visita en caso de que haya alguna duda
echo "  -- Añadiendo Regla Proxy Transparente..."
iptables -t nat -A PREROUTING -i $L_INT -s $L_IP/$L_MASK -p tcp --dport 80 -j REDIRECT --to-port $SQUID_PORT

#### Si queremos redireccionar algún servicio a otra máquina.
# en este caso estamos redirigiendo todo el tráfico que llegue al servidor
# al puerto 80 hacia el PC con IP local 192.168.0.122
iptables -t nat -A PREROUTING -i $I_INT -p tcp --dport 80 -j DNAT --to 192.168.0.122:80

# Ponemos en marcha el reenvío de IP (IP forwarding)
# OJO IMPORTANTEEEE!!! Si no está a 1 NO FUNCIONA!

echo 1 > /proc/sys/net/ipv4/ip_forward

Copiamos este script en un fichero, lo modificamos de tal forma que se adecúe a nuestro sistema y lo ejecutamos siendo root. Es importante entender qué hace cada regla. Para saber que hace cada opción lo mejor echar mano de la página manual del iptables o de las páginas a las que hago referencia al final del texto ya que puede que haya alguna regla que he incluido que no uses como puede ser la del proxy transparente o las del xMule

Según sean nuestros hábitos de conexión a internet, podemos ejecutar a mano este script cada vez que arranquemos el ordenaodor y nos conectemos a internet o cargarlo por defecto al arrancar el ordenador. Para hacer lo segundo sólo tendremos que ejecutar:


          # dpkg-reconfigure iptables

que lanzará un "amigable interfaz" y donde tendremos que indicar que se ejecuten las reglas de forma automática al arrancar el ordenador

¡Ojo! También hay que indicar que las reglas actuales son las que tiene que cargar cada vez que se arranque el ordenador, para ello hay que ejecutar el siguiente comando con el cual salvaremos las reglas que tenemos cargadas en el instante actual:


           # /etc/init.d/iptables save active
Por último, otra cosa que hay que indicar es que se active el ip_forward por defecto. Para ello hay que editar el fichero /etc/network/options

$ cat /etc/network/options 
    ip_forward=yes
    spoofprotect=yes
    syncookies=no

Y ya está! Con esto tendrás que olvidarte de configurar proxys, los clientes para que usen un proxy, etc...

Más Información

La documentación que se ha empleado como referencia es la siguiente: