Erfahrungen mit vnet / VIMAGE in produktiven Einsatz

Wie ist deine Meinung zu vnet / VIMAGE?

  • Nie Aussetzer gehabt und easy einzurichten

  • Nie Aussetzer gehabt, aber fummelig einzurichten

  • Gabs Aussetzer ein bis zwei mal, dafür aber easy einzurichten

  • Gabs Aussetzer ein bis zwei mal und fummelig einzurichten

  • Gelegentliche Aussetzer, aber easy einzurichten

  • Gelegentliche Aussetzer und fummelig einzurichten


Die Ergebnisse sind erst nach der Abstimmung sichtbar.

satriani

SysLion
Hi liebe Leute,

es steht mir ein umfangreiches Projekt bevor.
Jail-1: Datenbank PostgreSQL
Jail-2: Service - Python-Instances
Jail-3: Fileserver SFTP
Jail-4 bis Jail-8: Webserver mit API für unterschiedliche Einsatzzwecke

Jede Jail von 4 bis 8 bekommt jeweils eigene Zugangsdaten zu Jails 1 bis 3, wobei diese nicht miteinander kommunizieren dürfen. Das ganze läuft zuerst auf einen Server bei Hetzner.

Ich hab zwar mit vnet / VIMAGE, vor ca. 3 Jahren herumexperimentiert, aber irgendwie bin ich daraus nicht schlau geworden^^ Da war es noch ziemlich fummelig und irgendwie instabil.
Ist es inzwischen für einen produktiven Einsatz ausgereift? Bitte teilt eure Erfahrungen damit, besonders Erfahrungen bei Hetzner sind sehr interessant. Über Tipps und Ratschläge würde ich mich sehr freuen.

Danke euch im Voraus
 
Ich hatte es kürzlich auf einem Hetzner-Server versucht und bin gescheitert: IPv6 wollte nach einiger Zeit immer nicht mehr und ich habe nicht herausgefunden, warum. Ich bin dann notgedrungen auf klassische Jails ohne VIMAGE umgestiegen und habe die notwendige Sicherung eines Dienstes (Redis) über PF/NAT bewerkstelligt. Ob es an mir lag, an FreeBSD oder am eingesetzten HardenedBSD kann ich leider nicht sagen. Ich musste das irgendwann zum Laufen bekommen und konnte nicht weiter herumtesten.
 
Danke dir SolarCatcher,

anscheinend hat sich nichts geändert in den letzten drei Jahren, schade eigentlich. Das Konzept von VNET / VIMAGE ist sehr verlockend.
Ich habe irgendwie das Verdacht, dass es bei Hetzner nicht so einfach funktionieren dürfte. Denn VNET simuliert ja einen eigenen network stack.
Und mit IPv4 war sonst alles ok?
 
Ja, mit IPv4 schien alles zu laufen. Wie gesagt: Kann durchaus an mir liegen. Oder an etwas speziellem in HardenedBSD... Es war mein erster Versucht mit VIMAGE.

Ich weiß, dass andere das produktiv einsetzen. punkt.de, z.B. bietet TYPO3 in VIMAGE jails an. Deren Gründer Patrick Hausen, war im Mai im BSDNow-Podcast interviewt worden... und spricht dieses Wochenende auch auf der EuroBSDCon in Paris: "From NanoBSD to ZFS and Jails – FreeBSD as a Hosting Platform, Revisited". Ich werde mir das einmal anhören.
 
VIMAGE hat mit 11.0 auch einen sehr großen Sprung in Sachen Stabilität gemacht. Für sich genommen läuft es nun im Großen und Ganzen gut. Problematisch wird es, wenn man beginnt etwas in die Peripherie zu gehen, als ich das letzte Mal geschaut habe war z.B. pf noch etwas wackelig. Produktiv einsetzen tue ich es aber auch nicht, auch da mir etwas der Einsatzzweck fehlt.
 
