FreeNAS is een populair open source besturingssysteem om een NAS mee te maken. Minder bekend is dat een FreeNAS-machine ook als virtualisatieserver is te gebruiken. Dat kan met jails en zelfs met VirtualBox.

Als liefhebber van open source software heb je wellicht FreeNAS (www.freenas.org) op je NAS draaien. FreeNAS is gebaseerd op FreeBSD en is een geavanceerd besturingssysteem voor een NAS, inclusief het next-generation bestandssysteem ZFS, snapshots, encryptie, boot environments, plug-ins en een gebruiksvriendelijke webinterface.

Ook voor virtualisatie bestaan er gespecialiseerde besturingssystemen, zoals Proxmox Virtual Environment (www.proxmox.com/en/proxmox-ve). Als je echter geen speciale virtualisatievereisten hebt en toch al FreeNAS hebt draaien, dan is het een kleine moeite om van de virtualisatiemogelijkheden van FreeNAS gebruik te maken.

FreeNAS maakt voor zijn virtualisatie gebruik van jails. Jails is FreeBSD’s beproefde recept voor containers (het nieuwste modewoord in virtualisatieland). Een jail kun je beschouwen als een onafhankelijke installatie van FreeBSD, die op je computer draait, maar dan zonder de overhead van virtualisatie. Het besturingssysteem in de jail maakt gebruik van de kernel van je gastbesturingssysteem (in dit geval dus FreeNAS). Jails zijn dan ook een voorbeeld van operating-system virtualization. Dat in tegenstelling tot volledige virtualisatie, waar het gastbesturingssysteem een eigen kernel draait.

Extra functionaliteit dankzij jails

Maar waarom zou je jails gebruiken op FreeNAS? Allereerst, omdat het niet de bedoeling is dat je op FreeNAS zelf extra software installeert. Stel dat je de editor vim wilt gebruiken om tekstbestanden op je NAS aan te passen, dan zul je merken dat FreeNAS geen vim heeft. Wil je de editor installeren met pkg install vim, dan krijg je een cryptische foutmelding, omdat FreeNAS geen repository’s geconfigureerd heeft.

 

Extra software installeren doe je niet in FreeNAS zelf, maar in een jail. Het is daarom aan te raden om minstens één jail aan te maken op FreeNAS, waarin je wat tools installeert die je graag gebruikt op je NAS, zoals een editor of bepaalde beheertools. Hou er wel rekening mee dat je die jail dan wel toegang moet geven tot datasets die je wilt gebruiken, want standaard is een jail volledig geïsoleerd.

Een andere reden om jails te gebruiken is als je serversoftware op je NAS wilt draaien. Je wilt niet dat je per ongeluk door extra software te installeren en te configureren je NAS in de soep laat lopen. Serversoftware draai je dus altijd in een jail. Overigens bevat FreeNAS standaard al allerlei serversoftware, die eenvoudig via de webinterface te configureren is. Dit kan onder andere voor CIFS, FTP, NFS, rsync, WebDAV en nog veel meer. Bovendien bieden plug-ins (zie het kader) nog extra software aan.

Plug-ins

FreeNAS kent een systeem van plug-ins, waarmee je de functionaliteit van je NAS uitbreidt. Zo zijn er plug-ins voor Transmission, Plex Media Server, ownCloud, Firefly, Bacula en BTSync. Installeer je een plug-in in het tabblad “Plugins” van FreeNAS, dan maakt FreeNAS een afzonderlijke jail aan, waarin die toepassing geïnstalleerd wordt. Dat garandeert dat elke toepassing die je als plug-in in FreeNAS installeert, volledig geïsoleerd is van de andere toepassingen en van het basisbesturingssysteem, zodat bij een beveiligings- of configuratiefout de impact tot de plug-in beperkt blijft. FreeNAS staat niet toe om meerdere plug-ins in dezelfde jail te installeren. Wil je dat wel, dan moet je zelf een jail creëren en daarin de gewenste software installeren. Plug-ins bieden dus een gebruiksvriendelijker interface bovenop jails, terwijl jails flexibeler in te zetten zijn, maar wel beheer op de commandline vereisen.

 

