Configuración de red: Servidor LTSP en eth0 y AP con hostapd en wlan0 | Algo de Linux

miércoles, 8 de febrero de 2012

Configuración de red: Servidor LTSP en eth0 y AP con hostapd en wlan0

En el artículo anterior (http://enavas.blogspot.com/2012/02/hostapdfreeradius-en-debian.html) hablaba de sustituir la interfaz eth0 por wlan0 para dar servicio de acceso wifi. Esto está bien para un aula en el que se van a sustituir los terminales por portátiles. Pero, ¿y si lo que quiero es que el aula siga dando servicio a los terminales (en la interfaz eth0) pero también quiero que de servicio de acceso wifi al mismo tiempo (en la interfaz wlan0)?  Para conseguirlo, habría que hacer lo siguiente:

1) Fichero /etc/network/interfaces
Me aseguro de que ya tengo definido el interfaz wlan0 en el fichero /etc/network/interfaces:
a22-pro:~# cat /etc/network/interfaces

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo eth0 eth3 wlan0
iface lo inet loopback

iface eth3 inet dhcp
        ifup eth3
        post-up /usr/sbin/ethtool -s $IFACE wol g
        post-down /usr/sbin/ethtool -s $IFACE wol g


iface eth0 inet static
        address 192.168.0.254
        netmask 255.255.255.0
        network 192.168.0.0
        broadcast 192.168.0.255


iface wlan0 inet static
        address 192.168.1.254
        netmask 255.255.255.0
        network 192.168.1.0
        broadcast 192.168.1.255
 

2) Fichero /etc/default/dhcp3-server
Me aseguro de que dhcp3-server escucha en las dos interfaces: eth0 y wlan0:

a22-pro:~# cat /etc/default/dhcp3-server
# Defaults for dhcp initscript
# sourced by /etc/init.d/dhcp
# installed at /etc/default/dhcp3-server by the maintainer scripts

#
# This is a POSIX shell fragment
#

# On what interfaces should the DHCP server (dhcpd) serve DHCP requests?
#    Separate multiple interfaces with spaces, e.g. "eth0 eth1".
INTERFACES="eth0 wlan0"


3) Fichero /etc/dhcp3/dhcpd.conf


Modifico el fichero de configuración del servidor dhcp y le añado al final las líneas que he resaltado en negrita:

a22-pro:~# cat /etc/dhcp3/dhcpd.conf

ldap-server "ldap";
ldap-port 389;
ldap-base-dn  "dc=instituto,dc=extremadura,dc=es";
ldap-dhcp-server-cn "ldap";
ldap-debug-file "/var/log/dhcp-ldap-startup.log";
ldap-method dynamic;
ddns-update-style none;

subnet 192.168.1.0 netmask 255.255.255.0 {
   range 192.168.1.10 192.168.1.253;
   option routers 192.168.1.254;
   option broadcast-address 192.168.1.255;
   option domain-name-servers 172.19.144.3;
   option domain-name "valledeljerte3";
}


Con las líneas resaltadas en negrita defino la configuración de red que se va a asignar a las máquinas que se conecten vía wifi al servidor que estamos configurando como punto de acceso. Estas máquinas estarán en la red 192.168.1.X.

En cuanto a los terminales, se les seguirá asignando direcciones del rango 192.168.0.X, tal y como está definido en el servidor de ldap.

4) Tomamos como modelo el fichero /etc/init.d/enable-nat
Como en los servidores de terminales ya tenemos un fichero que activa nat para los clientes detrás de la interfaz eth0, lo copiamos y modificamos para hacer nat para los clientes que se conecten a través de wlan0:

a22-pro:~# cp /etc/init.d/enable-nat /etc/init.d/enable-nat-wifi


5) Fichero /etc/init.d/enable-nat-wifi
Modificamos el fichero enable-nat-wifi con los valores que se muestran en negrita. Este fichero activará el enmascaramiento de los paquetes que vengan de la red 192.168.1.X y vayan dirigidos a la interfaz eth3.

a22-pro:~# cat /etc/init.d/enable-nat-wifi

#! /bin/sh
### BEGIN INIT INFO
# Provides:          enable-nat-wifi
# Required-Start:    $remote_fs
# Should-Start:      $network
# Required-Stop:     $remote_fs
# Should-Stop:       $network
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Enabling NAT for clients behind wlan0
# Description:       Enabling Network Address Translation for clients
#                    sitting in the thin client network behind wlan0

### END INIT INFO

IPTABLES=/sbin/iptables

NETWORK_TO_NAT=
OUTSIDE_IF=eth3

# Only enable by default if LTSP or lessdisks is installed
if [ -e /opt/ltsp -o -d /var/lib/lessdisks ] ; then
    NETWORK_TO_NAT="192.168.1.0/24"
fi

if [ -f /etc/default/enable-nat-wifi ] ; then
    . /etc/default/enable-nat-wifi
fi


# Bail out if no iptables binary or no configuration
[ -x ${IPTABLES} -a "$NETWORK_TO_NAT" ] || exit 0

do_status() {
    $IPTABLES -L -t nat |grep -A3 POSTROUTING
}

is_enabled() {
    if do_status | grep -q "$NETWORK_TO_NAT" ; then
    true
    else
    false
    fi
}

do_start() {
    if is_enabled ; then
    echo "NAT for clients on network $NETWORK_TO_NAT already enabled."
    else
    echo "Enabling NAT for clients on network $NETWORK_TO_NAT."
    $IPTABLES -t nat -A POSTROUTING -s $NETWORK_TO_NAT -o $OUTSIDE_IF -j MASQUERADE
    fi

    # Enable IP-forwarding if it isn't enabled already.
    if [ 0 = "`cat /proc/sys/net/ipv4/ip_forward`" ]; then
    echo "Enabling IPv4 forwarding."
    echo 1 > /proc/sys/net/ipv4/ip_forward
    fi

    do_status
}

do_stop() {
    if is_enabled ; then
    echo "Disabling NAT for clients on network $NETWORK_TO_NAT."
    $IPTABLES -F -t nat
    else
    echo "NAT for clients on network $NETWORK_TO_NAT already disabled."
    fi
    do_status
}

case "$1" in
    start)
        do_start
        ;;
    stop)
        do_stop
        ;;
    restart|force-reload)
        do_stop
        do_start
        ;;
    status)
        do_status
        ;;
    *)
        echo "Usage: $0 {start|stop|restart|force-reload|status}"
        exit 2
        ;;
esac
exit 0
 
6) Activar servicio enable-nat-wifi
Por último, pero no menos importante, activamos el servicio que acabamos de crear mediante insserv.

# insserv /etc/init.d/enable-nat-wifi 

insserv leerá las cabeceras del archivo enable-nat-wifi y creará los enlaces necesarios para iniciar y parar el servicio en los niveles definidos en dichas cabeceras.

Naturalmente, reiniciaremos los servicios oportunos y habremos terminado.

2 comentarios:

Carlos Fernández dijo...

y en esta configuración, llegaste a probar si AulaLinex o ControlAula detectaban los equipos conectados por la wifi?

Esteban M. Navas dijo...

Hola, Carlos:

Preparé esta configuración para dar servicio inalámbrico a profesores aprovechando los servidores LTSP en aulas de terminales, para lo que no necesitaba usar Aulalinex ni Controlaula.