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 для отказоустойчивости и осторожность с файловой системой. Настройте стенд на двух машинах, проверьте потерю одного пути и только потом переносите конфигурацию в продакшен.