« | »

2009年3月9日

solarisでCHAP 認証つきのiSCSIターゲットをZFSで作る

前に買ったノートPCのディスク容量が少ないので、家にいる間は家庭内サーバーのSolarisからiSCSIディスクをマウントして使っている。
SolarisでiSCSIターゲットを使う方法はネット上に結構沢山の情報があるのだが、実際の使用というよりもテストを想定して書かれたドキュメントが多く、私が探した限りマウントの際に認証をかける方法は見つからなかった。
ということで、solarisで認証つきのISCSIターゲットを構成し、WindowsクライアントをISCSIイニシエーターとして利用する方法を書いてみる。
概要:
とりあえずWindows XP にMicrosoft iSCSI initiatorが入っているのを前提に、
SolarisのストレージプールからZFSボリュームを割り当て、そのボリュームをiSCSIターゲットとして公開し、iSCSIイニシエーターのノード名とCHAP認証でアクセス制限をかける。
ところを書いてみる。


iscsitgtデーモンの動作確認

# svcs -a|grep iscsitgt
disable 14:22:20 svc:/system/iscsitgt:default
動いてなけれれば動かしてやる
# svcadm enable iscsitgt
# svcs -a|grep iscsitgt
online 14:22:20 svc:/system/iscsitgt:default

なければDVDから追加

# cd /cdrom/sol_10_1008_x86/Solaris_10/Product/
# /usr/sbin/pkgadd -d . SUNWiscsitgtu SUNWiscsitgtr
SUNWiscsitgtr SUNWiscsitgtrの二つのパッケージが必要
# pkginfo |grep iscsitgt
system SUNWiscsitgtr Sun iSCSI Target (Root)
system SUNWiscsitgtu Sun iSCSI Target (Usr)

ZFSで利用するストレージプールの作成

Solaris10 u6 10/08以上だとインストール時にrootファイルシステムをZFSにすることができるが、その場合はすでにストレージプールがあるので、あえて作る必要はない。
ZFSrootがある場合、ストレージプールがあることを確認
rpoolなるストレージプールがあるのを確認。
# zpool list
NAME SIZE USED AVAIL CAP HEALTH ALTROOT
rpool 27.8G 4.63G 23.1G 16% ONLINE -
ZFSのプール元とマウント先のリストはこんな感じ
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
rpool 4.85G 22.5G 46K /rpool
rpool/ROOT 3.86G 22.5G 18K legacy
rpool/ROOT/s10x_u6wos_07b 3.86G 22.5G 3.86G /
rpool/dump 496M 22.5G 496M -
rpool/export 43K 22.5G 21K /export
rpool/export/home 22K 22.5G 22K /export/home
rpool/swap 512M 22.7G 291M -
プールがひとつもない人はとりあえず作ってみる、4ギガのファイルをストレージプールとする。
# mkfile 4g /export/pool.iscsi.4g
# zpool create rpool /export/pool.iscsi.4g

iSCSI Target が Initiator に提供する領域の管理に使われるbacking store ディレクトリを指定する。
/export/iscsiに作る場合、mkdir /export/iscsiなどとしてディレクトリを作ればいいのだが、
rpool/iscsi/以下にTargetを作る予定なので、rpool/iscsiとプールを作り、それを/export/iscsiとしてZFSでファイルシステムとしてマウントして割り当ててみる。

プールを作る
# zfs create rpool/iscsi
rpool/iscsiがあるのを確認
# zfs list|grep iscsi
rpool/iscsi 18K 22.5G 18K /rpool/iscsi
デフォルトではrpool/iscsiは/rpool/iscsiにマウントされているのでこれを/export/iscsiにマウントしなおす
# zfs set mountpoint=/export/iscsi rpool/iscsi
rpool/iscsi が /export/iscsiにマウントされているのを確認
# zfs list|grep iscsi
rpool/iscsi 18K 22.5G 18K /export/iscsi
ディレクトリができたので、これをiSCSI backing storeディレクトリとして指定する。
# iscsitadm modify admin -d /export/iscsi/
Base Directoryが /export/iscsi になっているのを確認
# iscsitadm show admin
iscsitadm:
Base Directory: /export/iscsi
CHAP Name: Not set
RADIUS Access: Not set
RADIUS Server: Not set
iSNS Access: Not set
iSNS Server: Not set
Fast Write ACK: Not set

