--- title: "Cómo configurar un target e iniciador iSCSI en Ubuntu 24.04" description: "Crea un target iSCSI con targetcli en Ubuntu 24.04, protégelo con ACL y CHAP y conecta un iniciador open-iscsi que monte el disco remoto en cada arranque." category: "Almacenamiento y Copia de Seguridad Avanzada" language: es source: https://cubepath.com/es/docs/almacenamiento-y-copia-de-seguridad-avanzada/configuracion-del-destino-e-iniciador-iscsi updated: 2026-09-25 --- # Cómo configurar un target e iniciador iSCSI en Ubuntu 24.04 iSCSI transporta comandos SCSI sobre TCP/IP, de modo que un servidor puede usar un disco de otro servidor como si fuera un disco local. El servidor que ofrece el almacenamiento es el *target* y el que lo usa es el *iniciador*. En este tutorial configurarás un target con `targetcli` en Ubuntu 24.04, restringirás el acceso con ACL y autenticación CHAP, y conectarás un iniciador con `open-iscsi` que formatea, monta y reconecta el disco en cada arranque. ## Requisitos previos - Dos servidores con Ubuntu 24.04 LTS en la misma red privada, por ejemplo VPS de CubePath: - **Target**: `10.0.0.40`. Necesita un disco adicional vacío (en los ejemplos, `/dev/vdb`) o espacio libre para un archivo de imagen. - **Iniciador**: `10.0.0.41`. - Un usuario no root con privilegios `sudo` en ambos. Conceptos que usarás: | Término | Significado | |---|---| | IQN | Nombre único de un target o iniciador, con formato `iqn.AAAA-MM.dominio.invertido:identificador` | | Backstore | Almacenamiento real que se exporta: un disco, una partición o un archivo | | LUN | Unidad lógica que el iniciador ve como un disco | | TPG | Grupo de portales del target: agrupa las IP de escucha, los LUN y las ACL | | ACL | Lista de iniciadores (por IQN) autorizados a conectarse | En esta guía se usan los IQN `iqn.2026-09.com.example:storage.disk1` para el target e `iqn.2026-09.com.example:client1` para el iniciador. Sustituye `com.example` por tu dominio invertido. > Advertencia: iSCSI no cifra el tráfico. Úsalo solo en una red privada o dentro de una VPN, nunca expuesto a Internet. ## Paso 1: Instalar targetcli en el target En el servidor target, instala `targetcli-fb`, la herramienta que configura el target iSCSI del kernel de Linux (LIO): ```bash sudo apt update sudo apt install targetcli-fb ``` Comprueba que funciona mostrando el árbol de configuración, que al principio está vacío: ```bash sudo targetcli ls ``` ```output o- / ......................................................................... [...] o- backstores .............................................................. [...] | o- block .................................................. [Storage Objects: 0] | o- fileio ................................................. [Storage Objects: 0] | o- pscsi .................................................. [Storage Objects: 0] | o- ramdisk ................................................ [Storage Objects: 0] o- iscsi ............................................................ [Targets: 0] o- loopback ......................................................... [Targets: 0] o- vhost ............................................................ [Targets: 0] ``` `targetcli` puede usarse de forma interactiva o, como en esta guía, pasando la ruta y el comando como argumentos. ## Paso 2: Crear el backstore El backstore es el almacenamiento que verá el iniciador. Si tienes un disco dedicado, exporta el dispositivo de bloques completo, que es la opción más rápida: ```bash sudo targetcli /backstores/block create name=disk1 dev=/dev/vdb ``` ```output Created block storage object disk1 using /dev/vdb. ``` Si no tienes un disco libre, crea en su lugar un backstore basado en un archivo de 20 GB: ```bash sudo mkdir -p /srv/iscsi sudo targetcli /backstores/fileio create name=disk1 file_or_dev=/srv/iscsi/disk1.img size=20G ``` Usa solo una de las dos opciones; el resto de la guía funciona igual con ambas, cambiando `block` por `fileio` en las rutas. ## Paso 3: Crear el target y el LUN Crea el target iSCSI. `targetcli-fb` crea automáticamente el grupo `tpg1` y un portal que escucha en todas las IP en el puerto 3260: ```bash sudo targetcli /iscsi create iqn.2026-09.com.example:storage.disk1 ``` ```output Created target iqn.2026-09.com.example:storage.disk1. Created TPG 1. Global pref auto_add_default_portal=true Created default portal listening on all IPs (0.0.0.0), port 3260. ``` Para escuchar solo en la IP privada, sustituye el portal por defecto: ```bash sudo targetcli /iscsi/iqn.2026-09.com.example:storage.disk1/tpg1/portals delete 0.0.0.0 3260 sudo targetcli /iscsi/iqn.2026-09.com.example:storage.disk1/tpg1/portals create 10.0.0.40 3260 ``` Asocia el backstore al target como LUN 0: ```bash sudo targetcli /iscsi/iqn.2026-09.com.example:storage.disk1/tpg1/luns create /backstores/block/disk1 ``` ```output Created LUN 0. ``` ## Paso 4: Autorizar al iniciador con ACL y CHAP Por defecto, el target solo acepta iniciadores incluidos en su ACL. Crea una entrada para el IQN del iniciador. Los LUN existentes se asignan automáticamente a la nueva ACL: ```bash sudo targetcli /iscsi/iqn.2026-09.com.example:storage.disk1/tpg1/acls create iqn.2026-09.com.example:client1 ``` ```output Created Node ACL for iqn.2026-09.com.example:client1 Created mapped LUN 0. ``` Añade autenticación CHAP a esa ACL, de modo que además del IQN el iniciador tenga que presentar un usuario y una contraseña. Usa una contraseña de 12 a 16 caracteres, la longitud que admiten la mayoría de iniciadores; sustituye `your_chap_secret` por una propia: ```bash sudo targetcli /iscsi/iqn.2026-09.com.example:storage.disk1/tpg1/acls/iqn.2026-09.com.example:client1 set auth userid=client1 password=your_chap_secret sudo targetcli /iscsi/iqn.2026-09.com.example:storage.disk1/tpg1 set attribute authentication=1 ``` Guarda la configuración para que se restaure al reiniciar: ```bash sudo targetcli saveconfig ``` ```output Configuration saved to /etc/rtslib-fb-target/saveconfig.json ``` Revisa el árbol completo del target: ```bash sudo targetcli ls /iscsi ``` ```output o- iscsi .............................................................. [Targets: 1] o- iqn.2026-09.com.example:storage.disk1 ............................... [TPGs: 1] o- tpg1 ........................................... [no-gen-acls, auth per-acl] o- acls ............................................................ [ACLs: 1] | o- iqn.2026-09.com.example:client1 ..................... [1-way auth, Mapped LUNs: 1] | o- mapped_lun0 ................................... [lun0 block/disk1 (rw)] o- luns ............................................................ [LUNs: 1] | o- lun0 ....................................... [block/disk1 (/dev/vdb) (default_tg_pt_gp)] o- portals ...................................................... [Portals: 1] o- 10.0.0.40:3260 ....................................................... [OK] ``` Si UFW está activo, permite el puerto 3260 solo desde el iniciador: ```bash sudo ufw allow from 10.0.0.41 to any port 3260 proto tcp ``` ## Paso 5: Configurar el iniciador En el servidor iniciador, instala `open-iscsi` (ya viene instalado en las imágenes de Ubuntu Server, en cuyo caso apt no hará nada): ```bash sudo apt update sudo apt install open-iscsi ``` El iniciador se identifica con el IQN guardado en `/etc/iscsi/initiatorname.iscsi`. Edítalo para que coincida con el de la ACL: ```bash sudo nano /etc/iscsi/initiatorname.iscsi ``` ```ini InitiatorName=iqn.2026-09.com.example:client1 ``` Reinicia el servicio para aplicar el nuevo nombre: ```bash sudo systemctl restart iscsid ``` Descubre los targets que ofrece el servidor: ```bash sudo iscsiadm -m discovery -t sendtargets -p 10.0.0.40 ``` ```output 10.0.0.40:3260,1 iqn.2026-09.com.example:storage.disk1 ``` El descubrimiento crea un registro del nodo en `/etc/iscsi/nodes/`. Añade a ese registro las credenciales CHAP: ```bash sudo iscsiadm -m node -T iqn.2026-09.com.example:storage.disk1 -p 10.0.0.40 --op update -n node.session.auth.authmethod -v CHAP sudo iscsiadm -m node -T iqn.2026-09.com.example:storage.disk1 -p 10.0.0.40 --op update -n node.session.auth.username -v client1 sudo iscsiadm -m node -T iqn.2026-09.com.example:storage.disk1 -p 10.0.0.40 --op update -n node.session.auth.password -v your_chap_secret ``` ## Paso 6: Iniciar sesión y usar el disco Inicia sesión en el target: ```bash sudo iscsiadm -m node -T iqn.2026-09.com.example:storage.disk1 -p 10.0.0.40 --login ``` ```output Logging in to [iface: default, target: iqn.2026-09.com.example:storage.disk1, portal: 10.0.0.40,3260] Login to [iface: default, target: iqn.2026-09.com.example:storage.disk1, portal: 10.0.0.40,3260] successful. ``` Comprueba la sesión y localiza el nuevo disco. La ruta en `/dev/disk/by-path/` incluye la IP y el IQN, y no cambia entre arranques: ```bash sudo iscsiadm -m session ls -l /dev/disk/by-path/ | grep iscsi ``` ```output tcp: [1] 10.0.0.40:3260,1 iqn.2026-09.com.example:storage.disk1 (non-flash) lrwxrwxrwx 1 root root 9 Sep 25 11:02 ip-10.0.0.40:3260-iscsi-iqn.2026-09.com.example:storage.disk1-lun-0 -> ../../sda ``` En este ejemplo, el disco iSCSI es `/dev/sda`. Compruébalo con `lsblk` antes de formatear, porque el nombre depende de los discos que ya tenga el servidor: ```bash lsblk /dev/sda ``` ```output NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS sda 8:0 0 100G 0 disk ``` Formatéalo y móntalo: ```bash sudo mkfs.ext4 /dev/sda sudo mkdir -p /mnt/iscsi sudo mount /dev/sda /mnt/iscsi df -h /mnt/iscsi ``` ```output Filesystem Size Used Avail Use% Mounted on /dev/sda 98G 24K 93G 1% /mnt/iscsi ``` > Importante: un disco iSCSI con ext4 o XFS solo puede montarse en un iniciador a la vez. Si dos servidores lo montan simultáneamente, el sistema de archivos se corromperá. Para acceso compartido se necesita un sistema de archivos de cluster como OCFS2 o GFS2. ## Paso 7: Reconectar y montar en el arranque Configura el nodo para que `open-iscsi` inicie sesión automáticamente al arrancar: ```bash sudo iscsiadm -m node -T iqn.2026-09.com.example:storage.disk1 -p 10.0.0.40 --op update -n node.startup -v automatic sudo systemctl enable iscsid open-iscsi ``` Obtén el UUID del sistema de archivos, que no depende de si el disco aparece como `sda` o `sdb`: ```bash sudo blkid /dev/sda ``` ```output /dev/sda: UUID="9a1f7c3e-2b4d-4f6a-8e0c-1d2b3c4d5e6f" BLOCK_SIZE="4096" TYPE="ext4" ``` Edita `/etc/fstab`: ```bash sudo nano /etc/fstab ``` Añade esta línea con tu UUID. `_netdev` indica que el disco depende de la red y `nofail` evita que el arranque se detenga si el target no está disponible: ```text UUID=9a1f7c3e-2b4d-4f6a-8e0c-1d2b3c4d5e6f /mnt/iscsi ext4 _netdev,nofail 0 0 ``` Comprueba la entrada y reinicia para confirmar que todo se restablece solo: ```bash sudo umount /mnt/iscsi sudo mount -a sudo reboot ``` Tras el reinicio, `sudo iscsiadm -m session` debe mostrar la sesión y `df -h /mnt/iscsi` el disco montado. ## Solución de problemas - **`iscsiadm: Could not login ... authorization failure (err 24)`**: el IQN de `/etc/iscsi/initiatorname.iscsi` no coincide con la ACL, o el usuario o la contraseña CHAP son incorrectos. Revisa ambos lados y reinicia `iscsid` si cambiaste el IQN. - **`iscsiadm: cannot make connection to 10.0.0.40: Connection refused` en el descubrimiento**: el portal no escucha en esa IP o UFW bloquea el puerto 3260. Comprueba `sudo ss -tlnp | grep 3260` y las reglas del firewall en el target. - **La configuración del target desaparece al reiniciar**: faltó `sudo targetcli saveconfig`. Comprueba que existe `/etc/rtslib-fb-target/saveconfig.json` y que `rtslib-fb-targetctl.service` está habilitado. - **Para desconectar el disco** de forma limpia, desmóntalo y cierra la sesión con `sudo iscsiadm -m node -T iqn.2026-09.com.example:storage.disk1 -p 10.0.0.40 --logout`. ## Conclusión Tienes un target iSCSI que exporta un disco protegido con ACL y CHAP, y un iniciador que lo monta de forma persistente en cada arranque. Como siguientes pasos puedes añadir una segunda interfaz de red y configurar multipath (`multipath-tools`) para tener rutas redundantes, usar el LUN como almacenamiento compartido en Proxmox, o crear un pool ZFS sobre el backstore del target para disponer de snapshots.