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
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