Ich werde es nochmal probieren.
Schade, dass niemand hier Erfahrungen damit über lange Zeit gemacht hat. Sieht nicht sonderlich gut aus, für einen produktiven Einsatz.
@Yamagi Was wäre deiner Meinung nach der passende Einsatzzweck?
 
@satriani Ich bin zurück aus Paris und ich fand die o.g. Präsentation von Patrick Hausen sehr interessant.

Sie beteiligen sich an der Entwicklung von py-iocage und haben sich da etwas ausgedacht, was sie Blueprint-Jail nennen und von dem mehrere Teilnehmer übereinstimmend sagten, dass es ein Feature ist, was easyjail schon (lange?) hat. Die Idee dabei ist, eine Art Template-Jail, die man einmal erstellt und danch nicht wieder anfasst. Darin sind das OS und auch die für den jeweiligen Zweck benötigten Pakete drin. Diese wird dann per nullfs in eine "empty Jail" gemountet und einzelen ZFS-datasets dann vom User beschreibbar darüber für z.B. /etc, /usr/local/etc, Home usw. Die RC-Scripts aus /etc/rc.d/ werden allerdings wieder read-only drübergemounted, damit da jeweils die zur OS-Version passende Version dabei ist. Für ein Update der Software wird dann ein neuer Blueprint erstellt, die Kunden-Jail runtergefahren, die neu erstelle Jail und darüber die anderen Verzeichnisse gemounted und die Kunden-Jail wieder hochgefahren. Ich hoffe, ich habe das korrekt wiedergegeben.

Jedenfalls benutzen sie erfolgreich VIMAGE-Jails mit IPv4 und IPv6 und können so dem Kunden ziemlich alle Wünsche erfüllen, was Networking betrifft.

Aus meiner Sicht lohnt es sich, die (hoffentlich bald) veröffentlichten Video-Aufzeichnungen des EuroBSDCon-Vortrags anzuschauen.
 
@SolarCatcher danke dir für die Infos
Das mit dem Blueprint-Jail habe ich vor gut vier Jahren, mehr oder weniger auf ähnlicher Art und Weise umgesetzt, weil ezjail damals es nicht konnte.
Was VIMAGE angeht, wenn sie das produktiv erfolgreich einsetzen, dann kann es durchaus Sinn machen sich daran zu trauen. Das macht Hoffnung :)
 
satriani: Deine Anforderung lassen sich problemlos ohne VIMAGE umsetzen mit einer Firewall im IP Stack des Hosts. Um die PostgreSQL Datenbank zwischen den Jails zu verteilen besteht auch noch die Möglichkeit das Unix Domain Socket per nullfs in den anderen Jails sichtbar zu machen und dies anstatt TCP/IP zu verwenden.
 
Danke Crest, das habe ich bisher auch immer so gemacht. Doch ein eigenes stack per Jail ist schon 'ne feine Sache.
Was eine Firewall angeht, da bin ich kein großer Freund von. Ich finde eine Firewall in nahezu allen Fällen überflüssig.
Ist aber meine eigene Meinung ;)

