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.
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!
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"
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
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
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.
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.
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
)
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).
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
jls
- listet die derzeitigen Jails
jexec 4 /bin/tcsh
- startet eine Shell in Jail mit ID 4