Globale jailconfiguratie

In deze workshop maken we gebruik van FreeNAS 9.3. Voor we jails aanmaken, hebben we een dataset nodig waarin de jails komen. Heb je al eens een plug-in geïnstalleerd, dan bestaat die dataset al. In het andere geval selecteer je in het tabblad Storage een dataset en klik je dan onderaan op het knopje Create Dataset om daarin een dataset voor je jails aan te maken. Geef je dataset een naam (bijvoorbeeld jails) en klik op Add Dataset.

Daarna brengen we de globale configuratie van het jailssysteem in orde. Open het tabblad Jails en dan Configuration. Vul bij Jail Root de dataset in, die je zojuist aangemaakt hebt. Vink IPv4 DHCP aan als je wilt dat je jails een IP-adres via DHCP toegekend krijgen van de DHCP-server op je netwerk. Wil je statische adressen gebruiken, klik dan op Advanced Mode. Voer je netwerkmask in (bijvoorbeeld 192.168.1.0/24 voor adressen van 192.168.1.0 tot en met 192.168.1.255) en het begin- en eindadres dat je aan je jails wilt toekennen. Gebruik je een DHCP-server op je netwerk, let dan wel op dat die de adressen in dit bereik niet aan andere machines uitdeelt. Klik tot slot op Save om de configuratie op te slaan.

 

Jails aanmaken

Om een jail aan te maken, klik je in het tabblad Jails > Jails op Add Jails. In de Basic Mode hoef je alleen maar een naam voor je jail te geven. Is je jail root dataset bijvoorbeeld /mnt/data/jails, dan wordt een jail met naam test opgeslagen in /mnt/data/jails/test. Als je in de globale jailconfiguratie voor DHCP hebt gekozen, dan hoef je voor de rest niets meer in te vullen en klik je op OK. In de Advanced Mode kun je zelf een IP-adres ingeven, voor de VIMAGE-optie kiezen om de jail een eigen gevirtualiseerde netwerkstack te geven, speciale sysctl-waardes in te geven en meer.

Nadat je de jail aangemaakt hebt, wordt deze automatisch opgestart, tenzij je dat gedrag in de geavanceerde modus hebt uitgeschakeld. In het tabblad Jails > Jails krijg je de jail nu te zien met zijn IP-adres, of de jail automatisch met het booten start, zijn huidige status (Running) en type (standard). Selecteer je de jail, dan kun je met de knopjes onderaan de eigenschappen aanpassen, storage toevoegen, de jail stoppen, een shell in de jail openen en de jail verwijderen.

Toegang tot de jail

Klik je op het shellicoontje wanneer je een jail hebt geselecteerd, dan krijg je in de webinterface van FreeNAS een shellvenster te zien. Je bent hier ingelogd als root in de jail en kunt zo opdrachten in de jail uitvoeren. Met

 

ps auxwww

krijg je te zien dat de jail standaard alleen dhclient, syslogd, cron en de shell csh draait. Met exit of CTRL+D verlaat je de shell. De jail blijft dan overigens gewoon draaien.

Wil je ook van buiten de webinterface van FreeNAS op de jail kunnen inloggen, dan heb je verschillende mogelijkheden. Ofwel configureer je de SSH-server in de jail en maak je een gebruiker aan, zodat je rechtstreeks op je jail via SSH kunt inloggen. Dat moet je dan doen voor elke jail, die je van buitenaf wilt bereiken. Ofwel log je eenvoudigweg via SSH op FreeNAS in en start je een shell in de jail. Bekijk daarvoor eerst de lijst met jails:

 

 

jls

 

Kijk daarin welk ID de gewenste jail heeft en voer een shell uit met jexec:

 

 

jexec 1 csh

 

Software installeren

Als je jail klaar is, kun je er software in installeren. Dat gaat het eenvoudigste met de opdracht pkg:

 

pkg install vim

 

