iSCSI передаёт команды SCSI по обычной сети TCP/IP и позволяет подключить удалённый блочный диск как локальный. Для Linux это удобный способ собрать хранилище для виртуальных машин, резервных копий или кластера без покупки Fibre Channel. Разберём настройку цели (target) и инициатора (initiator), защиту через CHAP, multipath и диагностику.

Как это устроено

Сервер-цель экспортирует блочное устройство через LUN. Клиент-инициатор находит портал по IP и порту 3260, проходит аутентификацию и получает устройство /dev/sdX. Каждой стороне назначается IQN — имя в формате iqn.ГГГГ-ММ.домен:описание.

  • Target — сервер, который отдаёт диск.
  • Initiator — клиент, который подключает диск.
  • Portal — адрес и порт target.
  • ACL — список IQN клиентов, которым разрешён доступ.
  • CHAP — парольная аутентификация на уровне iSCSI.

Важно: iSCSI отдаёт блоки, а не файлы. Одну файловую систему нельзя одновременно монтировать на двух хостах — для этого нужен кластерный FS или разделение LUN по узлам.

Подготовка target на сервере

Создайте логический том под LUN. Не отдавайте системный диск и не используйте раздел, который смонтирован локально.

sudo lvcreate -L 500G -n lun0 vg_data
sudo apt update
sudo apt install targetcli-fb
sudo systemctl list-units --type=service | grep -i target

Имя службы зависит от дистрибутива: в RHEL-подобных системах это target, в Debian и Ubuntu пакет targetcli-fb регистрирует собственный юнит. Проверьте его через systemctl status и включите автозапуск. Дальше конфигурация задаётся в интерактивной оболочке targetcli.

sudo targetcli
/> backstores/block create name=lun0 dev=/dev/vg_data/lun0
/> iscsi/ create iqn.2026-11.su.example:storage01
/> iscsi/iqn.2026-11.su.example:storage01/tpg1/luns create /backstores/block/lun0
/> iscsi/iqn.2026-11.su.example:storage01/tpg1/acls create iqn.2026-11.su.example:client01
/> iscsi/iqn.2026-11.su.example:storage01/tpg1/portals create 10.20.30.10
/> iscsi/iqn.2026-11.su.example:storage01/tpg1 set attribute generate_node_acls=0 demo_mode_write_protect=0
/> saveconfig

Параметр generate_node_acls=0 запрещает автоматическое создание ACL для любого клиента. Без него ограничение по IQN фактически не работает. Порт 3260 откройте только для подсети клиентов.

sudo firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=10.20.30.0/24 port port=3260 protocol=tcp accept'
sudo firewall-cmd --reload
sudo ss -ltnp | grep 3260

Аутентификация CHAP

Одного ACL недостаточно: IQN не является секретом и может быть подделан. Включите CHAP на target и задайте отдельные учётные данные для каждого клиента.

/> iscsi/iqn.2026-11.su.example:storage01/tpg1 set attribute authentication=1
/> iscsi/iqn.2026-11.su.example:storage01/tpg1/acls/iqn.2026-11.su.example:client01 set auth userid=client01 password=Str0ngPass
/> saveconfig

Пароль хранится в конфигурации target в открытом виде, поэтому ограничьте доступ к /etc/target и не используйте одинаковые пароли на разных стендах.

Подключение инициатора

На клиенте установите open-iscsi, задайте собственный IQN и включите службу iscsid. Имя должно совпадать с тем, что прописано в ACL на сервере.

sudo apt install open-iscsi
echo 'InitiatorName=iqn.2026-11.su.example:client01' | sudo tee /etc/iscsi/initiatorname.iscsi
sudo systemctl enable --now iscsid
sudo iscsiadm -m discovery -t sendtargets -p 10.20.30.10

Обнаружение лишь заполняет базу известных целей. Само подключение выполняется входом в узел; для CHAP учётные данные задаются через -o update до входа.

sudo iscsiadm -m node -T iqn.2026-11.su.example:storage01 -p 10.20.30.10 -o update -n node.session.auth.authmethod -v CHAP
sudo iscsiadm -m node -T iqn.2026-11.su.example:storage01 -p 10.20.30.10 -o update -n node.session.auth.username -v client01
sudo iscsiadm -m node -T iqn.2026-11.su.example:storage01 -p 10.20.30.10 -o update -n node.session.auth.password -v 'Str0ngPass'
sudo iscsiadm -m node -T iqn.2026-11.su.example:storage01 -p 10.20.30.10 --login

