iSCSI Initiator und Target unter Ubuntu 10.04LTS einrichten

iSCSI steht für "internet Small Computer System Interface" und von der Funktionsweise kann es sich wie SCSI nur über ein TCP/IP Netzwerk vorgestellt werden. Ein Vorteil gegenüber Netzwerkprotokollen wie NFS oder Samba ist, dass es als blockorientiertes Gerät auf dem Ziel Computer zur Verfügung steht und somit wie eine eingebaute Festplatte angesprochen werden kann. Im folgenden wird beschrieben, wie es unter Ubuntu 10.04 eingerichtet wird.

Allgemein

Als Target wird der Host bezeichnet, auf dem die physische Festplatte oder ein Bandlaufwerk zur Verfügung gestellt wird. Im Gegenzug dazu wird der Host, der die zur Verfügung gestellte Festplatte einbindet und die Kommunikation steuert Initiator genannt.

In den folgenden Abschnitten wird zwischen den beiden Hosts unterschieden. Diese haben folgende Eigenschaften.

  • Target: target.example.org/10.0.0.1
  • Initiator: initiator.example.org/10.0.0.2

Zunächst wird der Host eingerichtet, der als Target agieren soll und anschließend der, der als Initiator dient.

Einrichtung: Target

Bevor mit der Konfiguration begonnen werden kann muss das Paket "iscsitarget" installiert werden. Dies kann wie folgt geschehen:

$ sudo apt-get install iscsitarget

Anschließend muss die Datei /etc/default/iscsitarget bearbeitet und dabei ISCSITARGET_ENABLE auf den Wert "true" gesetzt werden. Die sieht dann wie folgt aus:

ISCSITARGET_ENABLE=true

Als physikalischer Speicher wird ein RAID Verbund mit dem Namen /dev/md3 verwendet. Um diesen Speicher per iSCSI zur Verfügung zustellen, muss die Datei /etc/ietd.conf bearbeitet werden. Wurde die Datei noch nicht bearbeitet sind in ihr einige Beispiel zur Konfiguration gegeben, die meisten dieser Einstellungen sollten standardmäßig auskommentiert sein und bieten erfahrenen Benutzern die Möglichkeit zum Feintuning. Die Datei kann mit den wichtigsten Einstellungen um einen beachtlichen Anteil gekürzt werden und sieht dann in etwas so aus:

Target iqn.2010-11.org.example.target:storage.example
    Lun 0 Path=/dev/md3,Type=fileio

Achtung: Der Zugang ist im Moment noch nicht durch ein Passwort gesichert. Dies sollte jedoch unbedingt geschehen. Wie dies geht wird später beschrieben.

Der Name des Target muss eindeutig sein. Dafür wird vom iSCSI Standard der so genannte "iSCSI Qualified Name" kurz iqn verwendet. Dieser wird wie folgt definiert: "iqn.yyyy-mm.<reversed domain name>[:identifier]". Dabei steht yyyy-mm für das Jahr und den Monat, typischerweise wird hier das Datum der Erstellung verwendet. "<reversed domain name>" ist wie der Name schon sagt, der umgekehrte Domainnahme. Zum Schluss kann noch ein Identifier kommen.

Anschließend muss dem Initiator noch der Zugriff gewehrt werden. Dies wird erreicht, indem er in die Datei /etc/initiators.allow eingetragen wird. Für Testzwecke können Verbindungen von allen Initiatorn erlaubt werden. Dies wird erreicht, indem die Datei wie folgt angepasst wird.

ALL ALL

Achtung: Für eine höhere Sicherheit im produktiv Betrieb ist es natürlich besser den Initiator direkt einzutragen. Dies könnte dann wie folgt aussehen

iqn.2010-11.org.example.target:storage.example 10.0.0.2

Jetzt kann der Dienst neu gestartet werden:

$ sudo service iscsitarget restart

Einrichtung: Initiator

Auf dem Initiator muss das Paket open-iscsi installiert werden. Dies kann wie folgt geschehen.

$ sudo apt-get install open-iscsi

Damit beim nächsten Startvorgang die iSCSI Geräte automatisch gestartet werden, bietet es sich an den Wert node.startup in der Datei /etc/iscsi/iscsid.conf auf automatic zusetzen. Dies sieht dann wie folgt aus.

...
node.startup = automatic
...

Anschließend kann der Dienst wie folgt neu gestartet werden:

$ sudo service open-iscsi restart

Jetzt kann mit dem Einbinden der eigentlichen iSCSI-Geräte begonnen werden. Dazu muss zunächst ein Discover(Entdecken) durchgeführt werden. Hier für wird das Programm iscsiadm wie folgt aufgerufen und führt zu einer der hier dargestellten sehr ähnlichen Ausgabe

$ sudo iscsiadm -m discovery -t st -p 10.0.0.1
10.0.0.1:3260,1 iqn.2010-11.org.example.target:storage.example

Anschließend kann die Verbdinung mit dem Target aufgebaut werden. Achtung: Dies funktioniert nur, wenn vorher das Discover das entsprechende iSCSI-Gerät erkannt hat.

