 Ja, hallo zusammen. Ich erzähle euch heute irgendwie mal was darüber, wie man automatisiert Trainingsinfrastruktur generieren kann. Wer bin ich und warum bin ich der Meinung, dass ich darüber irgendwie was weiß? Ich bin Penny Lane. Die meisten kennen mich als Penny. Ich bin irgendwie 2010 im Studium dem CCC zugelaufen, seitdem Linux User seit einigen Jahren jetzt System und Network Operator. Ich arbeite bei der ENW, die NRA Network. Das ist ein kleiner IT Security-Dienstleister. Ich arbeite seit 2015 relativ regel mit Ansible und habe jetzt in der Vergangenheit mehrfach Ansible Workshop gehalten und brauchte dafür Trainingsinfrastruktur und weil ich eine inherent faule Person bin, habe ich mir das gleich von Anfang an weg automatisiert, damit ich es nicht mehr als einmal machen muss. Ich erst mal so ein bisschen kurz über das generelle Problem und dann mal so ein bisschen, wie bin ich da rangegangen? Was habe ich gemacht? Was habe ich von der Netzwerksseite her gemacht und von der Virtualisierungsseite her? Wie gebe ich dann meinen Trainingsübungen und so weiter? Und was habe ich dann noch gemacht, damit es ein bisschen stabiler und schneller läuft? So. Angenehm, ihr wollt irgendwie ein Workshop, eine Schulung oder ähnliches halten über irgendein IT-Thema. Dann wollt ihr irgendwie das Leute sinnvoll Dinge machen können, Hands-on Workshop Aufgaben bearbeiten. Und jetzt habt ihr aber das Problem, ihr wisst nicht, wer da kommt. Sind das irgendwie Windows-User? Haben die Mac, haben die Linux, haben die Mint, haben die Gen2? Können die sich ein Telnet kumpilieren? Man weiß es ja nicht so genau vorher, ne? Und dann denkt man sich, na gut, bevor ich jetzt irgendwie verschiedene User-Setups debugge, in meinem Fall jetzt irgendwie das Ansible-Environment von den Leuten auf den verschiedenen Systemen, welche Version haben die und so weiter, gebe ich denen einfach VM-Images, dann können sie da drauf arbeiten. Ja, gut, man gibt jetzt so heutzutage bei so einem Training jedem einen USB-Stick. Und dann denkt man sich, pack ich die Images doch einfach da drauf und dann können die sie bei sich anwerfen und dann können wir arbeiten. Ja, gut. So, jetzt haben aber Leute irgendwie per Firm GPO auf ihren Windows-Rechner nicht die Möglichkeit, USB-Sticks zu mounten oder Leute haben halt irgendwie das Problem, dass sie nicht wissen, was ein Hypervisor ist oder noch schlimmer, sie benutzen VirtualBox. Also, was mache ich? Gut, habe ich gedacht, man könnte ja in die Cloud tun. Gibt ja Leute, die machen das für einen, kann man ja in die AWS packen oder so, dann muss man nur irgendwie Internet haben und dann können die da irgendwie alle drauf arbeiten. Soweit die Theorie. Jetzt denkt man aber kurz drüber nach, na ja, irgendwie potenziell bin ich für ein Schulungsanbieter unterwegs, bin in irgendeinem Hotel. Was hat denn das Hotel irgendwie für ein Internet-Ablink? Ist der irgendwie teuer, hat der Schulungsanbieter den mitgekauft oder ist der einfach crappy und funktioniert nicht? Habe ich dann irgendwie mitten im Kurs das Problem, dass die Leute keine Aufgaben mehr machen können, weil der Upstream wackelt und dann muss man irgendwie 48 Stunden auf den Hotel IT ins Leister warten? Ja, blöd. Also, habe ich gedacht, ich hätte gerne irgendwie meine Cloud zu mitnehmen. Also mache ich das doch einfach selber und bring dann irgendwie meine virtualisierte Infrastruktur mit, stell die da auf den Tisch und dann habe ich Ruhe. Okay, also, was hätte ich gerne von meinem Setup gehabt? Also, ich will irgendwie VMs generieren. Möglichst einfach, möglichst schnell, möglichst auf Knopfdruck. Ich möchte dem Ding irgendwie eigentlich nur sagen, wie viele Leute habe ich in meinem Kurs und wie viele VMs braucht jeder. Daraus ergibt sich eine Gesamtzahl an VMs. Vielleicht brauche ich noch eine für die Demo und dann möchte ich irgendwie, dass das automatisiert aus der Luft funktioniert. Was möchte ich noch? Ich möchte irgendwie vermeiden, dass die Leute, oh, ich habe, was war das jetzt noch mal für eine IP? Verdammt, ich habe mich vertippt. Jetzt habe ich auf der Kiste von dem anderen gearbeitet, blöd. Ja, das heißt, man möchte irgendwie, dass die sich nicht ins Gehege kommen, dass die so ein bisschen voneinander abgetrennt sind. Ich möchte aber auf alle drauf kommen, dass, wenn einer Probleme hat, ich die bagen kann. Und dann möchte ich vielleicht während des Kurses Dinge installieren oder die Leute sollen halt mal was ergugeln und das dann ausprobieren. Das heißt, Internet Access brauche ich irgendwie schon. Aber ich will, dass es verschmerzbar ist, wenn der halt irgendwie wegbröselt. Also, nehme ich mir irgendwie eine Kiste, setz die auf. Ich bin Debianer, also habe ich dann Debian drauf getan. Und dann brauche ich irgendwie was, was mir die VM spawnt. Ich habe kurz drüber nachgedacht, ob ich Docker mache, weil wäre ja in so einem LightWire Setup relativ nett irgendwie. Kann ja nichts passieren, ist ja eh nur Training, dafür könnte man auch das nehmen. Hab mich dann aber, wie man so häufig macht, entschieden für, was kann ich am besten, KVM. Da habe ich jetzt die Möglichkeiten, entweder ich installiere mir die VMs oder ich kopiere mir fertige Images. Beides vollständig machbar, habe ich beides auch mit dem Setup schon gemacht. Jetzt sehe ich dann später noch mal was drüber. Okay, jetzt will ich das aber automatisiert haben. Womit mache ich das? Gut, ich kann es mit Bash machen, aber da muss ich ja irgendwie den Kram sagen, was es tun soll. Ich kann es auch einfach mit Enzybil machen, weil da sage ich, ich mache mir eine VM und dann ist mir egal, wie der da hinkommt. Das mag ich an Enzybil ganz gerne. Deswegen habe ich das Problem mit Enzybil gelöst. Und zwar gleich den ganzen Hypervisor Setup in Enzybil, weil potenziell will nicht nur ich das nutzen, sondern Kollegen halten auch Schulungen. Dann können die sich den Laptop aus dem Strang reißen, für ich brauche mal 10 VMs. Wir müssen da einfach nur irgendein Linux drauf installieren, bei dem irgendwie die Pakete KVM heißen und schmeißen das Ding da drauf und dann läuft das. Und mal wisst ihr, auch nach dem Workshop immer wieder ordentlich platt machen. Und da habe ich ab dem Installer für den Hypervisor komplett durchautomatisiert. Das ganze Netzwerk Setup, ich brauche ja Bridges, auf denen die VMs leben und so weiter, mit Enzybil automatisiert. Das starten und stoppen der VMs mit Enzybil automatisiert. Wenn ich dir immer das nicht kopiere, sondern installiere, wie ich es jetzt in meinem Fall getan habe, damit ich mal latest greatest Pakete habe, habe ich das mit einem gepresedeten Installer gemacht. Ich habe da erst Debian genommen und dann irgendwie mir vom Kollegen ins Gewissen reden lassen, dass die Leute davor Angst haben, und das nicht kennen, Ubuntu kennen sie, und dann nehmen wir Ubuntu, gut funktioniert, genauso ist mir egal. Kann dann die VMs und die Netzwerke mit Enzybil genauso gut wieder aufräumen, wenn der Kurs vorbei ist und die ganze Kiste wieder platt machen. So, wie habe ich das gemacht? Ich gehe jetzt erstmal auf einzelne Snipples ein. Ich gehe jetzt nicht groß auf Details von Enzybil, oder ähnlich im einen. Ich habe relativ viel Zeit für Q&A eingeplant. Wenn ihr da Details zu haben wollt, dann bitte später. Ich gehe da einfach mal einen kurzen Abriss drüber. Wie habe ich das gemacht? Ich habe in meinem Hostfall einfach die VMs definiert gesagt. Irgendwie, jeder User hat eine ID von 1 bis 99 und jede VM hat eine ID von 1 bis 99. Ich gehe also hin und sage User01, VM01, User01, VM02, User02, VM01 und so weiter. Nehmen wir die KVM-Wirdmodule für Enzybil, sage, leg mir den Host an mit einem Template XML, mit dem man neben KVMs beschreiben kann. Brauche jetzt in dem Fall, wo ich den Installer benutze, das ganze zweimal, einmal First Boot, wo er in den Installer bootet und danach nochmal, wenn er das Disk-Image bootet, muss ich es neu definieren. Aber auch das ist relativ einfach. So, wie sieht so eine KVM-Definition aus? Wie habe ich das gemacht? Ich sage einfach, gib mir den Hostnamen als Variablerein. Das Ding hat irgendwie ein Gigamot, eine CPU. Und dann schiebe ich ihm einfach tatsächlich meinen Installer-Kornel und eine Init-ID, wo mein Pre-Seat drin liegt unter. Und das so das meiste. Dann, gut, ein bisschen braucht er irgendwie noch Metastuff. Den habe ich rausgelassen, maßgeblich wichtig ist. Ich habe jetzt in meinem Fall einfach RAW-LVMs angelegt für die Gäste. Die habe ich jeweils mit dem Hostnamen benannt. Geht 1 zu 1, genauso mit KUKAO2-Images oder ähnlichem. Ich definiere sie alle mit den Hostnamen durch. Die heißen alle gleich. Ist mir vollkommen egal. Und beim Netzwerk kommt dann der eigentliche Trick. Ich habe die zweistelligen IDs von 01 bis 99. Muss noch ein bisschen aufpassen, dass die zweistellig sind. Und schiebt dann tatsächlich einfach in die Meckadresse mit dem vorderen Block vom LibWirt, die er beim Würfeln anlegt. Nämlich dann hinten einfach die UserID und die VRMID mit der Meckadresse. Damit habe ich voraussagbare Meckadressen. Damit kriege ich logischerweise auch voraussagbare IPv6-Adressen. Und damit habe ich die Meckadressen, die ich an dem Format einfach in eine DHCP-Config einspeisen kann und Static Leases vergeben kann. Dann habe ich die Bridges noch. Jeder User kriegt ein eigenes Bridgesinterface, indem die vor Amsterdam landen. Auch einfach mit der UserID und kann dann da draus einfach irgendwie mein Sock zusammenkloppeln im Netzwerk hinterher. Wie habe ich das mit dem Preceed Installer gemacht? Wer DBA an Preceeding kennt, sieht, dass es irgendwie standard ist. Wer es nicht kennt, eigentlich mache ich nichts anderes. Das heißt, dem Installer, die Fragen, die er mir stellen würde, zu beantworten. Das heißt, ich sage ihm irgendwie ein Passlayout, mache irgendwie, nimm deinen Hostname und deine Domain aus dem DHCP und wenn du sie nicht findest, dann setz halt irgendwie einen Platzhalter ein. Dann habe ich tatsächlich noch einen eigenen, da gehe ich gleich nochmal einen eigenen Paketenmirror bzw. eigenen Aproxcash aufgesetzt, damit das installieren schneller wird. Die Dinger kriegen irgendwie Username, Default oder so, weil es ist eine Schulung, meine Güte. Aber auch das könnte man jetzt natürlich mit komplizierteren Dingen reintemplaten, wenn man wollte. Da muss ich ihm irgendwie noch ein Timezone setzen und da sage ich ihm, hier guck mal, du hast da irgendwie 20 Gigabyte auf der Platte, mach da mal irgendwie ein Slash draus und sei ruhig. So. Dann, das, was ich gemacht habe, ich habe mir die Innet-RD dazu habe ich mir sowohl das Gleiche mit dem Kernel und der Innet-RD einfach gesagt, kopiere mir mal meine Innet-RD dahin. Dazu habe ich mir die Innet-RD vom aktuellen Net-Installer genommen, ausgepackt, preceed mit rein gepackt, wieder zugemacht, fertig. Wenn man jetzt sagt, ist jetzt nicht so meins und ich brauche nicht latest, greatest und so, ich mache einfach irgendwie per Hand in meine Wirtche, box irgendwie ein Image und kopiere mir das, sei egal, was ich kopiere, dann sage ich ihm halt, ok, copy mir das Default-Image anstatt die Innet-RD, dann spare ich mir potenziell auch noch den Schritt mit, ich muss das Ding zweimal definieren, dann nehme ich mal einmal für ein Installer und einmal für normalen Boot. So mache ich es für die Schulung, so habe ich es gemacht für Packet Wars CTF mit, wir haben da ein Image mit Rätseln und wir sollen mal Leute own und wir müssen das kopieren und dann mache ich es halt so. Es sind halt irgendwie 3 Zeilenunterschied in dem ganzen Enzybil. So, jetzt möchte ich die Dinger online kriegen. Eigentlich habe ich nicht Lust anzufangen, auf die VMs drauf zu gehen und den Statisch-Netzwerk-Konfiguration zu machen, grad nicht bei der Installation oder so, also hätt ich gerne, weil ich will sehr wiederfinden, Static DHCP-Lizes, sage irgendwie hier, Hallo Host, ich habe ja die vorherrsagbare Mac-Adresse generiert, die map ich quasi 1 zu 1 auf eine IP-Adresse, die Dinger kriegen irgendwie von mir 10, 10, dann UserID von 1 bis 99 und dann 101, 102 bis 199 im hinteren Segment, damit weiß ich, welche VM wo ist. Ich habe jetzt hier die eigentliche Sonntags für die Folie ein bisschen eingekürzt, das muss man sehen, wie in dem XML ein bisschen mit Formatieren mehr das auf 2 Stellen und so Magie machen. Deswegen, die roten sind jetzt nur Platzhalter, das ist nicht die eigentliche Sonntags, aber ich denke, das könnt ihr irgendwie rausextrapulieren. Ja, und setze ihm halt noch den Host Namen, weil, dann habe ich ja auch keine Lustung, wie hinterher nochmal zu konfigurieren, wenn ich den per DHCP setzen kann. So, die Bridge Interfaces um jetzt für die einzelnen Teilnehmer gesonderte Layer 2 Netze zu erzeugen, sind auch relativ einfach definiert. Ich sage Bridge Name iteriere über die Bridges, die ich gekriegt habe jeweils mit den IDs, sage ich Hallo hier, du bist der Router, nimm dir mal die 1 und dann Bridge porte mal irgendwie auf was auch immer ich da gerade habe, wenn ich jetzt irgendwie zu Hause im Büro bin, im Schulungsraum, dann fahre ich irgendwie bei 800 an zu zählen, wenn ich auf einer Konferenz bin, kriege ich vielleicht 150 bis 170 oder so, kann ich ihm also ein Offset mitgeben und sage, addier mir irgendwie mal deine User ID auf dein WLAN Offset und dann habe ich eigentlich nur als Bedarf, wenn ich in einem größeren Netz bin, ich muss irgendwie ein Anfangszahl wissen und dann irgendwie Anzahl der User plus den Trainer zusammenhängende WLANs haben wenn ich mit meinem Setup alleine irgendwo ein Hotel fahre ist mir noch nicht egal, da nehme ich mir einfach irgendwas. Gut, was haben wir jetzt? Jetzt haben wir irgendwie die VMs auf Bridges. Ja, jetzt wollen wir die Dinger noch irgendwie online kriegen. Also die haben ja irgendwie IPs gekriegt und die sind jetzt irgendwie auf ihren Bridges. Brauchen wir noch ein bisschen IP Tabels regeln. Brauchen wir noch ein paar IP Tabels regeln damit sie sich nicht ins Gehege kommen und nicht so mal eben über das Geldwerkrad hoppen. Das ist jetzt nicht wasserdicht, aber es funktioniert das könnte man vielleicht auch noch ein bisschen hübscher machen, aber im Endeffekt sag ich, du darfst halt irgendwie mit dem Hypervisor sprechen, weil da liegen irgendwie mein Git mit den Exercises, geht gleich drauf ein und mein Paketcache und so was. Du darfst halt irgendwie mit dir selber reden und den anderen VMs auf der Bridge weil so ein User hat dann irgendwie 3, 4, 5 VMs, die müssen untereinander kommunizieren und du darfst halt irgendwie nach draußen ins Internet und dann übrigens, mach mal natt. So. Gut, jetzt hätte ich gerne irgendwie dass meine Trainies auch auf die Seite drauf kommen und auch ins Internet so im Optimalfall und ja gut, dafür lege ich halt in meiner DHCP-Config dann einfach nochmal zusätzlich Netze an unter dem User von 10 bis 20 sollte ja nur einer sein, also werden 10 IPs für den schon reichen und nach dem Gimmer bitte ich hier über den Hypervisor es router und dann können die sich halt ja anstecken gucken wir gleich mal wohin und kriegen dann ihr DHCP-Netz, dann kann ich sagen guck mal was für eine IP gekriegt habt im dritten Segment steht eure User-IP wenn ich noch besonders gute Laune hab dann geh ich vorher hin und kleb die Kabel alle fest und strab auf das gaffane Zahl von 1 bis 1 Zahl Trainings dann wissen sie welche Nummer sie haben und kann dann sagen hier das ist übrigens euer Netz viel Spaß so das ganze sieht dann so aus nochmal zusammengefasst ich hab die VMs die sind irgendwie auf na 10x10 kann man logischerweise sich irgendwas anderes ersetzen je nachdem wenn man irgendwie Constraints hat dass da in der Variante jetzt Hard Configured Scope ist halt das irgendwie voll übervariablen configurable zu machen ja sagt da einfach irgendwie von 101 bis 199 sind irgendwie die VMs von 10 bis 20 oder 10 bis 100 oder was auch immer sind irgendwie meine Trainings je nachdem wie groß mein Netz ist hab die sowohl auf Layer 2 als auch auf Layer 3 leidlich isoliert hab eine Outbound Interface für die Trainings und VMs für ins Internet und hab halt ein Inbound Interface so dass die Trainings an die VMs kommen so in dem Fall wie wir es hier gemacht haben benutzen tatsächlich die Trainings und die VMs den Hypervisor selber als Router das haben wir aber auch schon mit einem externen Router gemacht dann gibt man ihm halt überall die 2 und dann funktioniert es halt tatsächlich genauso also man ist halt nicht auf dieses Setup von mein Hypervisor als Router angewiesen es ist halt nur tatsächlich einfach für ich bin irgendwo und hab irgendwie eine Dose und nehm mir eine IP aus Dollar, Hotel oder Konferenz Netz und natte da drüber ins normale Netz und alles andere ist mir egal ist es halt tatsächlich die entspannteste Variante die wir gefunden haben und das Ganze sieht dann irgendwie so aus ich hab da noch ein Switch mitgebracht auf den Switch map ich dann irgendwie die Interfaces bzw. die VLANs so dass dann jeder der sich ansteckt da fällt dann irgendwie das passende Netz raus und dann irgendwie damit glücklich und dafür brauch ich halt einfach ne werft dann halt da ein Trunk raus der kommt auf den Switch an und dann hab ich halt irgendwie ein Trainerport da fällt mir dann immer die Null raus also ich hab jetzt die Trainings angefangen mit 1 zu zählen es gibt quasi alle diese Netze noch einmal mit der Null und das ist das Trainernetz so und aus dem Trainernetz komm ich dann halt per IPTables Regeln in alle andere Netze aber die Trainings halt nicht zu mir und ich selber hab auch irgendwie Internet und hab irgendwie alles was ich brauche soweit also ganz entspannte Lösung so jetzt hab ich noch ein weiteres Problem und zwar ich hab ja irgendwie ein Hands on Workshop jetzt wollen meine Teilnehmer natürlich auch noch Aufgaben haben na gut also ich wär jetzt irgendwie dass die Leute die Aufgaben dann kriegen wenn ich sie stelle und weil es heißt immer einen der sitzt dann da und macht schon mal alle Aufgaben und hört die nicht zu ja was machst du ja machst du Git weil ich kann halt die Exercise dann pushen wenn ich sie brauche den Leuten irgendwie zu sagen gebt mal auf eurer VM die zwei Worte Git pull ein ist grad noch so für irgendwelche Leute die sich vielleicht einfach weniger auskennen und deswegen eine Schulung halten denen kannst du sagen gebt mal zwei Worte ein und dann sei glücklich dafür brauch ich nicht erst eine Git Schulung halten und im Zweifelsfall hab ich auch noch ein Ansible der mir auf alle VMs connectet und überall ein Git pull ausführt wenn die tatsächlich irgendwie die Schulung solo levelig ist oder die Leute solo levelig das halt irgendwie selbst Git pull überfordert genau da drüber hab ich dann einfach dazu hab ich einer C001 auf dem Hypervisor konfiguriert könnte aber auch jeder andere IP sein ich war halt einfach nur faul ich wollte das Preceed fallen nicht mehr als einmal erstellen und packen also hab ich halt eine einheitliche IP auf eine Management Interface angelegt da läuft dann irgendwie das Git drauf weil dann muss ich halt das net template machen ist damit nicht die sicherste Variante weil es kommen wieder am Ende alle bei einer IP raus aber es funktioniert halt es ist ja in dem Fall tatsächlich nur deppen sicher und nicht wasserdicht dementsprechend können die halt einfach ihr Git pullen ich kann halt auch dann einfach hingehen und sagen ich push mal meine Lösungen dazu also leg halt irgendwie immer die solution leben dran wenn ich die also für die vorhergangene Aufgabe wenn ich quasi die nächste Aufgabe pushe oder so kann irgendwie sinnvoll Zwischenlösungen nachschieben wenn halt doch mal irgendwie noch ein Fehler auftaucht dann kann ich den gleich für alle fixen ist also tatsächlich irgendwie meiner Meinung nach eigentlich eine ganz elegante Lösung ja und da sie alle an dem Hypervisor dran sind können sie halt den einfach auf für Git nehmen und wenn sie wollen können sie halt tatsächlich einfach dann das Git noch lokal auf ihre Rechnerklonen wenn sie jetzt irgendwie sagen sie wollen die Aufgaben oder die Lösungen mitnehmen oder so an die IP kommen sie auch von den Trainernetzen dran wenn der Lage ist ein Git Clone zu machen kann das machen ja so was mache ich jetzt wenn einer meiner Trainee seine Forms kaputt spielt ich bin doch egal ja kann ich entweder irgendwie recoveren also wenn ich Images genommen habe dann kann ich einfach das Ding wieder drüber kopieren oder also ich habe jetzt in dem Fall habe ich einfach die Trennung ich kreiere VMs und dann muss ich sie starten und das sind halt für mich absolut zwei Schritte weil ich möchte das irgendwie am Freitag in der Firma alles installieren und dann dann fahren die alle runter nach der Station und dann mach ich den Server aus dann lege ich ihn im Kofferraum und Montags komme ich irgendwie am Schulungshotel an, macht den Kofferraum auf macht Strom an den Server und sage so jetzt starten wir mal alle in der Variante mit dem Installer ist es nun so dass wenn ich sage create er alle VMs anlegt die gerade nicht laufen das heißt ich schieß einfach die VM die gerade kaputt ist ab lasst die create Rolle laufen und die die nicht läuft wird automatisch neu angelegt also auf die eine oder andere Art und Weise entweder ich drehe den Snapshot zurück ich erzeugt das Ding neu die Möglichkeiten sind vielfältig pro gewählter ursprünglicher Lösung so und jetzt wird es erstmal spannend ich habe für ein Workshop der konzipiert war für 16 Teilnehmer und drei VMs pro Teilnehmer plus Trainer sind wir damit bei 51 VMs und einem Hypervisor von 64 Gramm jetzt versuche ich da 51 Systeme parallel zu installieren das performt nicht ich habe aber sagen wir mal gerade nichts rumliegen und bin mal wieder hinter der Deadline ich kann also nichts größeres kaufen oder mal eben noch anbestellen oder ich habe halt einfach sowieso kein Geld und muss nehmen was da ist ich versuche mit kleinem Gerät sinnvoll Effekt zu erzeugen so dann war das erste was ich gemacht habe ich habe ein Aproxx aufgesetzt weil ich habe 50 Kisten die laden die Pakete aus dem Internet runter um den Kram zu installieren die muss ich 50 mal runterladen also Paket caching proxy auf dem Hypervisor installiert den im Pre-Seat-File für alle als Mirror eingetragen der lädt die genau einmal runter und danach kopiert er sie nur noch auf dem Hypervisor hin und her das logischerweise wesentlich schneller als irgendwie 51 parallele Download-Vorgänge über dieselbe Leitung ja das hat dann auch den Unterschied gemacht zwischen mir kommt der OOM-Killer die ganze Zeit vorbei und schießt mir ungefähr alles ab was läuft inklusive irgendwie den VMs halt selber oder es bleibt halt alles stehen und es läuft halt echt smooth so ja das dauert halt einen Moment aber es läuft halt so und das dauerte mir aber immer noch zu lange weil ich bin so ein wahnsinnig geduldiger Mensch und wenn das irgendwie 4 Stunden dauert 50 VMs zu installieren dann fiel ich das irgendwie doof also habe ich irgendwie nicht Ruhe gegeben und noch mehr gemacht und dann dachte ich ich habe da so 51 identische VMs auf 64 g wie spare ich mir ramm Cornel Sandpage Merging mag vielleicht irgendwie dem ein oder anderen im Griff sein, wie man das nicht ein Begriff ist ich bin kein Cornel-Entwickler nur ganz vereinfacht dargestellt was wir machen ist wir legen identische Seiten im Ramm aufeinander und machen quasi nur Copy on write bei 51 identischen Maschinen im Ramm ist das eine total gute Idee weil zwischen irgendwie ich drück mir meinen Ramm zu langweilsig ist das halt ein signifikanter Unterschied damit langweilsig die Kiste halt echt irgendwie gesagt mach mal bei 50% der Rammauslastung KSM an und dann hatte ich irgendwie das Problem ich muss es noch ein bisschen runterdrehen weil es fleppt so rum, weil wenn ich es anmache hat da noch so 30% Rammauslastung aber ja das ist so ein Trick und zwar vermutlich egal so benutzt an Hypervisor also wenn man das mit einem Virtual Box macht oder so geht das bestimmt auch und das ist total schlau und das ist so effizient ums ich finde es toll weil es hat mir irgendwie ein Haufen Zeit gespart und ein Haufen Nerven und ein Haufen Diskussionen mit dem OOM Killer Scheduler setzen hat dann irgendwie die Zeit halbiert also IOS Scheduler Deadline setzen für die ganzen Write Prozesse während der Installation von den Maschinen hat das Ganze irgendwie auf 2 Stunden statt 4 Stunden gedrückt und dann hätte ich eigentlich noch ganz gerne Write Cache im Server enabled aber der Controller war jetzt der Meinung, dass er nur read caching kann und dann hat ich auch irgendwie keine Lust mehr mit dem Ding zu diskutieren ja aber also wenn man jetzt wirklich einen Server hat den man mit trägt dann sollte man auch Write Cache anmachen und dann ist es vermutlich auch noch mal eine Stunde weniger oder so meine Vermutung ohne es jetzt ausprobiert zu haben im Endeffekt war mir der Punkt dann relativ egal weil ich das für Schulungen nimmste dann sowieso teilweise auch eher mal ein Laptop mit als Hypervisor der kann das eh nicht und habe ich dann irgendwie die triggereicheren Dinge konzentriert und das war in dem Fall die VM Settings selber dazu muss man wissen dass KVM per Default in den VM Settings wenn man halt für die Disk nichts Entsprechendes setzt halt irgendwie komische mach mal irgendwie dein Write erst auf der VM und dann ist so das irgendwie ein Hypervisor und dann macht der irgendwie was damit und ich habe gesagt einfach durch und gebrühe lohnt sich und einfach zu sagen hier du bist der VM deine Disk hat keinen Write Cache, lass mich in Ruhe ist auch eine total gute Idee so, gut was haben wir irgendwie gemacht nicht viel und trotzdem haben wir irgendwie innerhalb von 2 Stunden 50 VMs hochgefahren wir haben ein Setup was ich für 10 VMs auf den Notebook benutzen kann und für 200 auf dem dicken Blech wir haben ein Setup was relativ Fehler verzeihend ist, also wenn irgendwas kaputt geht mach ich es halt nochmal und wenn morgens was kaputt geht werde ich irgendwie die ersten 2 Stunden organisatorisches Blah Blah erzähle auf so einer Schulung kann ich das doch einfach nochmal neu machen ich habe ein Setup was in den Kofferraum passt ich habe ein Setup wenn ich den Notebook benutze ein dickes um irgendwie eine Schulung damit zu halten für sagen wir mal 10 Teilnehmer reicht's und dann habe ich irgendwie einen kleinen Switch weil 12 Port reichen auch das passt in den Rucksack, damit kann ich sogar Bahn fahren mir ist es scheiß egal wenn das Hotel irgendwie Cuck Internet hat oder mir zwischendurch die Internet Connection weg bricht, weil ich brauche nicht zwingend ausgehende Connectivity um weiterarbeiten zu können und es ist einigermaßen sicher dass die Leute sich nicht gegenseitig mit sehr wenig Aufwand irgendwie Dinge kaputt machen weil sie aus Versehen irgendwie Unfug treiben Hypervisor die Frage war was Notebook HV bedeutet es geht um Hypervisor also wenn ich den Hypervisor auf ein Notebook tue dann kann ich damit Zug fahren was fehlt jetzt noch wenn es aufgefallen ist vielleicht DNS das ist so der nächste Punkt auf der To-Rule Liste momentan muss ich den Trainies noch mitteilen welche IPs sie haben und welche IPs ihre VMs haben das ist ein bisschen anstrengend DNS muss ich damals noch bauen hatte nur bis jetzt noch nicht die Zeit dazu das ist definitiv als nächstes und full IP for 6 capability ja das also ich meine das funktioniert das auf v4 und das ist schön aber wir haben ja nicht mehr 1990 also eigentlich wollen wir das auf v6 machen und der Aufwand hält sich halt auch an Grenzen weil wir haben ja die Mac-Adressen vorgegeben also können wir irgendwie mit Slug was sinnvolles tun und finden unsere VMs sind daher wieder das heißt das muss man einfach halt noch bauen also der große Traum der dahinter steht ist halt so ein Training to go Koffer ich klappe meinen Koffer auf drücke einen Stromkabel da irgendwie in die Wand und dann drücke ich auf einen großen roten Knopf und dann geht es los also ich arbeite irgendwie in der IT Security Firma ich bin in der internen IT tätig ich bin jemand der baut so was die anderen sind mehr so die Kinder die irgendwie vorbeikommen wenn man früher Jenga gespielt hat und die laufen mit zum Zimmer rein und drücken gegen den Turm und sagen hii und laufen wieder raus das sind mehr so die Breaker die machen aber auch total viel sinnvolle Schulungstätigkeiten und so weiter das heißt ich will irgendwie das Leute die nicht Bilder sind vom Selbstverständnis und vom Kompetenzlevel her das einfach verwenden können ich will denen das irgendwie mitgeben und sagen hier hast du ein Notebook und irgendwie hier ist ein Zettel drei Befehle drauf gib die ein und dann sei glücklich ja das wäre so das wäre so die Idealforstellung was da irgendwie nachher umkommen soll gut das war es jetzt erstmal von meiner Einführung zu dem Thema ich kann gerne beliebige Dinge aus dem Ansible Code zeigen oder wie ich es gebaut habe konkret da würde ich jetzt gerne irgendwie auf eure Fragen und Wünsche Rücksicht nehmen haben wir Mikro da würde es den Vorgang nicht so was stark beschleunigen mit Images zu arbeiten und danach nur noch mit diesen Copy und Write Funktionen von KVM dass man quasi ein Basisimage hat und er nur noch bei den ganzen Vms die Änderungen jeweils zu dem Image abspeichert ja also ja würde den Vorgang beschleunigen definitiv gut du hast halt initiär relativ viel Latents um die Images zu kopieren weil das im Moment war jetzt tatsächlich in meinem Fall ein ich brauche unbedingt Latest Greatest und wenn ich das in 2 Wochen mit dem selben Image kopiere dann ist doof aber wenn man das nicht braucht ist es definitiv schneller da Basisimages zu kopieren das könnte man im Prinzip ja so kombinieren das war quasi nur das Basisimage Neubop mit Latest und Greatest und beim Spawnen der Clients jeweils nur wieder mit diesem Copy und Write die einfach auf das neue Basisimage zeigen lässt dann geht auch das zurücksetzen ich sage mal ich lösche einfach nur die Delta und lasse die neu erstellen ja das könntest du also dazu bin ich tatsächlich nicht firm genug mit der Handlungsweise mit den Deltas ich weiß nur das wenn ich ein Image neu installieren lasse und das dann kopiere es hat auch nicht mehr schneller geworden ist also wenn ich einfach alle neu installiere könnte ich das irgendwie durchgeben da wollte ich noch kurz was hinzufügen also was mir gerade eingefallen ist wenn man jetzt LVM und Snapshots nutzen würde also um ein primär System aufzusetzen und dann nur die Snapshots an die verschiedenen VMs durchreicht würde ja das Ganze erheblich beschleunigen denke ich mal es ist sehr effektiv genau dasselbe also ich habe halt in einer Variante habe ich es installiert in einer anderen Variante habe ich KUKAO 2 Images ein fertiges Image hatte das kam aus einem Virtual Box und ich habe es passend konvertiert ob der jetzt KUKAO 2 Images kopiert ist oder das LVM Snapshots und her kopieren lasse das macht dann auch keinen Unterschied weil das war das was ich ganz beliebig viele Varianten machen der Gag ist ja dass man LVM Snapshots überhaupt nicht kopieren muss ja true also ja das wäre nochmal deutlich schneller nur eins haben das ist jetzt nicht so direkt irgendwie mit dem Thema hat das was zu tun ist auch keine Frage, sondern hast du schon mal was von Jam 5 gehört hast du ja gerade Werbung oder was wird das nein, aber das wird dich vielleicht interessieren, mehr wollte ich nicht das ist ganz interessant also nee, tatsächlich nicht das ist mein Thema nee, da kannst du quasi auch virtuelle Maschinen wir haben ja so QEMOS Style mäßig aber das geht halt bis rein in die Hardware also bis in diese Mikro also noch klein, teiliger als Assembler irgendwie, Mikro, Befehle oder wie heißt das das kannst du da halt auch simulieren das ist ganz interessant, das ist eher so wenn du mal forschen willst das geht spannend Jam 5, G E M 5 Danke für den Tipp ja, hallo erstmal, danke für deinen Vortrag ich mache sowas ähnliches am Institut für Informatik in Halle und dann wollte ich mal fragen gibt es einen Grund, warum du dich für KVM und LibVirt entschieden hast und da nicht LXC oder LXD benutzt wie ich eingangs sagte, man könnte das Ganze sicherlich auch und ich habe kurz mal darüber nachgedacht, das in Docker oder anarbeitigen Containertechnologien zu lösen könnte vermutlich schneller werden waren wir tatsächlich für mich so eine Alltagsprobleme ich habe irgendwie eine Woche Zeit um das Zeug zu bauen, also nehme ich am Ende die Technologie mit der ich mich am besten auskehle und mit der ich mich am sichersten fühle das war an der Stelle KVM mit Docker jetzt mich 2 Tage mehr gekostet weil ich da mal ein bisschen was gemacht habe so Grundlagen Ahnung habe mit LXD habe ich einfach noch nie gearbeitet aber der Aufwand, das da drauf umzubauen, was ich gemacht habe von allem was ich irgendwie über diese Technologien weiß ist tatsächlich sehr, sehr gering also wenn ihr jetzt ein Dockerfile hättest da musst du halt effektiv 2 Files in dem ganzen Ende zu belegen und darauf anpassen und dann könntest du das gleiche machen Geht das? Ja ja ich baue gerade dasselbe was ähnliches auf Arbeit quasi SQCoding Schulung wir haben quasi ein Kali und ein DVWA wir machen das einfach mit Wegrant, dass wir einfach deployen die Basementures ich baue aber noch was ähnliches und was ich brauche ist ich hätte gerne Netze die ich quasi wieder wegnehmen kann kannst du da was empfehlen? das kommt drauf an womit du arbeitest also ich habe jetzt das komplette Netzwerk Setup mit Ansible und EDC Network Interfaces gebaut es kommt jetzt stark drauf an Arbeitest du mit Linux, Arbeitest du mit BSD wie willst du die Netze erstellen wie dynamisch muss das Ganze sein also für mich war halt die ich lege die Interfaces in der Konfiguration an und nehme sie hoch variante ausreichend wenn du jetzt was stark dynamisches haben willst gibt's natürlich auch Möglichkeiten oder je nachdem was du jetzt irgendwie an Netzwerk ding machst es gibt Möglichkeiten in QEMU zum Beispiel Cisco devices oder ähnliches zu emulieren also virtuelle Images das gibt's auch noch alles und über ein System die Network die kannst du gehen wir nutzen halt ESX bitte? wir nutzen ESX als Hypervisor ja dann kann ich dir leider nicht helfen weil dafür hab ich kein Geld also geht bestimmt aber ESX-Testen ist immer so teuer sollst du auch fragen? vielleicht hab ich den vielleicht hab ich den Part grad übersehen und zwar wie bekommst du die SSH Keys in die VMs in dein Enzybil oder hab ich das irgendwie grad wie funktioniert der Zugriff da? also ich bekomme meine SSH Keys in die VMs Moment jetzt geh ich tatsächlich mal also es ist irgendwie ich zeig's mal ganz kurz das ist irgendwie mein Enzybil Repo dem Ding gebe ich irgendwie mit Anzahl der User und noch ein bisschen Interfaces und noch irgendwie welche Dinge du laufen lassen musst also das ist tatsächlich das Preceeding was ich mache in dem Fall hab ein Skript das mir zusammen mit einer runter geladenen Innet-ID von einem aktuellen Installer bei mir heißt der DI Addons für den wir ein Installer Addons mit da rein lädt in die Innet-ID und da hab ich so ein kleines Skript das kopiert mir irgendwie Resolve Call and Message of the Day Basher C, Wimmer C, ScreenRC und dann halt irgendwie hier so nette Dinge wie einen SSH Key für die Schulungs VMs dass sie auf den Hypervisor kommen mit den Git Repos eine Authorized Keys damit ich da draufkomme bestimmt also das läuft halt irgendwie in der letzten Stage des Installers und die pläut mir halt zum einen in das Home von dem Schulungs-User wie ein Keyset das auf den Git Repo freigegeben ist und es pläut mir halt einfach in das Home Verzeichnis von Root eine Authorized Keys wo halt dann mein Pubkey drin liegt das ist so das ist so die Variante also wenn es interessiert wer irgendwie viel preceeding macht oder so da gibt es hier so ein kleines ach verdammt, es war der Link da gibt es hier so ein kleines Foto, was ich mal gebaut habe zusammen mit einem Freund das dir einfach tatsächlich auf die Frage Distro und Arch und Debian oder Ubuntu passend runter lädt ein Linux Image eine Init-RD wenn du ihm kein Preceed mitgibst beziehungsweise keins da in dem Folder liegt dann legt er dir irgendwie ein Preceed an wo automatisch SSH Installer für Debian angemacht wird ansonsten holt er dir halt irgendwie die Images und macht dann irgendwie ein mach mal CPIO mit dem Zeug was ich hier habe und baulert Ding Neu und fertig damit baue ich mir halt irgendwie mit jedem Preceed was so rumliegen hat mal eben eine neue Init-RD weil das meistens einfacher ist als meistens einfacher ist dann einzeln jeweils die Preceeds wieder Minus, Minus, Inject Init-RD, Tralala, Flag weil manche Tools können wieder nicht und so und die ganzen Kernelparameter mitgeben ist gerne mal lästig deswegen packe ich das einfach direkt rein die andere Variante ist dass ich tatsächlich weil so ein Ubuntu Latest Greatest mit einem aktuellen Enzybel kommt sondern einem 2.3 und nicht einem 2.4 ist so eine Rolle die dann halt das Enzybel updated und da hab ich dann, ah, komm jetzt mach ah nee, hab ich ausgebaut euch noch ein Preceed da hatte ich ursprünglich mal das Kies-Deployen drin ah inzwischen hab ich so ein Preceed genau und so sieht dann halt irgendwie mein Enzybel-Repo dazu aus ja, bald Activation of VMs, Creation of VMs halt getrennt, weil wie gesagt, ich muss das XML neu erzeugen wenn ich sie installiere sobald ich kopiere, statt zu installieren kann ich mir diesen Create Schritt komplett sparen und kann dann einfach nur sagen hier und start, die sterben beantwortet das ja, ja, ok ich hätte noch eine Frage du hast ja vorher die Rolle gezeigt wo du Enzybel update ist startest du das Playbook dann nochmal neu oder hast du da ein Handling drin dass Enzybel sicher mehr oder weniger Selbstskill beim Updaten sowohl als auch, also es kommt drauf an es gibt einige Rollen die sind direkt aneinander gekoppelt wenn ich das Update Enzybel ausführe und eh auf alle VMs nochmal connecten muss nach der Installation dann macht er mir auch gleich das Exercise-Deployment und so weiter mit das wiederum hängt alles direkt an der Activation von der VM aber halt diese 2 Schritte sind dediziert getrennt, weil ich halt sage, ich würde gerne irgendwie vorher gemütlich im Büro den Kram Create'n runterfahren in den Coverraum packen und am Schulungsort dann sagen, fahren mir die hoch und der Hypervisor ist halt eine Rolle die muss ich eigentlich nur einmal am Anfang ausführen, weil der macht die ganze der legt die Netze an und so weiter installiert ein Lip-Wort legt die irgendwie passenden Verzeichnisse an und so weiter macht die Kerneloptimierung und solche Dinge setzt den Scheduler setzt den Aprox auf die brauche ich nur einmal die kann ich so lassen wenn ich nicht groß was ändere und die Destroyer und Cleanups sind halt einfach getrennt, weil vielleicht möchte ich die VMs entsorgen, aber halt im Morgen die gleiche Schulung nochmal, da muss ich nicht den ganzen Hypervisor Cleanup durchlaufen lassen, also manche sind gekoppelt manche sind absichtlich getrennt weil ich nicht den Use-Case habe sie nicht manuell aufrufen zu wollen Wasser fragen sagt denn die Uhr 10 Minuten hätten wir noch könnt ihr das Mikro kurz hier nach hier vorne Hallo, hört man mich? Ja, ich werde nur eine Anmerkung machen zu dem Kernel-Sampage Merging das ist sehr praktisch und in dem Umfeld ist eigentlich egal aber das war möglich Zeit-Channel-Attacken, das heißt das würde man nicht auf Systemen wo sich die Parteien wirklich was Böses gegeneinander wollen einsetzen Ja, das ist ein guter Hinweis wie gesagt, das ist ein deppensicheres Setup und kein wasserdichtes und auch das ist so da sollte man wissen was man tut wenn man es nicht für Schulungen einsetzt bitte nochmal um es zum Installieren ein und zum Betrieb wieder ausschalten kann, was meinst du in dem Kontext mit ausschalten? Naja, das Thema ist war gerade Zeit-Channel-Attacken Ah, du beziehst dich direkt aus Kernel-Sampage Merging das ist nicht gemapped Ja, kann man weil es gibt einfach einen Service der das macht das ist der KSM-D oder KSM-Tune-D da sage ich halt irgendwie in der Konfig ab 50%, 60%, 30% Rammauslastung fangen damit an ich kann zum einen natürlich die Konfig irgendwie bearbeiten das fangen nie damit an oder ich führe halt irgendwie ein System CTL KSM-Tune-D Mask-Disable oder wie auch immer aus das ist tatsächlich relativ einfach Das heißt, ich kann mir den Speed abholen wenn ich im Labor sitze und installieren muss und das danach ausmache und habe etwas sicherer Betrieb Ja Problemlos, ja Gut, wenn es keine Fragen mehr gibt dann danke ich euch für euer Kommen