Чтобы диск подключался после перезагрузки, выставьте node.startup = automatic и проверьте, что iscsid включён. Статус сессии удобно смотреть с уровнем детализации 3.

sudo iscsiadm -m node -T iqn.2026-11.su.example:storage01 -p 10.20.30.10 -o update -n node.startup -v automatic
sudo iscsiadm -m session -P 3
lsblk --scsi

Multipath: два пути к одному LUN

Если у сервера два сетевых интерфейса в разных подсетях, клиент увидит один и тот же LUN дважды. Multipath объединяет пути в одно устройство /dev/mapper/mpathX и переключается при отказе.

sudo apt install multipath-tools
sudo multipath -ll
sudo systemctl enable --now multipathd

Минимальный /etc/multipath.conf для тестового стенда:

defaults {
    user_friendly_names yes
    path_grouping_policy multibus
    failback immediate
}
blacklist {
    devnode "^(ram|loop|fd|sr|nvme|sda)"
}

Чёрный список обязателен: без него multipath может попытаться взять под управление локальный системный диск. После изменения конфигурации перезапустите multipathd и проверьте карту.

Файловая система и автомонтирование

Форматируйте только пустой LUN. Если на устройстве уже есть данные, пропустите mkfs и смонтируйте существующую файловую систему.

sudo mkfs.ext4 -L iscsi-data /dev/mapper/mpatha
sudo mkdir -p /mnt/iscsi-data
sudo blkid /dev/mapper/mpatha
sudo mount /dev/mapper/mpatha /mnt/iscsi-data

В /etc/fstab используйте UUID и опции _netdev,nofail. Без _netdev система может зависнуть на загрузке в ожидании сети, а nofail не даст уйти в аварийный режим, если хранилище недоступно.

UUID=6f1c2a9e-4d3b-4c8a-9e21-5b7f0c1d2e3f /mnt/iscsi-data ext4 _netdev,nofail,x-systemd.device-timeout=30 0 2

Диагностика и типичные сбои

  • iscsiadm -m session -P 3 показывает состояние сессии, LUN и таймауты.
  • dmesg | grep -i iscsi фиксирует ошибки входа и потери пути.
  • targetcli ls на сервере проверяет, что LUN и ACL на месте.
  • ss -tnp | grep 3260 подтверждает сетевое соединение.
  • journalctl -u iscsid -n 100 полезен при отказах аутентификации.

Если после расширения LUN на сервере клиент не видит новый размер, выполните пересканирование сессии и карты multipath, затем расширьте файловую систему онлайн.

sudo iscsiadm -m session --rescan
sudo multipathd resize map mpatha
sudo resize2fs /dev/mapper/mpatha
df -h /mnt/iscsi-data

Безопасность и эксплуатация

Выносите iSCSI в отдельный VLAN, не публикуйте порт 3260 в интернет и разрешайте подключения только с адресов клиентов. Включайте CHAP, ведите отдельные ACL и регулярно проверяйте targetcli ls на лишние LUN. Перед отключением клиента размонтируйте файловую систему.

sudo umount /mnt/iscsi-data
sudo iscsiadm -m node -T iqn.2026-11.su.example:storage01 -p 10.20.30.10 --logout
sudo iscsiadm -m node -T iqn.2026-11.su.example:storage01 -p 10.20.30.10 -o delete

Итог

iSCSI даёт блочное хранилище по обычной сети и хорошо работает там, где нужен диск для гипервизора или резервных копий. Ключевые вещи: корректные IQN и ACL, CHAP, multipath для отказоустойчивости и осторожность с файловой системой. Настройте стенд на двух машинах, проверьте потерю одного пути и только потом переносите конфигурацию в продакшен.

Насколько публикация полезна?

Нажмите на звезду, чтобы оценить!

Средняя оценка 0 / 5. Количество оценок: 0

Оценок пока нет. Поставьте оценку первым.

Поделиться: Telegram ВКонтакте