@SolarCatcher Das Video ist leider nicht verfügbar :(
 
Nach längerer Suche hier im Forum sowie auf https://forums.freebsd.org/threads/62026/

Code:
include GENERIC
ident VIMAGE

options VIMAGE
device epair
device if_bridge
gefolgt von einem anschließendem Neubau des Kernels

Code:
...
# External Interface Settings
# ---------------------------
ifconfig_xx="DHCP"

# Jail Network Settings
# ---------------------
cloned_interfaces="bridge0"
ifconfig_bridge0_alias0="inet 10.x.x.y/24"
gateway_enable="YES"
...
firewall_enable="YES"
firewall_script="/etc/ipfw.conf"
firewall_nat_enable="YES"
firewall_logging="YES"

jail_enable="YES"
jail_list="foo"
...

devfs.conf anpassen:
Code:
# Devices usually found in a jail.
#
[devfsrules_jail=4]
add include $devfsrules_hide_all
add include $devfsrules_unhide_basic
add include $devfsrules_unhide_login
add path zfs unhide
add path 'bpf*' unhide

Auszug aus der jail.conf
Code:
cat /etc/jail.conf
allow.mount;
allow.raw_sockets  =  "1";
allow.set_hostname  =  "0";
allow.sysvipc  =  "1";

host.hostname  =  "${name}.xxx.yyy";
path  =  "/tank/jails/${name}";

mount.devfs;
devfs_ruleset  =  "4";

exec.clean;
exec.start  +=  "/bin/sh /etc/rc";
exec.stop  =  "/bin/sh /etc/rc.shutdown";

foo {
  $ip_addr  = "10.x.x.yy"; # Jail ip address
  $ip_route  = "10.x.x.y"; # Gateway -> bridge0 ip
  vnet;
  vnet.interface  = "epair0b";
  exec.prestart  = "ifconfig epair0 create up";
  exec.prestart  += "ifconfig bridge0 addm epair0a";
  exec.start  = "/sbin/ifconfig lo0 127.0.0.1 up";
  exec.start  += "/sbin/ifconfig epair0b inet ${ip_addr} netmask 255.255.255.0 up";
  exec.start  += "/sbin/route add default ${ip_route}";
  exec.start  += "/bin/sh /etc/rc";
  exec.stop  = "/bin/sh /etc/rc.shutdown";
  exec.poststop  = "ifconfig epair0a destroy";
  persist;
}

/etc/ipfw.conf auf dem Host:
Code:
cat /etc/ipfw.conf
# NAT
nat_if="xx"
nat_ip="xx.xx.xx.yy"
jail_lan="10.x.x.0/24"

# CMD
cmd="/sbin/ipfw -q"

# -------------------------------------------------------------------- #

# Alles raus
/sbin/ipfw -q -f flush

# -------------------------------------------------------------------- #

# Alles was einen State hat darf durch
$cmd add 10 check-state

# Vom Host auf die Jails
$cmd add 20 allow all from me to $jail_lan setup keep-state

# -------------------------------------------------------------------- #
#
# NAT fuer die Jails
$cmd nat 1 config if $nat_if
$cmd add 30 nat 1 all from $jail_lan to any
$cmd add 40 nat 1 all from any to $nat_ip

# -------------------------------------------------------------------- #

# Alles durchlassen
$cmd add 50 allow all from any to any

Resolv.conf des Hosts in die Jail kopieren
cp /etc/resolv.conf /tank/jails/foo/etc/resolv.conf

rc.conf des jails:
Code:
cat /etc/rc.conf
hostname="foo.xxxx.yyyy"
defaultrouter="10.x.x.yy"
firewall_enable="YES"
firewall_type="OPEN"
sshd_enable="YES"

Code:
# jls
  JID  IP Address  Hostname       Path
  3                       foo.xxxx.yyyy  /tank/jails/foo

Ich hoffe ich bin hier mit diesem Beitrag an der richtigen Stelle.
 
@noize Mir ist nicht ganz klar: Willst Du uns damit sagen, dass es so bei Dir funktioniert? Oder hast Du eine Frage dazu? Und: Was ist der Grund für Dich, für dieses Setup VIMAGE zu verwenden - eine geNATtete Jail kann ich doch auch auf dem klassischen Wege haben, ohne VIMAGE...?
 
Das Setup läuft so auf meinem Vserver, deswegen auch das Nat. Eine geNATtete Jail würde es für meine Zwecke natürlich auch tun. War eher reine Neugier/Spieltrieb, als dass es einen produktiven Zweck erfüllt, was ich übersehen hatte, da es in diesem Thread um produktive Umgebungen geht.
 
Hört sich gut an, dann braucht man das Kernel nicht neubauen um VIMAGE zu nutzen. Langsam wird es richtig interessant :)
 
Ich habe eben mal nachgefragt. Wohl eher nicht, weil es einen ABI-Change mit sich bringen würde.
 
Zurück
Oben