hostapd+freeradius en Debian | Algo de Linux

miércoles, 8 de febrero de 2012

hostapd+freeradius en Debian


Para aquellos que no lo sepan, hostapd es un demonio que permite que un ordenador actúe como punto de acceso.

Como me habían dicho que no era posible hacer funcionar hostapd con freeradius, ahora que tenía a mano una tarjeta Dlink DWA-556 y quería montarla en un servidor de terminales para que actuara como punto de acceso, me he puesto a probarlo.

La conclusión, después de unas cuantas pruebas y configuraciones, es que la combinación de hostapd+freeradius funciona sin problemas. Es decir, que es posible montar un punto de acceso en un equipo y que la autenticación se haga mediante un servidor freeradius.

Personalmente prefiero utilizar un punto de acceso Dlink DAP-1353 en lugar de una tarjeta Dlink DWA-556 funcionando con hostapd, por varias razones, pero principalmente por dos:
  • La diferencia de precio no es muy grande.
  • El punto de acceso me aporta más funcionalidad, como por ejemplo, gestionar los canales de forma automática, algo interesante para evitar que las señales de puntos de acceso cercanos se solapen e interfieran.
Teniendo en cuenta que ya tenemos instalado freeradius, lo primero que habría que hacer sería instalar hostapd:

# aptitude install hostapd

Una vez instalado,  vamos a ver qué ficheros tenemos que modificar para usar hostapd con freeradius en el IES:

  • /etc/network/interfaces
  • /etc/default/dhcp3-server
  • /etc/freeradius/clients.conf
  • /etc/hostapd/hostapd.conf

1) Fichero  /etc/network/interfaces
Como vamos a convertir el servidor ltsp en punto de acceso, definimos los valores para la interfaz wlan0, como se muestra en la parte del fichero que marco en negrita:

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 wlan0 inet static
        address 192.168.0.254
        netmask 255.255.255.0
        broadcast 192.168.0.255


Hasta ahora, la interfaz eth0 tenía la dirección IP 192.168.0.254. Como ya no se va a usar como servidor de terminales, se la ponemos a la interfaz wlan0.

2) Fichero /etc/default/dhcp3-server
En este fichero, añadimos wlan0 a la definición INTERFACES="eth0" de tal forma que quedaría así:  INTERFACES="eth0 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"


De este modo, le decimos a DHCP que debe escuchar peticiones en eth0 y wlan0 (aunque eth0 no se va a usar en este caso).

3) Fichero /etc/freeradius/clients.conf
En este fichero, definimos los clientes que se van a poder comunicar con freeradius mediante la clave que especifiquemos en secret:

a22-pro:~# cat /etc/freeradius/clients.conf

client a22-pro {
 ipaddr = 192.168.0.254
 secret = clavecompartida
}


En el caso anterior, estamos diciendo a freeradius que tendrá un cliente con IP 192.168.0.254 y clave "clavecompartida". En el fichero hostapd, tendremos que especificar quién es el servidor freeradius y cuál es la clave compartida entre ambos.

4) Fichero /etc/hostapd/hostapd.conf
En este fichero definimos la configuración que va a tener nuestro punto de acceso. La configuración que muestro a continuación es la que he definido para que hostapd se comunique con un servidor freeradius con seguridad WPA-EAP:

a22-pro:~# cat /etc/hostapd/hostapd.conf

# Configuración ajustada para trabajar con freeradius externo
# EAP-TTLS+PAP
# Esteban M. Navas Martín
# IES Valle del Jerte - Plasencia

interface=wlan0
country_code=ES

driver=nl80211

logger_syslog=-1
logger_syslog_level=2
logger_stdout=-1
logger_stdout_level=2

dump_file=/tmp/hostapd.dump

ctrl_interface=/var/run/hostapd

ssid=IESVALLEDELJERTE3PRUEBAS

macaddr_acl=0

hw_mode=g

channel=11

wme_enabled=1
ieee80211n=1

auth_algs=3

ieee8021x=1
eapol_version=2
eap_message=hello-IES-AP
eapol_key_index_workaround=1

wpa=3
wpa_key_mgmt=WPA-EAP
wpa_pairwise=TKIP CCMP

wpa_group_rekey=600
wpa_gmk_rekey=86400

eap_server=0

own_ip_addr=192.168.0.254
nas_identifier=a22AP

auth_server_addr=192.168.0.254
auth_server_port=1812
auth_server_shared_secret=clavecompartida

acct_server_addr=192.168.0.254
acct_server_port=1813
acct_server_shared_secret=clavecompartida


Como puede verse, en auth_server_addr especificamos la ip del servidor freradius y en auth_server_shared la clave compartida con el servidor. En este caso, el servidor freeradius y hostapd se encuentran en la misma máquina.

Y eso es todo.

Para comprobar que funciona, reiniciamos los servicios afectados:

# /etc/init.d/networking restart
# /etc/init.d/dhcp3-server restart
# /etc/init.d/hostapd restart
# /etc/init.d/freeradius restart

1 comentario:

Anónimo dijo...

Como siempre una gran entrada en tu blog.
Mi mas sinceros agradecimientos por compartir tus conocimientos.
Un Saludo desde Valdelacalzada