- 安装软件包
- 配置 iSCSI 目标
- 创建并配置 LUN (逻辑单元号)
- 启动并启用服务
- 配置防火墙和 SELinux
- 客户端连接验证
前提条件
- 一台运行 CentOS 7 或 CentOS 8/Stream 的服务器。
- 具有管理员 (
root) 权限。 - 一块或多块用于提供存储的硬盘(可以是物理磁盘、LVM 逻辑卷、文件或 ZFS 卷),本教程将以一块新硬盘
/dev/sdb为例。
第 1 步:安装软件包
我们需要安装 targetcli 包,这是目前最主流、最易于使用的 iSCSI 目标管理工具。

# 对于 CentOS 7 sudo yum install targetcli -y # 对于 CentOS 8 / Stream sudo dnf install targetcli -y
安装完成后,targetcli 会自动创建一个配置文件,并提示您是否在系统重启时自动加载配置,建议选择 Yes。
第 2 步:配置 iSCSI 目标
targetcli 使用一个类似 shell 的交互式界面来管理所有存储资源。
1 启动 targetcli
在终端输入 targetcli 并回车:
sudo targetcli
您将进入一个以 /> 开头的命令行界面。

2 配置基本目标信息
一个 iSCSI 目标由三部分组成:
iqn(iSCSI Qualified Name): 全局唯一的名称,格式为iqn.yyyy-mm.reversed-domain-name:identifier。yyyy-mm: 是一个时间戳,表示您的组织或单位拥有该名称的权威权。reversed-domain-name: 通常是您的域名倒序。identifier: 一个由您自己定义的、描述该目标的字符串。
tpgt(Target Portal Group Tag): 目标门户组标签,通常使用默认值1。address和port: iSCSI 服务器监听的 IP 地址和端口(默认为3260)。
让我们创建一个目标,请将下面的 iqn 中的日期和域名替换为您自己的信息。
# 进入 /iscsi 节点 /> cd /iscsi # 创建一个名为 iqn.2025-10.com.example:storage.target1 的目标 # 注意:请务必修改这个 IQN 名称,使其对您的环境有意义且唯一 /> /iscsi> create iqn.2025-10.com.example:storage.target1
成功创建后,您会看到类似下面的输出,并且您的目标会出现在子目录中。
Created target iqn.2025-10.com.example:storage.target1.
Created TPG 1.
3 配置访问控制列表 (ACL)
为了安全,我们需要指定哪些 iSCSI 客户端(发起方)可以连接到这个目标,这通过设置 CHAP 认证 来实现。

