VNET Jail mit Netgraph oder epair aufbauen?

jmt

Well-Known Member
Hallo,

bei der Verwendung von VNET Jails in FreeBSD 12.1 stellt sich mir die Frage, ob man die mit Netgraph oder Epair-Devices aufbaut. Bei Epair-Devices bootet mein Server sporadisch, wenn ich ein VNET Jail stoppe. Dieses Feature hat meine Netgraph Variante nicht, aber sie scheint Aussetzer zu produzieren. Zumindest lässt sich so kein längerer Film ruckelfrei übers Netzwerk schauen.
Habt Ihr Erfahrungen zu den beiden Varianten? Gibt es ein best practice oder gar eine andere Variante? Jede Idee ist wilkommen.
 
Ein Versuch mit Epair-Devices vi jib Script scheint ganz vielversprechend zu sein. Mein vorheriger Versuch ohne jib bootete gerne, wenn man ein Jail stoppte.
 
Ich habe mir das auch mal gegeben, es bleibt schöne Bastelei.

Wenn du uns verrätst, was du bezwecken/aufbauen willst, gibts vielleicht eine ganz einfache Variante. ;)
 
Also ich habe VNET Jails schon lange im Einsatz, ursprünglich sogar noch auf 11.2 -- ich nutze epairs ohne irgendwelche Scripts, sie werden beim booten aus der rc.conf erstellt und den passenden bridges zugeordnet. Das Problem eines spontanen Reboots hatte ich gelegentlich, aber schon recht lange nicht mehr, ich hatte den Eindruck, das passiert mit 12.1 nicht mehr...

Allerdings kann ich auch einfach nur Glück gehabt haben -- meine VNET Jails werden auf dem Server als leichtgewichtige VMs genutzt, um Dienste zu isolieren und auch in eigene virtuelle Netzwerksegmente zu stellen, die werden also eher selten unabhängig vom Hostsystem gestoppt und gestartet.
 
Ich hatte mit epair noch keine Probleme. Bridge normal in der rc.conf gesetzt und die eparis legt iocage an. Zeig doch mal deine ganze Netzwerkkonfig?
 
Ich nutze die Jails zur Isolierung von verschiedenen Diensten. Leider funktionieren normale Jails hier nur bedingt, da z.B. der Unifi-Controller oder auch avahi gerne einen "vollständigen" Netzwerk-Stack hätten. Wenn Ihr Beispiele habt, wie das auch ohne VNET geht, würde mich das sehr interessieren.
Meine jail.conf, die momentan ganz gut läuft, ist folgende:
Code:
exec.consolelog = "/var/log/jail_${name}_console.log";
path = "/usr/jails/$name";
host.hostname = "$name.local";
interface = "re0";
vnet;
vnet.interface = "e0b_$name";
exec.prestart = "/usr/sbin/jib addm $name $interface";
exec.poststop = "/usr/sbin/jib destroy $name";

unifi {
}

flynn {
        enforce_statfs = 1;
        mount += "/export/bilder $path/export/bilder nullfs rw 0 0";
        mount += "/export/dokumente $path/export/dokumente nullfs rw 0 0";
        mount += "/export/movies $path/export/movies nullfs rw 0 0";
        mount += "/export/music $path/export/music nullfs rw 0 0";
        mount += "/export/backup/TimeMachine $path/export/TimeMachine nullfs rw 0 0";
}

haus {
}

dns {
}

joshua {
        mount = "/usr/home/ $path/usr/home nullfs rw 0 0";
        enforce_statfs = 1;
}

subsonic {
        mount = "/export/music $path/export/music nullfs ro 0 0";
        enforce_statfs = 1;
}

homeweb { }

www-proxy { }

Das jib-Skript kommt von /usr/share/example/jails. Es baut auch selbst eine Bridge, so dass meine rc.conf einfach nur einen Eintrag für re0 enthällt. Mein vorheriger Versuch mit
Code:
unifi {
       vnet;
       vnet.interface = "epair3b";                     # vnet interface
       allow.raw_sockets;
       exec.prestart += "ifconfig epair3 create up";
       exec.prestart += "ifconfig epair3b ether 42:C0:A8:8E:CD:03";
       exec.prestart += "ifconfig bridge0 addm epair3a";
       exec.poststop  = "ifconfig bridge0 deletem epair3a";
       exec.poststop += "ifconfig epair3a destroy";
       devfs_ruleset="5";
}
führte zu Reboots des Gesamtsystems bei jedem 3-4 Stopp eines Jails. Meine jetzige Konfiguration tut das nicht.
Hat jemand von Euch avahi oder einen Unifi-Controller in einer jail laufen und wenn ja, wie?
 
Dein Ansatz/Aufbau etc. sieht sehr gut aus. Was mich länger beschäftigt hat war die Einschränkung, dass sich mit prestart und poststop nicht alles lösen lässt oder ich bin zu doof für die nötigen Klimmzüge. ;)

Mit avahi und unifi bin ich unbedarft, aber vllt. hilft dir die Info, dass du bei VNET weder zwingend das epair brauchst noch bridgen musst. Es ist möglich, in der rc.conf der vnetjail den Adapter zu konfigurieren.

Und zuguterletzt gibts ja noch die Möglichkeit einer vm mit bhyve. Nicht ganz so schlank wie eine jail, dafür muss man aber auch nicht fummeln und kommt sicher ans Ziel.
 
FreeBSD hat ein Problem im vnet Cleanup-Code, wenn ein Interface entfernt wird, nachdem ein JAIL bereits zerstört wurde, siehe PR hier: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=238326

Eine Lösung, die bei uns hervorragend klappt, ist im Thread des PR auch beschrieben, man muß lediglich dafür sorgen, daß das Interface vor Zerstörung des JAILs gelöscht wird, etwa mit

[...]
exec.prestop = "ifconfig ${epair}b -vnet $name";
 
Zurück
Oben