$ sudo iscsiadm -m node --targetname "iqn.2010-11.org.example.target:storage.example" --portal "10.0.0.1:3260" --login
Logging in to [iface: default, target: iqn.2010-11.org.example.target:storage.example, portal: 10.0.0.1,3260]
Login to [iface: default, target: iqn.2010-11.org.example.target:storage.example, portal: 10.0.0.1,3260]: successful

Achtung: Wird ein Nutzername und ein Passwort verwendet, dann müssen noch ein paar Schritte mehr ausgeführt werden. Dazu jedoch später mehr.

Ob der Vorgang erfolgreich war kann zum Beispiel über den Befehl dmesg nachgeprüft werden. Die Ausgabe sieht dann wie folgt aus. Festzustellen ist, dass es ein neues Gerät sdd gibt, auf dem jedoch noch keine Partitionstabelle vorhanden ist.

$ dmesg
[963549.167983] scsi8 : iSCSI Initiator over TCP/IP
[963549.429181] scsi 8:0:0:0: Direct-Access     IET      VIRTUAL-DISK     0    PQ: 0 ANSI: 4
[963549.429482] sd 8:0:0:0: Attached scsi generic sg3 type 0
[963549.432327] sd 8:0:0:0: [sdd] 3770487296 512-byte logical blocks: (1.93 TB/1.75 TiB)
[963549.432794] sd 8:0:0:0: [sdd] Write Protect is off
[963549.433620] sd 8:0:0:0: [sdd] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA
[963549.434834]  sdd: unknown partition table
[963549.438440] sd 8:0:0:0: [sdd] Attached SCSI disk

Wird statt dem Parameter "--login" der Parameter "--logout" verwendet, wird sich wieder vom iSCSI Target abgemeldet. Dies sieht dann so oder so ähnlich aus.

$ sudo iscsiadm -m node --targetname "iqn.2010-11.org.example.target:storage.example" --portal "10.0.0.1:3260" --logout

Partitionierung

Bevor die über iSCSI auf dem Initiator eingebundene Festplatte verwendet werden kann muss sie vom Initiator aus partitioniert werden. Dazu kann zum Beispiel über die Konsole das Programm fdisk oder über die grafische Oberfläche das Programm gparted verwendet werden.

Mit gparted kann auch gleich das Dateisystem auf den/der Partition(en) erzeugt werden. Bei der Verwendung von fdisk ist dazu anschließend noch ein Tool wie mkfs.ext4 notwendig. Mit fdisk und mkfs.ext4 könnte der Vorgang wie folgt aussehen.

$ sudo fdisk /dev/sdd
[...]
Befehl (m für Hilfe): n <--
[..]
Befehl  Aktion
   e      Erweiterte
   p      Primäre Partition (1-4)
p <--
Partitionsnummer (1-4): 1 <--
[... Angabe der Größe ...]
Befehl (m für Hilfe): t <--
Partitionsnummer (1-4): 1 <--
Hex code (L um eine Liste anzuzeigen): 83 <--
Befehl (m für Hilfe): w <--

Anschließend muss dass Dateisystem erzeugt werden.

$ sudo mkfs.ext4 /dev/sdd1

Ist dies alles geschafft kann die neue Partition eingebunden werden.

$ sudo mount /dev/sdd1 /mnt

Anschließend kann die eingebundene Festplatte wie eine im Computer eingebaute verwendet werden.

Sicherheit

Die Frage zu den richtigen Sicherheitsmaßnamen lässt sich immer nur schwer beantworten. Es ist wie immer natürlich auch von der jeweiligen Struktur des Netzwerks und anderen Faktoren abhängig.

Es bietet sich aber auf jeden Fall an ein Passwort zu verwenden. Hier zu muss die Datei /etc/ietd.conf auf dem Target wie folgt erweitert werden.

Target iqn.2010-11.org.example.target:storage.example
    Lun 0 Path=/dev/md3,Type=fileio
    IncomingUser nutzer passwort

Anschließend muss der Dienst neu gestartet werden. Dies kann mit folgendem Befehl geschehen:

$ sudo service iscsitarget restart

Anschließend muss der Nutzername und das Passwort auch auf dem Initiator eingetragen werden. Dazu wird beim Login wie folgt vorgegangen:

$ sudo iscsiadm -m node --targetname "iqn.2010-11.org.example.target:storage.example" --portal "10.0.0.1:3260" --op=update --name node.session.auth.authmethod --value=CHAP
$ sudo iscsiadm -m node --targetname "iqn.2010-11.org.example.target:storage.example" --portal "10.0.0.1:3260" --op=update --name node.session.auth.username --value=nutzer
$ sudo iscsiadm -m node --targetname "iqn.2010-11.org.example.target:storage.example" --portal "10.0.0.1:3260" --op=update --name node.session.auth.password --value=passwort
$ sudo iscsiadm -m node --targetname "iqn.2010-11.org.example.target:storage.example" --portal "10.0.0.1:3260" --login

Neben dem "IncomingUser" kann auch ein "OutgoingUser" festgelegt werden. Neben diesen Techniken können natürlich noch weitere zum Einsatz kommen. Vorstellbar wären zum Beispiel noch VLANs oder IPsec.

Verwandte Artikel