De opdracht installeert dan het gevraagde pakket en zijn dependencies in /usr/local. Met pkg info krijg je te zien welke pakketten er geïnstalleerd zijn en met pkg info pakketnaam krijg je allerlei informatie over een specifiek geïnstalleerd pakket te zien, waaronder een beschrijving, de gebruikte libraries en de configuratieopties bij het bouwen.

Je kunt in de jail ook software installeren door ze zelf te compileren. FreeNAS biedt daarvoor het FreeBSD ports systeem aan. Meestal is dat alleen aan te raden als je de software met andere configuratieopties wilt bouwen dan bij de binaire installatie met pkg install gebeurt. Het resultaat na het compileren is hetzelfde: het binaire pakket wordt geïnstalleerd en is dus ook in de pakketdatabase te vinden met pkg info.

Als je serversoftware geïnstalleerd hebt, installeert het pakket meestal een voorbeeldconfiguratiebestand in /usr/local/etc of een subdirectory met de naam van het pakket, evenals een opstartscript in /usr/local/etc/rc.d. Vul eerst het configuratiebestand in. Daarna voeg je aan /etc/rc.conf een regel toe, die zorgt dat de service automatisch start samen met de jail. Meestal ziet die er als volgt uit:

 

pakketnaam_enable=”YES”

 

Herstart je daarna de jail in de webinterface van FreeNAS, dan start als alles goed gaat ook de service in de jail op. Indien niet, zoek dan in het bestand /var/log/messages (in de juiste jail!) naar foutmeldingen die naar de oorzaak wijzen.

Storage toevoegen

Standaard is een jail volledig geïsoleerd van FreeNAS. In de jail heb je dus geen toegang tot de bestanden, die je op FreeNAS opgeslagen hebt. En jails hebben ook geen toegang tot elkaars bestanden. Voor sommige serversoftware heb je dat misschien wel nodig. Je downloadt bijvoorbeeld in één jail ISO-bestanden van Linux-distributies met Transmission, die je in een andere jail wilt gebruiken om virtuele machines via VirtualBox van op te starten. Wat je dan kunt doen, is in beide jails een dataset van de NAS te mounten.

Voor je de dataset mount, moet je altijd eerst nadenken over de benodigde permissies. Kijk na welke gebruikers- en groepsnaam de toepassing in de jail gebruikt. Maak in het tabblad Account eerst een groep en dan een gebruiker aan met dezelfde naam en dezelfde GID (Group ID) of UID (User ID). Beide ID’s komen doorgaans overeen met het poortnummer dat de servertoepassing gebruikt. Voor de meeste toepassingen kun je als home directory /var/empty of /nonexistent ingeven en als shell /usr/sbin/nologin.

Open dan het tabblad Storage en selecteer de dataset, die je in je jail wilt mounten. Creëer eventueel een nieuwe dataset als ze nog niet bestaat. Klik daarna onderaan op het knopje Change Permissions. Vul de naam in van de gebruiker en groep, die je hiervoor hebt aangemaakt en geef de benodigde lees- en schrijfrechten. Klik op Change om de permissies in te stellen.

Selecteer daarna in het tabblad Jails de gewenste jail en klik onderaan op het knopje Add Storage. Bij Source vul je de directory of dataset op je NAS in, die je in de jail wilt mounten. Let op: die directory mag niet in de Jail Root dataset liggen! Bij Destination vul je een bestaande of niet-bestaande lege directory in de jail in. Als Create directory aangevinkt is, wordt de directory indien nodig aangemaakt. Vink eventueel Read-Only aan als je de jail geen schrijfrechten wilt geven.

VirtualBox in een jail

Sinds versie 9.2.1.7 biedt FreeNAS ook een VirtualBox-jail aan. Je draait dan de virtualisatiesoftware VirtualBox headless (dus zonder de grafische interface, die je normaal op je desktop draait) in een jail op je FreeNAS-server. Via de webinterface phpVirtualBox stuur je dan VirtualBox aan en creëer en beheer je virtuele machines op je NAS. Het display van je virtuele machines krijg je te zien in de webinterface of via een VNC-viewer. Via deze methode draai je dus probleemloos een Linux-distributie, Windows of elk ander besturingssysteem dat door VirtualBox ondersteund is op je NAS.

