Introducción a iSCSI

iSCSI server con tgt

En el servidor (donde tenemos un dispositivo de bloque, en este ejemplo va a ser /dev/vdb), instalamos el servidor:

apt install tgt

Configuración manual de targets

Creamos un nuevo target llamado target1:

tgtadm --lld iscsi --op new --mode target --tid 1 -T iqn.2021-11.org.example:target1

Si lo queremos borrar:

tgtadm --lld iscsi --op delete --mode target --tid 1

Añadimos una unidad lógica (LUN) al target (podemos añadir todas las que queramos):

tgtadm --lld iscsi --op new --mode logicalunit --tid 1 --lun 1 -b /dev/vdb

Para borrar la unidad lógica:

tgtadm --lld iscsi --op delete --mode logicalunit --tid 1 --lun 1

Para ver los targets definidos:

tgtadm --lld iscsi --op show --mode target

Habilitamos el poder compartir el target por todos los interfaces:

tgtadm --lld iscsi --op bind --mode target --tid 1 -I ALL

Creación automática de targets

La configuración anterior no es persistente. Para hacerla persistente podemos usar tgt-admin.

Para ver los targets definidos:

tgt-admin -s

Para guardar la configuración de los targets:

tgt-admin --dump > /etc/tgt/conf.d/example.es.conf

De tal manera que al reiniciar la máquina, la definición de targets este realizada.

Cliente iSCSI. iSCSI Initiator

En otra máquina cliente con conectividad con el servidor, instalamos:

apt install open-iscsi

Automaticamente se configura un nombre para el incializador, que se guardará en el fichero /etc/iscsi/initiatorname.iscsi:

## DO NOT EDIT OR REMOVE THIS FILE!
## If you remove this file, the iSCSI daemon will not start.
## If you change the InitiatorName, existing access control lists
## may reject this initiator.  The InitiatorName must be unique
## for each iSCSI initiator.  Do NOT duplicate iSCSI InitiatorNames.
InitiatorName=iqn.1993-08.org.debian:01:8c389c72931

Lo primero que hacemos es descubrir los targets que se están compartiendo por el servidor (suponemos que el servidor tiene la IP 10.0.0.1, aunque podemos también usar un nombre):

iscsiadm --mode discovery --type sendtargets --portal 10.0.0.1

Nos muestra el nombre del target y ya podemos hacer la conexión:

iscsiadm --mode node -T iqn.2021-11.org.example:target1 --portal 10.0.0.1 --login

Si queremos que la conexión se haga de forma automática después de un reinicio:

iscsiadm -m node -T iqn.2021-11.org.example:target1 -p 10.0.0.1 --op update -n node.startup -v automatic

A partir de ahora tendremos un nuevo dispositivo de bloque en la máquina cliente que podremos formatear y montar.

Si el target tiene definido un usuario y contraseña para la conexión, tendremos que definirla después de conectarnos:

iscsiadm --mode node -T iqn.2021-11.org.example:target1 --portal 10.0.0.1 -o update \
-n node.session.auth.username -v username
iscsiadm --mode node -T iqn.2021-11.org.example:target1 --portal 10.0.0.1 -o update \
-n node.session.auth.password -v password    

Es posible conectarse a todos los targets disponibles con:

iscsiadm --mode node --portal 10.0.0.1 -L

Para visualizar la sesión actual:

iscsiadm -m session

Si queremos desconectarnos de un target:

iscsiadm -m node -T iqn.2021-11.org.example:target1 -p 10.0.0.1 -u

Y si queremos desconectarnos de todos los targets:

iscsiadm -m node -p 10.0.0.1 --logout

open-iscsi proporciona un demonio que se encarga de las sesiones e iniciará sesión en los destinos targets después del próximo reinicio.

Para seguir investigando

  • Autentificación CHAP en iSCSI
  • iSCSI iterator en Windows