- CHAP 互认证 (双向认证):服务器和客户端互相验证用户名和密码,这是最安全的方式。
- CHAP 单向认证:仅客户端验证服务器,本教程将演示这种更简单的方式。
# 进入您刚创建的目标目录 /> cd /iscsi/iqn.2025-10.com.example:storage.target1/tpg1/ # 设置一个用于客户端认证的用户名和密码 # 用户名为 myclient,密码为 a-very-strong-password /> /iscsi/iqn.20...target1/tpg1> set auth user=myclient password=a-very-strong-password # (可选,推荐)设置一个用于服务器认证(反向 CHAP)的用户名和密码 /> /iscsi/iqn.20...target1/tpg1> set auth user=myclient reverse_user=myserver reverse_password=another-strong-password # 将客户端的 IQN 添加到 ACL 列表中,允许它连接 # 请将客户端的 IQN 替换为实际值 /> /iscsi/iqn.20...target1/tpg1> set acl initiator-iqn=iqn.2025-10.com.client:myinitiator
第 3 步:创建并配置 LUN (逻辑单元号)
LUN 是客户端看到的“虚拟硬盘”,我们将使用之前准备的 /dev/sdb 磁盘来创建它。
1 准备后端存储
我们需要将物理磁盘 /dev/sdb 格式化为 block 类型,这是 targetcli 所需的格式。
# 仍在 targetcli 内部 # 进入存储池目录 /> cd backstores/block # 创建一个名为 disk1 的 block 后端存储,指向 /dev/sdb /> /backstores/block> create /dev/sdb disk1
2 将 LUN 绑定到目标
我们将这个 disk1 LUN 绑定到我们的 iSCSI 目标上。
# 返回到目标目录 /> cd /iscsi/iqn.2025-10.com.example:storage.target1/tpg1/luns # 创建 LUN 0,并将我们刚刚创建的 disk1 绑定到它 /> /iscsi/iqn.20...target1/tpg1/luns> create /backstores/block/disk1
3 设置端口als
为了确保客户端能发现目标,我们需要设置一个端口。targetcli 通常会自动创建,但我们可以手动确认。
# 进入 portals 目录 /> cd /iscsi/iqn.2025-10.com.example:storage.target1/tpg1/portals # 删除任何自动创建的 0.0.0.0 portal(如果存在),因为我们希望绑定到具体 IP /> /iscsi/iqn.20...target1/tpg1/portals> delete 0.0.0.0 3260 # 创建一个新的 portal,绑定到服务器的实际 IP 地址 # 请将 192.168.1.100 替换为您服务器的 IP 地址 /> /iscsi/iqn.20...target1/tpg1/portals> create 192.168.1.100
第 4 步:保存配置并启动服务
配置完成后,我们需要保存它并让 target 服务运行起来。
1 保存配置
在 targetcli 提示符下,执行以下命令:
/> /iscsi> saveconfig
这会将您在内存中的所有配置持久化到硬盘上的 /etc/target/saveconfig.json 文件。
2 退出 targetcli
/> exit
3 启动并启用服务
# 启动 target 服务 sudo systemctl start target # 设置开机自启 sudo systemctl enable target # 检查服务状态 sudo systemctl status target
如果服务状态为 active (running),则说明服务器端配置成功。
第 5 步:配置防火墙和 SELinux
客户端无法连接,最常见的原因就是防火墙和 SELinux 阻止了流量。
1 配置防火墙 (firewalld)
# 允许 iSCSI 服务 (3260/tcp) 通过防火墙 sudo firewall-cmd --permanent --add-service=iscsi-target # 重新加载防火墙配置以使更改生效 sudo firewall-cmd --reload
2 配置 SELinux
SELinux 默认会阻止 target 服务访问块设备,我们需要为它设置正确的布尔值。
# 启用允许 target 服务读写块设备的布尔值 sudo setsebool -P target_friendly_use_block_devices on
注意:
-P参数会永久保存该设置,执行后,SELinux 将不再阻止target服务。
第 6 步:客户端连接验证
iSCSI 服务器已经配置完成,您可以从另一台 Linux 客户端(发起方)进行连接。
1 发现目标
在客户端机器上,使用 iscsiadm 工具发现服务器上的目标。
# -m discovery 表示发现模式 # -t st 表示发现存储目标 # -p 192.168.1.100 是您 iSCSI 服务器的 IP 地址 sudo iscsiadm -m discovery -t st -p 192.168.1.100
如果一切正常,您应该能看到您创建的目标名称:
iqn.2025-10.com.example:storage.target1
2 登录目标
使用之前设置的 CHAP 凭据登录目标。
# -m node 表示节点模式 # -T iqn.2025-10.com.example:storage.target1 是目标 IQN # -p 192.168.1.100:3260 是服务器 IP 和端口 # --op=new 表示执行新的登录操作 # --name 客户端认证用户名 # --value 客户端认证密码 sudo iscsiadm -m node -T iqn.2025-10.com.example:storage.target1 -p 192.168.1.100:3260 --op=new --name node.session.auth.username --value=myclient sudo iscsiadm -m node -T iqn.2025-10.com.example:storage.target1 -p 192.168.1.100:3260 --op=update --name node.session.auth.password --value=a-very-strong-password # 如果设置了反向 CHAP,也需要添加 sudo iscsiadm -m node -T iqn.2025-10.com.example:storage.target1 -p 192.168.1.100:3260 --op=update --name node.session.auth.username_in --value=myserver sudo iscsiadm -m node -T iqn.2025-10.com.example:storage.target1 -p 192.168.1.100:3260 --op=update --name node.session.auth.password_in --value=another-strong-password # 执行登录 sudo iscsiadm -m node -T iqn.2025-10.com.example:storage.target1 -p 192.168.1.100:3260 --login
登录成功后,您会看到 successful login 的消息。
3 验证 LUN
在客户端上,检查 /dev 目录下是否出现了新的块设备。
ls /dev/sd*
您应该能看到一个新的设备,/dev/sdb(或 /dev/sdc 等,这取决于您客户端已有的磁盘),这个新设备就是您在服务器上创建的 LUN,现在您可以像使用本地硬盘一样对其进行分区、格式化和挂载。
您已经成功地在 CentOS 服务器上配置了一个功能齐全的 iSCSI 目标,客户端现在可以访问这块网络存储了,为了生产环境的稳定性和安全性,请务必:
- 使用强密码和复杂的 IQN 名称。
- 考虑使用 LVM 或 ZFS 作为后端存储,以获得更好的灵活性和快照功能。
- 定期备份您的
targetcli配置。
