什么是targetcli
targetcli 是 Linux 下管理内核 iSCSI Target (LIO) 的交互式命令行工具。
它支持配置:
- iSCSI Targets
- 目标 LUN(逻辑单元)
- ACL(访问控制列表)
- 网络门户(network portals)
- 以及后端存储(block、file、RAM 等)
安装targetcli
Debian / Ubuntu 系列
sudo apt update
sudo apt install targetcli-fb -y
安装后可以运行:
sudo targetcli
看到提示符:
/>
就说明安装成功。
CentOS / Rocky / AlmaLinux / RHEL 系列
sudo dnf install targetcli -y
或者在旧系统上:
sudo yum install targetcli -y
Arch Linux / Manjaro
sudo pacman -S targetcli-fb
openSUSE
sudo zypper install targetcli-fb
配置targetcli
创建后端存储(fileio backstore)
使用以下命令打开targetcli shell
sudo targetcli
在 targetcli shell 中:
/backstores/fileio create iscsi_disk /srv/iscsi/disk01.img
iscsi_disk:backstore 名称(在 targetcli 中引用用)。/srv/iscsi/disk01.img:后端镜像文件或设备路径。
若为块设备(例如 /dev/sdb),使用:
/backstores/block create name=iscsi_block dev=/dev/sdb
例如可以使用
fallocate -l 4G disk.img 快速创建一个指定大小的空磁盘镜像文件(img),大小为 4GB ,文件名为 disk.img。创建 iSCSI Target(IQN)与 Portal
/iscsi create iqn.2025-10.com.example:storage01
/iscsi/iqn.2025-10.com.example:storage01/tpg1/portals create 0.0.0.0 3260
- IQN 示例(iqn.2025-10.com.example)应修改为与你域名/组织对应的格式(保持唯一性)。
0.0.0.0:3260表示监听所有网卡上的 3260 端口;也可改为具体 IP。
内网状态随便填IQN 只要域名符合格式,后面用ip链接要用
绑定 LUN(将 backstore 暴露为 LUN)
/iscsi/iqn.2025-10.com.example:storage01/tpg1/luns create /backstores/fileio/iscsi_disk
该命令会创建 lun0(或下一个可用 LUN)并指向 iscsi_disk。
关闭认证 / 开放访问(测试专用)
若用于内网临时测试,可在 TPG 设置打开“全网可连”模式:
/iscsi/iqn.2025-10.com.example:storage01/tpg1 set attribute authentication=0 demo_mode_write_protect=0 generate_node_acls=1 cache_dynamic_acls=1
含义:
authentication=0:关闭 CHAP(无认证)demo_mode_write_protect=0:允许写操作generate_node_acls=1:自动处理节点 ACL(便于动态接受 initiator)cache_dynamic_acls=1:缓存动态 ACL(可选)
安全提示:上述设置会允许任何能访问你 3260 端口的主机连接并读写该 LUN,仅用于受信内网或短期调试。
保存配置与退出
在 targetcli 中执行:
saveconfig
exit
或在 shell 外:
sudo targetcli saveconfig
配置会保存到系统默认路径(例如 /etc/target/saveconfig.json),重启后自动恢复。
启动与检查 target 服务
sudo systemctl enable --now target
sudo systemctl status target
注意:不同发行版或历史遗留环境可能使用
tgt/tgtd,若 target 无法找到,请根据实际服务名调整。防火墙(放行端口 3260)
Ubuntu(UFW):
sudo ufw allow 3260/tcp
或使用 iptables:
sudo iptables -I INPUT -p tcp --dport 3260 -j ACCEPT
sudo iptables-save
Linux 客户端(iscsiadm)发现与登录
发现:
sudo iscsiadm -m discovery -t sendtargets -p
登录:
sudo iscsiadm -m node -T iqn.2025-10.com.example:storage01 -p --login
设置自动重连(开机自动):
sudo iscsiadm -m node --targetname iqn.2025-10.com.example:storage01 --portal <SERVER_IP>:3260 --op update -n node.startup -v automatic
Windows 客户端(PowerShell)
删除旧 Portal / 会话:
Get-IscsiSession | Disconnect-IscsiTarget -Confirm:$false
Get-IscsiTargetPortal | Remove-IscsiTargetPortal -Confirm:$false
添加 Portal、发现并连接:
New-IscsiTargetPortal -TargetPortalAddress <SERVER_IP>
Get-IscsiTarget
# 注意 IQN 大小写需完全匹配 targetcli 中显示的名称
Connect-IscsiTarget -NodeAddress "iqn.2025-10.com.example:storage01" -IsPersistent $true
Get-IscsiSession
风险与安全建议
- 绝对不要 在公网或不受信网络上使用“无认证 + 无 ACL”的配置。
- 生产环境至少应:
- 使用 CHAP(单向或双向);
- 仅允许指定 Initiator IQN 与受信 IP 段;
- 将 iSCSI 服务放在私有网络或通过 VPN/VLAN 隔离;
- 定期备份重要数据并设置访问审计。
- CHAP 密码应为强随机字符串,并妥善保管。

Comments NOTHING