一 iSCSI和CHAP介紹
1.1 iSCSI 磁盤
- iSCSI后端存儲支持多種設備類型,主要有:
- 文件
- 單一分區(partition)
- 磁盤
- 數組
- RAID
- LVM
本手冊建議以裸磁盤vdb作為示例,其他類型配置參考《002.iSCSI服務端多類型配置》。
同時本手冊基於生產環境安全考慮,結合CHAP進行配置認證。
1.2 CHAP介紹
基於IP的認證比較粗糙,對於安全性要求高的環境來說,使用CHAP認證其安全性更有保障。
CHAP(Challenge-Handshake Authentication Protocol),稱為挑戰式握手認證協議,它是雙向認證,當然也支持單向認證。
對於iscsi而言,在CHAP認證的機制上有兩種方式:initiator authentication和target authentication。
1.2.1 initiator authentication認證
在initiator嘗試連接到一個target的時候,initator需要提供一個用戶名和密碼給target被target進行認證。
也就是說initiator需要被target認證,它向target端提供的賬號和密碼是target端指定的。
這個賬號和密碼對於target來說是流入的賬號和密碼,用incoming表示。
稱呼這個賬號和密碼為:incoming賬號和incoming密碼。
即,incoming賬號是initiator端提供給target端,被target端認證的賬號。
1.2.2 target authentication認證
在initiator嘗試連接到一個target的時候,target有時也需要被initiator認證,以確保該target是合法而非偽裝的target,這就要求target提供一個用戶名和密碼給initiator被initiator進行認證。
target向initiator提供的賬號和密碼對於target而言是流出的,所以稱之為outgoing。
稱呼這個賬號和密碼為:outgoing賬號和outgoing密碼。
而對於initiator而言是incoming的,所以在initiator配置文件中稱為in。
也就是說outgoing賬號是target端提供給initiator端,被initiator認證的賬號,但盡管如此,這個賬號和密碼還是在target端創建和綁定的。
1.2.3 單/雙向認證
兩種認證方式是有層次順序的。
一般來說,有認證需求的時候都是服務器驗證客戶端是否有權限,iscsi也一樣。
initiator authentication可以單獨存在,它可以在沒有target authentication的情況下應用,這時候的CHAP認證就是單向認證(target認證initiator的合法性)。
但target authentication只有在initiator authentication的基礎上才能進行。也就是說target認證和initiator認證必須同時存在才可以。即initiator和target需要相互認證實現雙向CHAP認證。
注意:發現認證和登錄認證都支持單/雙向認證。
二 iSCSI創建步驟
- 建立用於共享的磁盤
- 創建后備磁盤
- 創建相應的IQN
- 創建相應的規則
- 為后備磁盤創建LUN
- 創建雙向認證賬號和密碼
- 指定偵聽的IP和端口
- 檢查並保存配置
- 防火牆規則開放
- 服務(開機)啟動
三 前置准備
3.1 環境准備
3.2 查看裸磁盤
[root@iscsi ~]# fdisk -l
Disk /dev/sdb: 1073 MB, 1073741824 bytes, 2097152 sectors
四 創建后備存儲
4.1 安裝相關軟件
[root@iscsi ~]# yum -y install targetcli
4.2 交互設置
[root@system1 ~]# targetcli #進入targetcli交互配置視圖
- block:定義的塊設備,磁盤驅動器、磁盤分區、LVM等
- fileio:創建的指定大小的文件,如dd if=/dev/zero of=……所創建
- pscsi:物理SCSI,通常不采用此類型
- ramdisk:在內存中創建的一個指定大小ramdisk設備
targetcli shell version 2.1.53
Copyright 2011-2013 by Datera, Inc and others.
For help on commands, type 'help'.
/> /backstores/block create block1 /dev/sdb #將裸磁盤創建為后備盤
/> /iscsi create wwn=iqn.2022-11.com.imxhy:disk01 #創建符合名稱的IQN
/> /iscsi/iqn.2022-11.com.imxhy:disk01/tpg1/luns create /backstores/block/block1 #將創建的后備磁盤block1創建一個LUN
/> /iscsi/iqn.2022-11.com.imxhy:disk01/tpg1/acls create iqn.2021-11.com.imxhy:client #只允許配置iqn.2021-11.com.imxhy:client的key才能使用此iSCSI提供的磁盤服務
/> /iscsi/iqn.2021-11.com.imxhy:disk01/tpg1/portals/ delete 0.0.0.0 3260 #刪除默認的全部偵聽
/> /iscsi/iqn.2022-11.com.imxhy:disk01/tpg1/portals/ create 172.24.8.72 3260 #指定本地用於偵聽客戶端連接的IP
/> /iscsi/ set discovery_auth enable=1 userid=discover password=discoverps #選配,本實驗增加discovery的認證
/> /iscsi/ get discovery_auth
DISCOVERY_AUTH CONFIG GROUP
===========================
enable=True
-----------
The enable discovery_auth parameter.
mutual_password=
----------------
The mutual_password discovery_auth parameter.
mutual_userid=
--------------
The mutual_userid discovery_auth parameter.
password=discoverps
-------------------
The password discovery_auth parameter.
userid=discover
---------------
The userid discovery_auth parameter.
/> /iscsi/iqn.2022-11.com.imxhy:disk01/tpg1/acls/iqn.2021-11.com.imxhy:client/ set auth userid=user01 password=u1pass mutual_userid=muser01 mutual_password=m1pass
/> /iscsi/iqn.2022-11.com.imxhy:disk01/tpg1/acls/iqn.2021-11.com.imxhy:client/ get auth #查看配置
AUTH CONFIG GROUP
=================
mutual_password=m1pass
----------------------
The mutual_password auth parameter.
mutual_userid=muser01
---------------------
The mutual_userid auth parameter.
password=u1pass
---------------
The password auth parameter.
userid=user01
-------------
The userid auth parameter.
/> ls /
o- / ......................................................................................................................... [...]
o- backstores .............................................................................................................. [...]
| o- block .................................................................................................. [Storage Objects: 1]
| | o- block1 ........................................................................... [/dev/sdb (1.0GiB) write-thru activated]
| | o- alua ................................................................................................... [ALUA Groups: 1]
| | o- default_tg_pt_gp ....................................................................... [ALUA state: Active/optimized]
| o- fileio ................................................................................................. [Storage Objects: 0]
| o- pscsi .................................................................................................. [Storage Objects: 0]
| o- ramdisk ................................................................................................ [Storage Objects: 0]
o- iscsi ........................................................................................... [1-way disc auth, Targets: 1]
| o- iqn.2022-11.com.imxhy:disk01 ...................................................................................... [TPGs: 1]
| o- tpg1 ............................................................................................... [no-gen-acls, no-auth]
| o- acls .......................................................................................................... [ACLs: 1]
| | o- iqn.2021-11.com.imxhy:client ......................................................................... [Mapped LUNs: 1]
| | o- mapped_lun0 ................................................................................ [lun0 block/block1 (rw)]
| o- luns .......................................................................................................... [LUNs: 1]
| | o- lun0 ..................................................................... [block/block1 (/dev/sdb) (default_tg_pt_gp)]
| o- portals .................................................................................................... [Portals: 1]
| o- 172.24.8.72:3260 ................................................................................................. [OK]
o- loopback ......................................................................................................... [Targets: 0]
/> exit
提示:如上操作:
1:創建的ACL將分配到每個LUN。
2:創建LUN必須在TPG下。
3:若不指定端口將采用默認端口3260
4:若不指定IP,將允許服務器上定義的所有網絡接口上的連接
5:創建LUN必須在TPG下
五 防火牆開放
[root@iscsi ~]# firewall-cmd --add-port=3260/tcp --permanent #防火牆添加iSCSI的端口 [root@iscsi ~]# firewall-cmd --add-service=iscsi-target --permanent #防火牆放通iSCSI target服務 [root@iscsi ~]# firewall-cmd --reload
六 開啟服務
[root@iscsi ~]# systemctl enable target --now
七 客戶端配置
[root@client ~]# yum -y install iscsi-initiator-utils #安裝客戶端 [root@client ~]# vim /etc/iscsi/initiatorname.iscsi #配置CHAP認證 InitiatorName=iqn.2021-11.com.imxhy:client [root@client ~]# vim /etc/iscsi/iscsid.conf …… node.session.auth.authmethod = CHAP node.session.auth.username = user01 node.session.auth.password = u1pass node.session.auth.username_in = muser01 node.session.auth.password_in = m1pass discovery.sendtargets.auth.authmethod = CHAP discovery.sendtargets.auth.username = discover discovery.sendtargets.auth.password = discoverps …… [root@client ~]# systemctl restart iscsid
八 客戶端登錄
8.1 發現目標
[root@client ~]# iscsiadm -m discovery -t sendtargets -p 172.24.8.72 #發現目標 172.24.8.72:3260,1 iqn.2022-11.com.imxhy:disk01
8.2 登錄目標
[root@client ~]# iscsiadm -m node -T iqn.2022-11.com.imxhy:disk01 -p 172.24.8.72 -l #登錄目標
8.3 查詢信息
[root@client ~]# iscsiadm -m session -o show tcp: [23] 172.24.8.72:3260,1 iqn.2022-11.com.imxhy:disk01 (non-flash) [root@client ~]# iscsiadm -m session -P 3 #查詢信息 iSCSI Transport Class version 2.0-870 version 6.2.0.874-22 Target: iqn.2022-11.com.imxhy:disk01 (non-flash) Current Portal: 172.24.8.72:3260,1 Persistent Portal: 172.24.8.72:3260,1 ********** Interface: ********** Iface Name: default Iface Transport: tcp Iface Initiatorname: iqn.2021-11.com.imxhy:client Iface IPaddress: 172.24.8.71 Iface HWaddress: <empty> Iface Netdev: <empty> SID: 1 iSCSI Connection State: LOGGED IN iSCSI Session State: LOGGED_IN Internal iscsid Session State: NO CHANGE ********* Timeouts: ********* Recovery Timeout: 120 Target Reset Timeout: 30 LUN Reset Timeout: 30 Abort Timeout: 15 ***** CHAP: ***** username: user01 password: ******** username_in: muser01 password_in: ******** ************************ Negotiated iSCSI params: ************************ HeaderDigest: None DataDigest: None MaxRecvDataSegmentLength: 262144 MaxXmitDataSegmentLength: 262144 FirstBurstLength: 65536 MaxBurstLength: 262144 ImmediateData: Yes InitialR2T: Yes MaxOutstandingR2T: 1 ************************ Attached SCSI devices: ************************ Host Number: 3 State: running scsi3 Channel 00 Id 0 Lun: 0 Attached scsi disk sdb State: running [root@client ~]# iscsiadm -m node -o show # BEGIN RECORD 6.2.0.874-22 node.name = iqn.2022-11.com.imxhy:disk01 node.tpgt = 1 node.startup = automatic …… iface.transport_name = tcp …… node.discovery_address = 172.24.8.72 node.discovery_port = 3260 node.discovery_type = send_targets node.session.initial_cmdsn = 0 node.session.initial_login_retry_max = 8 node.session.xmit_thread_priority = -20 node.session.cmds_max = 128 node.session.queue_depth = 32 node.session.nr_sessions = 1 node.session.auth.authmethod = CHAP node.session.auth.username = user01 node.session.auth.password = ******** node.session.auth.username_in = muser01 node.session.auth.password_in = ******** …… node.session.scan = auto node.conn[0].address = 172.24.8.72 node.conn[0].port = 3260 …… # END RECORD [root@client ~]# fdisk -l #發現的iSCSI服務器三個共享
九 格式化並掛載
9.1 格式化並掛載
注意:
1:此時能當做本地磁盤使用,分區格式化等操作;
2:可使用RAID或LVM來進行操作,LVM的可在之后格式化LV。
[root@client ~]# mkfs.ext4 /dev/sdb #格式化相關iSCSI磁盤 [root@client ~]# mkdir -p /iscsdisk/sdb01 #創建用於掛載sdd磁盤的掛載點 [root@client ~]# mkdir -p /iscsdisk/lv01 #創建用於掛載LVM分區的掛載點 [root@client ~]# mount /dev/sdb /iscsdisk/sdb01/ #可直接掛載 [root@client ~]# vi /etc/fstab #自動掛載 …… /dev/sdb /iscsdisk/lv01 ext4 defaults 0 0