Настройка iSCSI (Target и Initiator) на Ubuntu 20.04

Введение
iSCSI (Internet Small Computer System Interface) — это протокол для обмена SCSI-командами поверх TCP/IP. Он позволяет шарить блочные устройства (разделы HDD/SSD, LVM, файлы-блоки) по сети. В модели iSCSI есть две роли:
- Target — сервер, который предоставляет доступ к блочному хранилищу.
- Initiator — клиент, который подключается к таргету и использует удалённый блок-устройствo как локальное.
Определение терминов в одну строку:
- LUN — логический блок хранения, видимый инициатору как устройство.
- CHAP — Challenge-Handshake Authentication Protocol, метод аутентификации.
Требования
- Сервер с Ubuntu 20.04, на котором будет iSCSI Target. На нём есть внешний диск ~1 ГБ (пример: /dev/sdb).
- Отдельная машина с Ubuntu 20.04 для iSCSI Initiator.
- Статические IP: 192.168.1.10 — таргет, 192.168.1.20 — инициатор (пример).
- Корневой доступ (root) на обоих серверах.
Важно: в реальной сети используйте безопасную схему адресации и надёжные пароли CHAP. iSCSI по умолчанию не шифрует трафик — при работе через недоверенные сети применяйте IPsec или VPN.
Обновление системы
Перед началом обновите пакеты на обеих машинах:
apt-get update -y
apt-get upgrade -yПосле обновления рекомендуется перезагрузить систему.
Установка iSCSI Target (tgt)
На сервере, который будет таргетом, установите пакет tgt:
apt-get install tgt -yПроверьте статус сервиса:
systemctl status tgtПример ожидаемого вывода (сокращённо):
? tgt.service - (i)SCSI target daemon
Loaded: loaded (/lib/systemd/system/tgt.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2020-07-11 07:13:04 UTC; 23s agoЕсли служба не стартует — проверьте логи через journalctl -u tgt.
Конфигурация iSCSI Target
Создайте файл конфигурации таргета:
nano /etc/tgt/conf.d/iscsi.confДобавьте конфигурацию LUN:
backing-store /dev/sdb
initiator-address 192.168.1.20
incominguser iscsi-user password
outgoinguser iscsi-target secretpass
Где:
- Первая строка задаёт IQN (имя таргета).
- backing-store указывает устройство на сервере (/dev/sdb).
- initiator-address ограничивает доступ по IP инициатора.
- incominguser — логин/пароль для входящих подключений.
- outgoinguser — учётные данные, которые таргет может использовать при взаимной аутентификации.
После сохранения перезапустите сервис:
systemctl restart tgtПроверьте конфигурацию через tgtadm:
tgtadm --mode target --op showОжидаемый пример вывода:
Target 1: iqn.2020-07.example.com:lun1
System information:
Driver: iscsi
State: ready
LUN information:
LUN: 0
Type: controller
Size: 0 MB, Block size: 1
Account information:
iscsi-user
iscsi-target (outgoing)
ACL information:
192.168.1.10Установка и настройка iSCSI Initiator (open-iscsi)
На машине-инициаторе установите клиент:
apt-get install open-iscsi -yОбнаружьте таргеты на сервере:
iscsiadm -m discovery -t st -p 192.168.1.10Ожидаемый вывод:
192.168.1.10:3260,1 iqn.2020-07.example.com:lun1Отредактируйте файл инициатора, если нужно задать собственное имя (по умолчанию генерируется):
nano /etc/iscsi/initiatorname.iscsiПример строки:
InitiatorName=iqn.2020-07.example.com:lun1Затем настройте CHAP в node-конфигурации. Путь к файлу будет примерно такой:
nano /etc/iscsi/nodes/iqn.2020-07.example.com\:lun1/192.168.1.10\,3260\,1/defaultВнесите или измените строки:
node.session.auth.authmethod = CHAP
node.session.auth.username = iscsi-user
node.session.auth.password = password
node.session.auth.username_in = iscsi-target
node.session.auth.password_in = secretpass
node.startup = automaticПерезапустите сервисы:
systemctl restart open-iscsi iscsidПроверьте статус:
systemctl status open-iscsiПроверьте сессии iSCSI:
iscsiadm -m session -o showОжидаемый вывод:
tcp: [2] 192.168.1.10:3260,1 iqn.2020-07.example.com:lun1 (non-flash)И проверьте, что на клиенте появилось устройство (/dev/sdb):
lsblkПример вывода:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 80G 0 disk
??sda1 8:1 0 80G 0 part /
sdb 8:16 0 1000M 0 diskСоздание файловой системы и монтирование
Разметьте устройство (/dev/sdb) и создайте раздел:
fdisk /dev/sdbВ процессе fdisk выполните создание нового раздела (n), подтвердите значения по умолчанию и затем запишите таблицу (w). Пример интерактивной сессии показан в оригинале.
Отформатируйте раздел:
mkfs.ext4 /dev/sdb1Пример вывода mkfs.ext4:
mke2fs 1.45.5 (07-Jan-2020)
Creating filesystem with 255744 4k blocks and 64000 inodes
Filesystem UUID: e7f06605-a0f5-41e1-b1b2-e85bd7a2d6a3Смонтируйте раздел:
mount /dev/sdb1 /mntПроверьте via df -h:
df -hОжидаемый пример вывода:
/dev/sdb1 968M 2.5M 899M 1% /mntКритерии приёмки
- На таргете запущен и активен сервис tgt.
- Таргет присутствует в выводе tgtadm –mode target –op show.
- На инициаторе видна iSCSI-сессия iscsiadm -m session -o show.
- На инициаторе устройство /dev/sdb доступно в lsblk.
- Раздел отформатирован и монтируется в /mnt.
Чек-лист ролей
Администратор таргета:
- Проверил физическое устройство и права доступа.
- Настроил /etc/tgt/conf.d/iscsi.conf и перезапустил tgt.
- Ограничил ACL по IP.
Администратор инициатора:
- Установил open-iscsi и получил discovery.
- Настроил CHAP и включил автоматический старт сессии.
- Отформатировал и смонтировал раздел на нужный путь.
Команды-шпаргалка
- Установить target: apt-get install tgt -y
- Проверить tgt: systemctl status tgt
- Показать таргеты: tgtadm –mode target –op show
- Установить initiator: apt-get install open-iscsi -y
- Найти таргет: iscsiadm -m discovery -t st -p
- Показать сессии: iscsiadm -m session -o show
- Формат: mkfs.ext4 /dev/sdb1
- Монтировать: mount /dev/sdb1 /mnt
Распространённые ошибки и их решения
Таргет не виден на инициаторе:
- Проверьте сетевую доступность (ping, telnet IP 3260).
- Убедитесь, что tgt слушает на порту 3260 (ss -ltnp).
- Проверьте, не блокирует ли firewall порт 3260.
Аутентификация CHAP не проходит:
- Удостоверьтесь, что логин/пароль совпадают на обеих сторонах.
- Проверьте escape-последовательности в конфиг-файлах (символы \: и \, в путях nodes).
Устройство появляется, но не монтируется:
- Убедитесь, что раздел создан (/dev/sdb1).
- Проверьте dmesg на предмет ошибок I/O.
Когда iSCSI не подходит
- Если вам нужно файловое шаринг уровня NFS/SMB, а не блочное устройство.
- Если требуется шифрование в канале и нет возможности использовать VPN/IPsec.
- Если сеть ненадёжна: iSCSI чувствителен к задержкам и потере пакетов.
Альтернативные подходы
- NFS или SMB для файлового доступа.
- Ceph/RBD для распределённого блочного хранилища.
- Fibre Channel для высокопроизводительных SAN (требует отдельного оборудования).
План отката (rollback)
- Отключите инициатор: iscsiadm -m node –logout
- На клиенте размонтируйте файловую систему: umount /mnt
- Удалите запись из /etc/iscsi/nodes/ и /etc/iscsi/initiatorname.iscsi при необходимости.
- На таргете остановите tgt: systemctl stop tgt
- Верните конфигурационные файлы из бэкапа.
1-line glossary
- iSCSI — блочное хранилище поверх TCP/IP.
- LUN — логический блок хранилища.
- IQN — уникальный идентификатор iSCSI-узла.
- CHAP — протокол аутентификации.
Риски и смягчение
- Риск: перехват трафика iSCSI в незашифрованной сети.
- Смягчение: использовать VPN/IPsec или выделенные VLAN.
- Риск: повреждение данных при одновременном доступе нескольких хостов.
- Смягчение: использовать кластерную файловую систему (например, GFS2) или LVM2 с кластерными расширениями.
Короткий SOP для продакшн-развертывания
- Подготовить диск и сделать резервные копии.
- Настроить таргет в конфиге /etc/tgt/conf.d/ и ограничить ACL.
- Настроить CHAP и безопасно хранить пароли.
- Тестировать подключение в изолированной сети.
- Документировать конфигурацию и расписать откат.
Заключение
Вы успешно настроили iSCSI Target и Initiator на Ubuntu 20.04, создали LUN, подключились с клиента, отформатировали раздел и смонтировали его. Для продакшн-среды обязательно внедрите шифрование трафика и политику резервного копирования.
Если нужна помощь: укажите ошибки из journalctl, вывод lsblk и iscsiadm — помогу диагностировать.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента