一、实验环境
1、iSCSI介绍
iSCSI(Internet Small Computer System Interface)是一种基于因特网及SCSI-3协议下的存储技术,也称为IP-SAN。iSCSI是由IETF(Internet Engineering Task Force)提出,并于2003年2月11日成为正式的标准。它允许通过IP网络进行SCSI指令的传输,使得存储设备和服务器之间的连接不再受地理位置的限制。
iSCSI利用了TCP/IP的port 860和3260作为沟通的渠道。通过两部计算机之间利用iSCSI的协议来交换SCSI命令,让计算机可以透过高速的局域网集线来把SAN模拟成为本地的储存装置。本质上,iSCSI让两个主机通过IP网络相互协商然后交换SCSI命令,从而创建了一个存储局域网(SAN)。
iSCSI是C/S模式(客户端服务器模式),服务器共享的的存储在客户端中呈现出现的是裸设备(指的是没有分区/没有格式化,不受操作系统保护)。
特点优势
- 网络依赖性:iSCSI使用TCP/IP网络协议,可以在任何支持TCP/IP的网络环境中运行。
- 易用性:基于标准的协议,使得不同厂商的存储设备和计算机之间可以容易地进行互操作。
- 扩展性:支持大规模的存储解决方案,可以扩展到数百甚至数千个磁盘驱动器。
- 成本效益:与传统的SAN解决方案相比,iSCSI通常成本较低,因为它可以使用标准的网络设备和协议。
- 灵活性:允许存储资源的动态分配和管理,提供了很高的灵活性。
- 高可用性:支持冗余路径和故障转移,提高了存储解决方案的可用性和可靠性。
- 安全性:支持多种安全协议,如CHAP(Challenge-Handshake Authentication Protocol),用于验证和加密通信。
2、iSCSI专业术语
启动器:iSCSI客户端,必须为iSCSI客户端设置唯一的IQN
目标:服务器上的存储资源,1个存储资源可能由1个或多个带编号的块设备组成,其中块设备也称为逻辑单元(LUN),大白话就是硬盘/分区/逻辑卷。1个目标由1个块设备组成。
ACL:服务器限制客户端能否访问的配置,默认是通过ACL中放行允许连接客户端的IQN来达到访问控制功能。
发现:客户端列出服务器存储目标
IQN:目标或客户端的唯一标识,可以自定义IQN,但是要符合命名规范。【iqn.YYYY-MM.com.reversed.domain[:option_string]】
节点:服务器目标或客户端
TPG门户组:自动创建,使用默认的TPG即可
因为iSCSI所共享的存储资源不受操作系统保护,所以同一块iSCSI磁盘不允许被多个客户端操作系统同时挂载,否则会存在读写冲突,从而导出文件数据损坏。如果要突破限制,则需要使用集群系统的中的GFS(全局文件系统)。
3、CHAP认证
CHAP(Challenge Handshake Authentication Protocol,质询握手验证协议)是一种用于网络安全的认证协议,适用于在用户和网络服务器之间建立安全连接。在iSCSI客户端需要连接网络存储的iSCSI逻辑硬盘时,客户端会向服务端发起iSCSI连接请求,双方通过协商后将采用CHAP进行身份验证,验证报文默认会通过MD5进行加密后发送。
工作原理
- CHAP使用三次握手的过程来周期性地验证对端的身份。这可以在初始链路建立时完成,也可以在链路建立之后的任何时间重复进行。
- 当进行验证时,一端(例如服务器)会生成一个随机数作为“挑战”(challenge),并将其发送给另一端(例如客户端)。
- 客户端使用用户输入的密码和接收到的挑战来计算出一个“响应”值,并将这个响应值发送回服务器。
- 服务器使用保存的用户密码和相同的挑战值来验证客户端发送的响应值。如果响应值正确,则认证成功;否则,认证失败
4、实验拓扑
标识 | Server | Linux客户端 | Win客户端 |
---|---|---|---|
主机 | Server | client | win2022 |
IP地址 | 192.168.1.1/24 | 192.168.1.10/24 | 192.168.1.11/24 |
软件包 | target* | scsi | none |
二、iSCSI服务器配置
1、本地添加三块硬盘
2、安装iSCSI服务
搜索target软件包
dnf search target
安装target
dnf -y install target*
3、配置iSCSI磁盘
查看我们添加的虚拟磁盘
lsblk
使用targetcli交互式配置iSCSI,在交互式中可以使用ls/pwd/cd等操作系统命令
/
:根目录backstores
:后端存储对象目录,定义了存储数据的位置和方式block
:块设备后端存储对象fileio
:文件I/O后端存储对象,用文件来标识一个存储(当作成硬盘)pscsi
:物理SCSI设备后端存储对象,直接连接到自身的SCSI设备,绕过操作系统管理ramdisk
:RAM磁盘后端存储对象,利用内存区创建和模拟一个存储设备(硬盘)
iscsi
:iSCSI目标目录,用于配置和管理iSCSI目标loopback
:本地回环目标目录,通常用于测试
[Storage Objects: 0]
代表当前的后端存储没有创建任何对象[Targets: 0]
代表当前目标目录中没有创建任何目标
4、使用三块硬盘,分别创建两个块设备和一个文件设备
- 将nvme0n2划分一个主分区,空间为所有,创建块设备,命名为blk1
- 将nvme0n3直接创建块设备,命名为blk2
- 将nvme0n4创建文件设备,命名为file1
分区
fdisk /dev/nvme0n2
> n
> [保持默认,回车即可]
> [保持默认,回车即可]
> [保持默认,回车即可]
> [保持默认,回车即可]
> w
partprobe
创建块设备后端存储和文件设备后端存储
targetcli
cd /backstores/block # 切换到块设备后端存储对象目录
create blk1 /dev/nvme0n2p1 # 新建块设备后端存储对象
create blk2 /dev/nvme0n3 # 新建块设备后端存储对象
cd /backstores/fileio # 切换到文件I/O后端存储对象目录
create file1 /dev/nvme0n4 # 新建文件设备后端存储对象
5、为目标创建IQN(在指定IQN的同时会创建目标)
创建IQN,用于客户端连接使用
cd /iscsi
create iqn.2024-06.cn.meaauf.net:mytarget-blk1
create iqn.2024-06.cn.meaauf.net:mytarget-blk2
create iqn.2024-06.cn.meaauf.net:mytarget-file1
6、在TPG中创建ACL,ACL用于控制客户端访问
cd iqn.2024-06.cn.meaauf.net:mytarget/tpg1/acls
create iqn.2024-06.cn.meaauf.net:client # 设置允许连接的客户端的IQN值
cd /iscsi/iqn.2024-06.cn.meaauf.net:mytarget-blk2/tpg1/acls
create iqn.2024-06.cn.meaauf.net:client
cd /iscsi/iqn.2024-06.cn.meaauf.net:mytarget-file1/tpg1/acls
create iqn.2024-06.cn.meaauf.net:win2022
7、映射lun,在TPG目录中建立与块设备、文件设备的映射
cd /iscsi/iqn.2024-06.cn.meaauf.net:mytarget-blk1/tpg1/luns
create /backstores/block/blk1
cd /iscsi/iqn.2024-06.cn.meaauf.net:mytarget-blk2/tpg1/luns
create /backstores/block/blk2
cd /iscsi/iqn.2024-06.cn.meaauf.net:mytarget-file1/tpg1/luns
create /backstores/fileio/file1
8、查看所有配置并退出
cd /
ls
9、启动服务并调整防火墙规则
systemctl enable --now target.service
firewall-cmd --add-port=3260/tcp --permanent
firewall-cmd --reload
三、Linux客户端配置
1、安装客户端访问工具
安装iscsid服务
dnf -y install iscsi-initiator-utils.x86_64
- iscsid.service:管理iSCSI连接的启动和终止
- iscsi.service:登陆和搜索iSCSI设备
- /etc/iscsi/iscsid.conf:用于修改身份验证用户名、密码和时间参数等信息
- /etc/iscsi/initiatorname.iscsi:存储本机的IQN名称信息
- iscsiadm:用于发现、登录、卸载远程iSCSI目标
查看软件包对应的服务
rpm -ql install iscsi-initiator-utils.x86_64 | grep service
启动服务
systemctl enable --now iscsid.service
systemctl enable --now iscsi.service
2、修改客户端的IQN
编辑iscsi文件
vim /etc/iscsi/initiatorname.iscsi
# 将值修改为上面我们ACL中所添加的IQN
InitiatorName=iqn.2024-06.cn.meaauf.net:client
重启iscsi服务
systemctl restart iscsid.service
3、手动连接服务端
手动连接服务端步骤
- 查询服务器可用节点
- 登陆服务器可用节点
- 列出服务器共享的裸设备
查询服务器存在的目标
iscsiadm -m discovery -t st -p 192.168.1.1
查看本地所有的块设备
lsblk
连接服务器目标
iscsiadm -m node -T iqn.2024-06.cn.meaauf.net:mytarget-blk1 -l
iscsiadm -m node -T iqn.2024-06.cn.meaauf.net:mytarget-blk2 -l
iscsiadm -m node -T iqn.2024-06.cn.meaauf.net:mytarget-file1 -l
连接成功后,查看本地出现的裸设备
lsblk
为sdb划分分区
fdisk /dev/sdb
> n
> p
> 1
> 2048
> +10G
> w
partprobe
格式化、然后挂载,测试写入
mkfs.xfs /dev/sdb1
mkdir /mnt/sdb
mount /dev/sdb1 /mnt/sdb
echo 1111 > /mnt/sdb/1.txt
4、临时注销目标
临时注销目标
iscsiadm -m node -T iqn.2024-06.cn.meaauf.net:mytarget-blk1 -u
重启服务后,会自动连接
systemctl restat iscsi.service
注销本机所有iSCSI存储设备
iscsiadm -m node --logoutall=all
5、永久注销目标
首先需要临时注销,否则会提示【session is using】
iscsiadm -m node -T iqn.2024-06.cn.meaauf.net:mytarget-blk1 -u
永久注销指定目标
iscsiadm -m node -T iqn.2024-06.cn.meaauf.net:mytarget-blk1 -o delete
报错信息
这是因为没有临时注销,直接永久注销会显示当前有一个会话正在使用,需要先注销后重新删除。
四、Window客户端测试
1、关闭防火墙
2、通过iSCSI发起程序连接iSCSI磁盘
打开iSCSI发起程序
修改本机的IQN为iqn.2024-06.cn.meaauf.net:win2022
搜索目标
查看磁盘管理,可以发现存在一个100G的脱机硬盘
五、discover认证
设置discovery认证,没有设置用户名密码的用户将无法列出服务器活动的目标
用户名 | 密码 |
---|---|
disuser | discovery@123 |
1、iSCSI服务器配置
设置discover认证
targetcli
cd /iscsi
set discovery_auth enable=1 userid=disuser password=discovery@123
重启服务
systemctl restart iscsid.service
2、Linux客户端配置
查询服务器存在的目标
iscsiadm -m discovery -t st -p 192.168.1.1
修改配置文件,添加discover用户名和密码
vim /etc/iscsi/iscsid.conf
# 取消以下行的注释,并修改相应值
discovery.sendtargets.auth.authmethod = CHAP
discovery.sendtargets.auth.username = disuser
discovery.sendtargets.auth.password = discovery@123
重启服务
systemctl restart iscsid.service
再次查询服务器存在的目标
iscsiadm -m discovery -t st -p 192.168.1.1
3、Win客户端配置
尝试查询服务器存在的目标,可以发现无法查找到目标
在发现门户中选择高级,然后添加discovery用户名和密码
返回到目标中,可以看到可以发现目标
六、单向CHAP认证
通过上述创建的blk1、blk2为例,配置单向CHAP认证,ACL分别设置允许Linux客户端和Win客户端连接
单向CHAP认证其实就是给目标添加initiator authentication(发起方身份验证)。
target | 用户名 | 密码 | 允许访问的客户端 |
---|---|---|---|
blk1 | chap1 | chap1@123 | Linux客户端 |
blk2 | chap2 | chap2@123456789 | Win客户端 |
先将Linux客户端、Win客户端上连接的目标全部永久注销
iscsiadm -m node -T iqn.2024-06.cn.meaauf.net:mytarget-blk1 -u
iscsiadm -m node -T iqn.2024-06.cn.meaauf.net:mytarget-blk1 -o delete
iscsiadm -m node -T iqn.2024-06.cn.meaauf.net:mytarget-blk2 -u
iscsiadm -m node -T iqn.2024-06.cn.meaauf.net:mytarget-blk2 -o delete
需要注意的是,在Windows中对CHAP的认证密码有长度要求,不可少于12个字符,否则会连接不上目标。可以通过在Windows中新建iSCSI虚拟磁盘向导中查看。在Linux中也有限制字符要求,但是少于12个字符不会像Windows一样报错。
可以在Windows中的【事件查看器】–>【Windows 日志】–> 【系统】中查看事件
1、iSCSI服务器配置
调整blk2中的ACL,仅允许Win客户端访问
cd /iscsi/iqn.2024-06.cn.meaauf.net:mytarget-blk2/tpg1/acls/
delete iqn.2024-06.cn.meaauf.net:client
create iqn.2024-06.cn.meaauf.net:win2022
给blk1添加CHAP认证
cd /iscsi/iqn.2024-06.cn.meaauf.net:mytarget-blk1/tpg1/acls/iqn.2024-06.cn.meaauf.net:client/
set auth userid=chap1 password=chap1@123
给blk2添加CHAP认证
cd /iscsi/iqn.2024-06.cn.meaauf.net:mytarget-blk2/tpg1/acls/iqn.2024-06.cn.meaauf.net:win2022/
set auth userid=chap2 password=chap2@123456789
重启服务
systemctl restart iscsid.service
2、Linux客户端配置
扫描服务端目标
iscsiadm -m discovery -t st -p 192.168.1.1
修改配置文件
vim /etc/iscsi/iscsid.conf
# 取消下列行的注释,并添加对应值
node.session.auth.authmethod = CHAP
node.session.auth.username = chap1
node.session.auth.password = chap1@123
重启服务
systemctl restart iscsid.service
先查询服务器存在的目标,再连接blk1
iscsiadm -m discovery -t st -p 192.168.1.1
iscsiadm -m node -T iqn.2024-06.cn.meaauf.net:mytarget-blk1 -l
可以看到我们之前的分区依旧存在
3、Win客户端配置
打开iSCSI发起程序,选中blk2,单击连接,然后选择高级
启用CHAP登录,然后输入用户名和密码
查看已连接目标的属性,可以看到身份认证为CHAP
查看本地的出现的裸设备
六、双向CHAP认证
通过上述创建的blk1、blk2为例,在单向CHAP认证的基础上,添加反向CHAP认证,ACL分别设置允许Linux客户端和Win客户端连接
双向CHAP认证其实就是给目标添加target authentication(目标身份验证)。注意:target authentication只能在initiator authentication的基础上设置。
target | 用户名 | 密码 | 允许访问的客户端 |
---|---|---|---|
blk1 | chap10 | chap10@123 | Linux客户端 |
blk2 | chap20 | chap20@123456789 | Win客户端 |
先将Linux客户端、Win客户端上连接的目标全部永久注销
iscsiadm -m node -T iqn.2024-06.cn.meaauf.net:mytarget-blk1 -u
iscsiadm -m node -T iqn.2024-06.cn.meaauf.net:mytarget-blk1 -o delete
Windows断开连接即可
1、iSCSI服务器配置
给blk1添加反向CHAP认证
targetcli
cd /iscsi/iqn.2024-06.cn.meaauf.net:mytarget-blk1/tpg1/acls/iqn.2024-06.cn.meaauf.net:client/
set auth mutual_userid=chap10 mutual_password=chap10@123
给blk2添加反向CHAP认证
cd /iscsi/iqn.2024-06.cn.meaauf.net:mytarget-blk2/tpg1/acls/iqn.2024-06.cn.meaauf.net:win2022/
set auth mutual_userid=chap20 mutual_password=chap20@123456789
重启服务
systemctl restart iscsid.service
2、Linux客户端配置
扫描服务端目标
iscsiadm -m discovery -t st -p 192.168.1.1
先测试再没有配置反向CHAP用户名密码,是否可以连接目标
iscsiadm -m node -T iqn.2024-06.cn.meaauf.net:mytarget-blk1 -l
修改配置文件,添加反向认证用户和密码
vim /etc/iscsi/iscsid.conf
# 取消下列行的注释,并添加对应值
node.session.auth.username = chap10
node.session.auth.password = chap10@123
重启服务
systemctl restart iscsi.service
先扫描服务端目标,后连接目标
iscsiadm -m discovery -t st -p 192.168.1.1
iscsiadm -m node -T iqn.2024-06.cn.meaauf.net:mytarget-blk1 -l
3、Win客户端配置
先在目标上刷新一下
扫描服务端目标
如果在快速连接后,显示【目标错误】,这是因为我们刷新后,清除了在discover认证中的用户名和密码,重新设置即可
在连续单击所有的【确认】后,即可在目标中发现服务端的所有目标
配置反向CHAP密码
设置正向CHAP用户名和密码
查看blk2的属性,可以看到身份验证为【相互CHAP】
查看本地的裸设备