Maak een nieuwe jail aan en klik op Advanced Mode. Kies bij Template voor de VirtualBox-template. Vul eventueel de netwerkgegevens in en klik tot slot op OK om de jail aan te maken. Als de jail draait, surf je in je webbrowser naar het IP-adres van de jail (dat is zichtbaar in de lijst met jails). Vul als gebruikersnaam en wachtwoord admin in. Daarna krijg je in je browser een interface te zien, die bijna identiek is aan VirtualBox op de desktop.

Om nu virtuele machines te kunnen starten, mount je het best eerst een directory met ISO-images van je NAS in de VirtualBox-jail. Volg daarvoor de instructies eerder in deze workshop. Read-only toegang is voldoende. Klik daarna op de knop New om een nieuwe virtuele machine aan te maken. Dat verloopt op dezelfde manier als in de desktopversie van VirtualBox. Geef je VM een naam, type en versie (waarbij je erop let dat je 32-bit of 64-bit kiest, afhankelijk van het ISO-bestand), ken een hoeveelheid RAM toe en creëer of gebruik tot slot een virtuele harde schijf.

 

Virtuele machine starten

De virtuele machine is nu in de interface van phpVirtualBox toegevoegd. Selecteer ze en klik op Settings om nog wat instellingen aan te passen of klik op Start om de virtuele machine op te starten. De eerste keer vraagt VirtualBox om een opstartschijf te kiezen. Navigeer dan naar de directory met ISO-bestanden die je net gekoppeld hebt, kies het gewenste ISO-bestand en klik op Start.

Als de virtuele machine opgestart is, klik je rechtsboven op Console om het display van de virtuele machine te zien. Dat werkt via de IcedTea-Web plug-in. Als de ingebouwde VNC-client om een wachtwoord vraagt, hou dit dan leeg. Klik in het display van de virtuele machine en installeer je geliefde distributie. Ook met een VNC-client op je desktop kun je het display bekijken.

 

Automatisch starten

Wil je bepaalde virtuele machines, die je in de VirtualBox-jail hebt geïnstalleerd, automatisch laten draaien wanneer je FreeNAS-machine gereboot is, dan moet je nog wat configuratiewerk uitvoeren. Open een shell in de VirtualBox-jail en open het bestand /etc/rc.conf:

 

 

nano /etc/rc.conf

 

Voeg hieraan de volgende regels toe:

 

 

vboxnet_enable=”YES”
vboxheadless_enable=”YES”
vboxheadless_machines=”jessie vivid”

 

Dit in de veronderstelling dat je de virtuele machines jessie en vidid automatisch wilt opstarten. Definieer nu voor elke virtuele machine in die lijst de naam, die je ze in VirtualBox gegeven hebt, de gebruikersnaam waaronder de virtuele machine draait en de actie die VirtualBox moet uitvoeren wanneer FreeNAS uitgeschakeld wordt:

vboxheadless_jessie_name=”Debian Jessie”
vboxheadless_jessie_user=”vbox”
vboxheadless_jessie_stop=”savestate”

Uiteraard moet daarvoor ook de autostart-optie van de VirtualBox-jail aangevinkt zijn in de eigenschappen van de jail.

Tot slot

FreeNAS is geen volwaardige virtualisatieserver, zoals Proxmox Virtual Environment, maar als je het besturingssysteem toch al op een NAS hebt draaien, is het wel flexibel genoeg om er jails of virtuele machines op te draaien zonder dat je extra hardware of software nodig hebt. Lees zeker ook de documentatie van FreeNAS (http://doc.freenas.org) en het FreeBSD Handbook (www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/) eens na als je verder in de mogelijkheden wilt duiken. FreeBSD en bij extensie ook FreeNAS is immers een krachtig en veelzijdig besturingssysteem.