ストレージプールから、2ギガのemulated volumeであるrpool/iscsi/vol1 を作る。このボリュームがISCSIで提供されるディスクになる

# zfs create -V 2gb rpool/iscsi/vol1
ちゃんとできたか確認
# zfs list|grep rpool/iscsi
rpool/iscsi 2.00G 20.5G 18K /export/iscsi
rpool/iscsi/vol1 2G 22.5G 16K -
typeがvolumeになっていないとiSCSI Targetにならないので注意
# zfs get all rpool/iscsi/vol1|grep type
rpool/iscsi/vol1 type volume -

プール上にZFSで作ったボリューム rpool/iscsi/vol1をISCSIターゲットとして共有する。

# zfs set shareiscsi=on rpool/iscsi/vol1
確認する。Statusがonlineになっていればよい。
# iscsitadm list target -v
Target: rpool/iscsi/vol1
iSCSI Name: iqn.1986-03.com.sun:02:f4bbec4f-22aa-ed01-a19c-d077c5826e05
Alias: rpool/iscsi/vol1
Connections: 0
ACL list:
TPGT list:
LUN information:
LUN: 0
GUID: 0x0
VID: SUN
PID: SOLARIS
Type: disk
Size: 2.0G
Backing store: /dev/zvol/rdsk/rpool/iscsi/vol1
Status: online

この状態ですでにiscsi target になってっているので誰にでも公開する場合はこのままでよいが、一応特定イニシエーターのみに対してユーザー名とパスワードのセットで認証するchap認証をつけてみる。

まず自ホストのchap usernameを設定、ホスト名にしておく
# iscsitadm modify admin -H zfstest
自ホストのchapシークレットを設定 12から16文字の間らしい
# iscsitadm modify admin -C
Enter secret: xxxxxx
Re-enter secret: xxxxxx
イニシエータオブジェクトをノード名を指定して作成、iqn.1991-05.com.microsoft:client1をclient1として扱う
# iscsitadm create initiator -n iqn.1991-05.com.microsoft:client1 client1
rpool/iscsi/vol1のアクセスリストに イニシエーターオブジェクトclient1を追加
#iscsitadm modify target -l client1 rpool/iscsi/vol1
この時点でiqn.1991-05.com.microsoft:client1にしかrpool/iscsi/vol1が見えなくなっているが、さらにchap認証を追加する場合は以下を実行する
イニシエータオブジェクトに対してchapユーザー名を指定 ユーザー名はiqn.1991-05.com.microsoft:client1
# iscsitadm modify initiator -H iqn.1991-05.com.microsoft:client1 client1
イニシエータオブジェクトに対してchapパスフレーズを指定
# iscsitadm modify initiator -C client1
これでTarget rpool/iscsi/vol1がイニシエーターノード名iqn.1991-05.com.microsoft:client1 からchapユーザー名iqn.1991-05.com.microsoft:client1 とchapパスフレーズを使って利用できる。

という感じでSolarisでiSCSIターゲットを利用することが出来るようになったけど、もうこれを利用しない場合などでボリュームやターゲットを削除したい場合は以下のコマンドを実行して消す。

ボリューム削除
# zfs destroy rpool/iscsi/vol1
Target削除
#iscsitadm delete target -u [削除したいlun番号] [ターゲット名]

という感じ。

Trackback URL

Comment & Trackback

No comments.

Comment feed

Comment





XHTML: You can use these tags:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>