Inhaltsverzeichnis

BSD Jails

Jails bieten die Möglichkeit einer leichtgewichtigen Virtualisierung. Es ist möglich den Netzwerkverkehr von Jails per VLAN zu taggen und über einen Trunk-Port auf einem Switch an die entsprechenden Router zu leiten. Nach mehreren Versuchen wurde ein erfolgreiches Setup mit FreeNAS 9.3.1 realisiert.

iocage

:!: Problem: Das Setup funktioniert derzeit nur für Unicast. Multicast-Verkehr wird in der Standard-Kernel-Konfiguration nicht an die Jails weitergeleitet. In neueren FreeBSD-Releases ist die Netzwerkvirtualisierung VIMAGE/VNET aktiv. Eventuell noch einmal damit ausprobieren!

VLANs

Auf dem Jail Host werden die VLANs in rc.conf konfiguriert. Die MTU des Parent-Inferfaces sollte erhöht werden, um Platz für den VLAN-Tag zu schaffen PCBSD-Forum :

  vlans_em0="10 20 30"
  ifconfig_em0="mtu 1530"
  ifconfig_em0_10="inet 10.0.10.2 netmask 255.255.255.0"
  ifconfig_em0_20="inet 10.0.20.2 netmask 255.255.255.0"
  ifconfig_em0_30="inet 10.0.30.2 netmask 255.255.255.0"

Anschließend wird das Netzwerk mit dem folgenden Befehl neu gestartet:

   $ /etc/rc.d/netif restart

Eventuell muss noch der VLAN Support im Kernel aktiviert werden (/boot/loader.conf) Link1, Link 2 (bin mir aber nicht sicher, ob es nicht trotzdem geht):

  if_vlan_load="YES"

Jails verwalten mit ''iocage''

Die Anleitung folgt lose den hier beschriebenen Schritten Externer Link

Herunterladen des BSD-Images des neuen Jails:

  # iocage fetch

Erzeugen des neuen Jails vlan10:

  # iocage create tag=vlan10

Hostname des Jails festlegen:

  # iocage set hostname=vlan10 vlan10

Festlegen der IPv4-Adresse:

  # iocage set ip4_addr="em0.10|10.0.10.2/24" vlan10

Festlegen des Default Gateway(funktioniert leider nur für VIMAGE, ist also nutzlos):

  # iocage set defaultrouter="10.0.10.1" vlan10
  # iocage set allow_raw_sockets=1 vlan10

Jails benutzen

Verfügbare Jails anzeigen:

  # iocage list

Mit chroot in das Datei-Verzeichnis des Jails wechseln, ohne das Jail zu starten:

  # iocage chroot UUID | TAG

Jails werden nicht automatisch gestartete (muss in rc.d konfiguriert werden).
Jail manuell starten:

  # iocage start UUID | TAG

Auf ein laufendes Jail zugreifen:

  # iocage console UUID | TAG

Jail stoppen:

 # iocage stop UUID | TAG

Jail zerstören:

 # iocage destroy UUID | TAG

iocage Dokumentation: Externer Link

Firewall konfigurieren

Die Firewall wird benötigt um die Pakete des Jail-Hosts in das richtige VLAN zu forwarden, da diese sonst teilweise im falschen VLAN landen, bzw. direkt über das Loopback-Interface zugestellt werden.

FreeNAS 9.3.1

http://gentoovps.net/install-freenas-configuration-setup/

Installation

:!: Achtung: bei der Installation von FreeNAS ist zu beachten, dass mind. 8GB RAM vorhanden sein sollten. Des weiteren ist zwingend eine zweite Festplatte nötig (Betriebssystem + Speicher). Die Installation auf einem 8GB USB-Flash-Stick hat nicht funktioniert (weder als BS, noch als Speicher). Eine USB-Festplatte als Speicher-Volume hat dann aber funktioniert.

Jails & VLANs

Die VLANs und Jails wurden über die Weboberfläche erzeugt (standardmäßig als VIMAGE). Die VIMAGEs besitzen einen kompletten eigenen Netzwerkstack, so dass separate Einstellungen (Default-Gateway, etc.) per Jail möglich werden. Insbesondere wird auch Multicast (senden und empfangen) unterstützt.

Die Jails werden auf dem Storage-Laufwerk des NAS angelegt
(gemounted unter: /mnt/StorageName/JailName)

Interfaces

Die epairXa Interfaces der Jails werden erst einmal automatisch zur Bridge0 hinzugefügt (passiert auch beim aus/einschalten eines Jails). Derzeit scheint es keine Möglichkeit der Konfiguration der Bridges über das Web-Interface zu geben. Man muss sich für die weitere Konfiguration auf die Kommandozeile begeben (bisher nicht getestet, ob das ein Reboot überlebt).

CLI-Konfiguration

Nachfolgend sind die Befehle auf der Kommandozeile dargestellt um die gewünschte Netzkonfiguration herzustellen. Das Setup benutzt 4 VLANS mit den IDs (10,20,30,40) und vier Jails VLAN_X0. Die Interfaces der Jails sollen mit den jeweiligen VLANs zusammengeschaltet werden:

Jail VLAN_10 Interface epair0a - vlan10
Jail VLAN_20 Interface epair1a - vlan20
Jail VLAN_30 Interface epair2a - vlan30
Jail VLAN_40 Interface epair3a - vlan40

- Zuerst müssen die epaiXa-Interfaces von Bridge 0 entfernt werden:

ifconfig bridge0 deletem epair0a deletem epair1a deletem epair2a deletem epair3a

- Als nächstes erhöhe ich mal vorsorglich die MTU auf dem echten Ethernet Interface (wg. der VLAN-TAGs)

ifconfig re0 mtu 1530
(ifconfig re0 up)

- Für jedes VLAN erzeugen wir jetzt eine eigene Bridge und hängen das jeweilige epairXa und VLAN-Interface dort ein (zum Beispiel für das erste Jail):

ifconfig bridge1 create
ifconfig bridge1 addm epair0a addm vlan10 
ifconfig bridge1 up
ifconfig vlan10 up

Nützliche Befehle:

jls - listet die derzeitigen Jails
jexec 4 /bin/tcsh - startet eine Shell in Jail mit ID 4