Configurar iSCSI en FreeBSD
iSCSI permite acceder a discos duros de forma remota (a través de la red). Esto permite crear un RAID con sus discos en diferentes ordenadores, por ejemplo.
Las siglas iSCSI significan Internet SCSI. Esto surge de las siglas SCSI, que significan Small Computers System Interface (Interfaz de sistema para ordenadores pequeños). Esta interfaz se trataba de una controladora en la placa base, un cable paralelo y una controladora en el disco duro. SCSI se utilizó bastante en ordenadores de gama alta y servidores, mientras que en ordenadores domésticos se utilizó Parallel ATA (comunmente llamado IDE).
Normalmente utilizo GNU/Linux, pero en este caso, FreeBSD parece mucho más preparado y con una configuración mucho más simple, al igual que sus variantes PC-BSD o TrueOS.
Terminología de iSCSI (Initiator, Target, LUN, IQN)
Básicamente, un Initiator (cliente) se conecta a un Target (dispositivo en el servidor) que puede tener varios LUN (discos duros).
- Initiator (iniciador) es el cliente, quien debe emular todo el protocolo SCSI para comunicarse a través de la red local (o de internet) con un target.
- Target (objetivo) es el dispositivo en el servidor, quien recibe las órdenes de SCSI del Initiator y las interpreta devolviendo los datos.
- LUN (Logical Unit Number) es el número del disco duro dentro del Target (un Target puede tener varios discos duros).
- IQN (iSCSI Qualified Name) es el nombre del disco duro asignado siguiendo la costumbre de indicar la localización y el dispositivo.
Un ejemplo de IQN (nombre descriptivo del disco duro) según la norma RFC 3721 es:
iqn.2001-04.com.example:diskarrays-sn-a8675309
- iqn significa que el nombre sigue la nomenclatura IQN
- 2001-04 son el año y el mes en el que se instaló el disco
- com.example es el nombre de la empresa (al revés sería example.com)
- diskarrays-sn-a8675309 es el nombre del disco duro
Configurar el servidor (iSCSI target) en FreeBSD
Para configurar el servidor hay que modificar el archivo /etc/ctl.conf (o crearlo si no existe). En mi caso he usado el editor de textos ee.
La configuración se divide en dos bloques básicos, uno indicando el Portal, que define a qué direcciones escuchará el servidor y otro indicando los targets con sus LUN y sus discos asignados.
En este ejemplo voy a compartir la partición /dev/ada1, para que el portal escuche en todas las direcciones IPv4 e IPv6:
portal-group pg0 {
discovery-auth-group no-authentication
listen 0.0.0.0
listen [::]
}
target iqn.2016-01.es.wasge:disco1 {
auth-group no-authentication
portal-group pg0
lun 0 {
path /dev/ada1
}
}
Como se puede observar, el nombre que he inventado es iqn.2016-01.es.wasge:disco1. Esta configuración, a persar de ser muy básica, debería ser suficiente (no tiene seguridad, todos pueden acceder a las unidades).
Habilitar ctld en FreeBSD
El módulo ctld (CAM Target Layer daemon / demonio iSCSI) es quien realmente hace todo el trabajo, por lo que hay que habilitarlo para que se inicie al arrancar el sistema operativo.
Para ello hay que editar el archivo /etc/rc.conf y añadir ésta línea:
ctld_enable="YES"
A partir de ahora, si no hay ningún problema, al reiniciar el sistema ya debería funcionar el target y exportarse automáticamente a quien lo quiera usar.
Para reiniciar el servicio sin reiniciar el servidor se puede usar el comando:
service ctld restart
Probar el resultado con YaST2 en openSUSE
En openSUSE, para probar el servidor se puede utilizar YaST y el inicador de iSCSI como se puede comprobar en estas capturas de pantalla. El servidor de el ejemplo tiene la dirección IP 192.168.2.200 y como se puede observar en la segunda captura de pantalla, el cliente (Initiator) ha encontrado el IQN que configuré en el servidor.
Iniciadador de iSCSI preguntando la dirección IP. Lista de targets ofrecida por el servidor FreeBSD.
Tengo otro artículo en el que explico cómo configurar un iniciador iSCSI en GNU/Linux para conectarse a éste target.