[[Vorlage(Archiviert, )]]

{{{#!vorlage Wissen
[:Pakete installieren: Installation von Programmen]
[:Terminal: Ein Terminal öffnen]
[:Editor: Einen Editor öffnen]
[:sudo: Root-Rechte]
[:iSCSI:]
}}}
[[Inhaltsverzeichnis()]]

Dieser Artikel beschreibt das Bereitstellen von iSCSI-Freigaben über den Dienst '''ietd''' (iSCSI Enterprise Target) mit aus dem Paket '''iscsitarget''' (bis einschließlich Ubuntu 16.04 in ''universe'').

Alternativen Dienste, um iSCSI-Targets anzubieten, finden sich im Artikel [:iSCSI:]. 

[[Vorlage(Warnung, "'''iscsitarget''' lässt sich beim Einsatz des [:LTS_Enablement_Stacks:HWE-Kernels] nicht starten, da Kernel-Module fehlen - siehe auch [bug:1612627:]. Wenn du weißt, wie man dies beheben kann, ergänze bitte einen Abschnitt 'Problembehebung'.")]]

== Installation ==
'''iscsitarget''' mit dem Dienst '''ietd''' kann aus der Paketverwaltung installiert werden. Dazu muss das Paket

{{{#!vorlage Paketinstallation
iscsitarget, bis Ubuntu 16.04 in universe
}}}

installiert werden [1].

== Konfiguration ==
Um das Target zu aktivieren, muss die Datei '''/etc/default/iscsitarget''' folgendermaßen  geändert werden [3]:

{{{
ISCSITARGET_ENABLE=true 
}}}

=== ietd.conf ===

Die Freigaben werden in der Konfigurationsdatei '''/etc/iet/ietd.conf''' definiert [3]. Alles, was vor der Definition des ersten Target steht, sind globale Einstellungen des iSCSI-Servers. Diese sind optional. Es bestehen folgende Konfigurationsmöglichkeiten:

{{{
iSNSServer 192.168.1.16
iSNSAccessControl No

IncomingUser joe secret
OutgoingUser jack 12charsecret
}}}

`iSNSServer` gibt die IP-Adresse des [wikipedia_en:ISNS:]Servers an.

`iSNSAccessControl` gibt an ob der iSNS-Server auch die Zugriffskontrolle durchführt.

`IncommingUser joe secret` definiert einen Standardbenutzer und Passwort mit welchem sich der Initiators beim Server anmelden kann, wenn es keine anderen Target-spezifischen Angaben gibt. Hier heißt der Benutzer `joe` und benutzt das Passwort `secret` 

`OutgoingUser` definiert den Standardbenutzer welcher bei einer [wikipedia:CHAP:]-Authentifizierung verwendet würde. Hier heißt der Benutzer `jack` und benutzt das Passwort `12charsecret` 

Es kann immer nur eine Art der Authentifizierung für ein Target gelten. 


Bei der Definition eines Targets reichen im einfachsten Fall zwei Zeilen. 

Die erste gibt dem Target den Namen.

{{{
Target iqn.yyyy-mm.<reversed domain name>:identifier
}}}

wobei
 * `yyyy-mm` gibt das Ablaufdatum der Freigabe an. Das Format ist das Jahr gefolgt von dem Monat z.B 2010-04 für den April des Jahres 2010.
 * `<reversed domain name>` muss durch den Hostname ersetzt werden. in einem privaten Netz kann er fast beliebig gewählt werden. Im Beispiel wird `com.example` benutzt.
 * `identifier` kann durch einen beliebigen Namen ersetzt werden. Im der Beispielkonfiguration wird `storage.lun1` verwendet

Dies sieht dann z.B. so aus

{{{
iqn.2010-04.com.example:storage
}}}

Die zweite gibt den Pfad zum Speichermedium an und die Art der Freigabe 

{{{
Lun 0 Path=/dev/sda3,Type=fileio
}}}

Bei `Path` muss der vollständige Pfad zu Freigabe angegeben werden, z.B.:

{{{
/dev/sda2
/dev/md0
/dev/vg0/storage-lun1
...
}}}

Der Type `fileio` kann eigentlich immer benutzt werden. Der Type `blockio` umgeht den Linux Page-Cache und reicht somit die Zugriffe direkt auf das Gerät weiter - dies verspricht mehr Geschwindigkeit bei Blöcken, welche größer als 64k sind.

Danach können weitere optionale Angaben gemacht werden: 
        
{{{
        Alias Test       
        IncomingUser joe secret
        OutgoingUser jim 12charpasswd
}}}

wobei
 * `Alias` damit kann man einen Alias Namen für das Target definieren, hier heisst dieser `Test`.
 * `IncomingUser joe secret` definiert ein Benutzer und Passwort, mit welchem sich der Initiator beim Server anmelden kann. Wenn man nach `IncomingUser` keinen Benutzer angibt, kommen die Globaleneinstellungen zu tragen. Ist dort ebenfalls kein Benutzer definiert, ist keine Authentifizierung notwendig, um auf das Target zuzugreifen.
 * `OutgoingUser` definiert einen Benutzer, welcher bei einer [wikipedia:CHAP:] Authentifizierung verwendet würde. Wenn keine Angaben nach `OutgoingUser` gemacht werden, kommen die Globaleneinstellungen zu tragen.

=== initiators.allow ===
Verbindungen auf die Freigabe müssen nun noch erlaubt werden. Hierzu muss in der Datei '''/etc/iet/initiators.allow'''[3] eine Zeile hinzu gefügt werden. Diese beginnt mit dem Namen der Freigabe, gefolgt von der IP-Adresse des Clients, von welchem man darauf zugreifen will.

[[Vorlage(Warnung,"Die Zeile: ALL ALL sollte nur zum Testen der Konfiguration unkommentiert bleiben, da sich sonst jeder mit dem Target verbinden kann.")]]


{{{
[...]
iqn.2010-04.com.example:storage 192.168.0.100
}}}

wobei

 * `iqn.2010-04.com.example:storage` der Name der Freigabe ist
 * `192.168.0.100` die IP-Adresse des Clients ist, welcher darauf zugreifen soll.

Es können auch mehrere IP-Adressen angegeben werden, diese müssen dann durch ein `,` getrennt werden. Um den Zugriff von allen Clients zu erlauben, kann die IP durch ein `ALL` ersetzt werden.  IPv6 Adressen sind ebenfalls zugelassen. Wenn die Konfigurationsdateien angepasst wurde, muss das das Target neu gestartet werden, um die Änderungen wirksam zu machen. Dies geschieht in einem Terminal-Fenster [2] mit:

{{{#!vorlage Befehl
sudo service iscsitarget restart
}}}


= LUN-Files-erzeugen =

Wie man Files für die Freigabe erzeugt, ist im Artikel [:iSCSI/#LUN-Files-erzeugen:] beschrieben.

Um die Datei nutzen zu können, muss sie in der '''/etc/iet/ietd.conf''' noch als Freigabe eingetragen werden.


= Links =

 * [https://www.howtoforge.com/using-iscsi-on-ubuntu-9.04-initiator-and-target howtoforge] {en}
 * [wikipedia_en:iSCSI:]
 * [https://www.pug.org/mediawiki/index.php/ISCSI_unter_Debian iSCSI unter Debian] {de}
 * [sourceforge2:iscsitarget:iSCSI Enterprise Target] {en}
 * [https://blog.is-a-geek.org/iscsi-target-auf-ubuntu-server-erstellen-und-in-windowslinux-einbinden chalblog] {de}

# tag: Netzwerk, System, Server