 Ja, wunderbar, dass ihr alle da seid. Wir hatten die obligatorischen technischen Probleme, die man auf einer Chaos-Veranstaltung ja irgendwie schon fast erwartet, gehört aber irgendwie dazu. Man kennt das ja, BIMA-Bild-Dinge. Der Scopi wird euch heute was erzählen zu Linux, Network, Namespaces vs. VHFs. Macht das hauptsächlich in seiner Freizeit, unter anderem beim Freifunk aktiv in der Richtung. Die Bühne gehört dir. Viel Spaß. Hi, ich bin Scopi, mache Dinge mit Internet und so was. Ich erzähle euch was über Linux, also Policy-Based-Routing-Premier, VHFs, Namespaces und ähnlichem. Kleine Historie zu den 1999ern, wo MPLS-Aufgaben kam, jetzt auch LR3. Wir brauchten LR3 wie VHFs, was so das Equivalent zu V-Lands auf einem Router in hardware ist. Und in der Zeit kam, dass das auch im Linux, kam im Linux-Fernel an, das man multiple Routing-Tabellen benutzen kann. 2002 gab es Network-Namespaces und 2015 hat Cumulus-Networks eine Implementation. Vorher gab es schon Implementationen, die aber nie in den Mainline-Kunnel reinkamen. Das war aus verschiedensten Gründen, weil es nicht mit dem Tooling so wie es jetzt gegeben war und mit der AP zusammengetan hat. Man muss einfach auch zu viele Änderungen machen. Die Idee war, ohne größere Änderungen das einzubauen. Mit VHF3-Akunden kam das für V4 und mit V6. Da tut sich immer noch was, das ist auch mit V14 noch so ein bisschen zum technischen Teil. Network-Namespaces, da geht es um die komplette Isolation an das Netzwerk-Stacks. Das Device, die Netzwerk-Adressen, Neighbors, Routing-Tabellen, Protokoll-Ports und Sockets. Gerade die Sockets, das ist relevante im Vergleich zu VHFs. Ein Prozess kann immer nur einen Namespace haben. Da kann ich über mehrere Namespaces verteilt arbeiten. Bei VHF geht es nicht um den kompletten Network-Stacks, sondern nur um den Late-Reise. Nur um den IP-Stack, dass der isoliert wird von einem Interface oder von mehreren. Das gilt immer für V4, V6, genauso wie bei Namespaces. Eine VHF entspricht so grob einer Kernel-Routing-Tabelle. Wenn ich eine VHF Anlege erzeugt, er in einer Routing-Tabelle in einem Kernel, so dass ich dort damit arbeiten kann. VHFs können in Namespaces sein. Das war auch eine relevante Sache, dass das bei Namespaces nicht ging oder auch in vorherigen Implementierungen, dass ich das nicht so trennen konnte. Wenn ich jetzt eine VHF Erzeugung und dann IP-Routes zeigen gebe, dann sieht man hier oben, dass da dann diese L3-Devices angelegt werden. Also diese L3-Routes, das ist halt der Unterschied zu IP-Routes, wo ich dann unter Umständen enorme Mengen von diesen Regeln hätte. Wenn ich dann würde von diesem Interface inbauen und outbauen, gehen diese Routing-Tabelle, das wäre ein sehr ähnlicher Effekt. Aber ich hätte auch noch einen Performance-Unterschied, weil ich jeden einzelnen Eintrag durchgehen müsste in der Liste und nicht einfach einen Anfang schnell da reingehen könnte, schauen könnte, ob das etwas für dieses Interface gibt und dann weiterarbeiten könnte. Ein großes Beispiel, so das Einfachste eigentlich, wo man es dran sieht, was eine VHF tut. Ich rufe dem Befehl, eigentlich mache ich nur ein Trace-Rout, so einen Cloud-Fair, den S1 oder Resolvern und schauen wir uns mal an, was dann so passiert. Das ist immer von der gleichen Systeme aus. Ich habe einfach nur eine SSH-Session aufgemacht, bin an meiner Default-Shale, sonst ist das zwischen diesem Befehl keinen Unterschied beim Aufruf. Wenn ich einen Trace-Rout mache, dahin seht ihr, dass das hier über drei Hubs geht, mit denen beim, das hier, die 2 ist dann schon Cloud-Fair und die 3 dann halt das Ziel. Das Relevante ist aber eigentlich ein Interessant hier, die 185. Das ist jetzt einfach über die ganz normale Routing-Tabelle aufgerufen. Das habe ich noch nicht irgendwie am Routing geändert, noch keine speziellen Sachen getan. Ganz normal, standardmäßig. So, jetzt möchte ich aber, das ist beispielsweise mein Management-Netzwerk machen, wo ich testen möchte, hm, wo geht es denn da lang? Was passiert da? Gibt es auch vielleicht Probleme oder natürlich auch andersum? Einfach den Vergleich ziehen, wo ist der Unterschied? Dann gibt es die Möglichkeit, ich rufe das mit IPvf auf, Exec Management, also Exec ruft den Befehl auf. Management ist jetzt der Name der vf und Trace-Rot dann einfach der Befehl. Und dann kann man hier sehen, ich habe hier nicht mehr die 185 als Pop, als Pop in meiner Route. Und dadurch kann man erkennen, dass das jetzt über einen anderen Weg geht. Also, Ziel erreicht. Ich habe mein Management-Netzwerk benutzt und nicht meine normale Routing-Tabelle. Das Gleiche geht auch mit einem normalen Trace-Rot, ohne dass immer eine vf über den IPvots Befehl aufgerufen. Aber dann habe ich es an dieses Device gebunden, an dieser vf gebunden. Und das war auch explizit ein Ziel von den Konditionellenbewegungen von Cumulus, dass ich sagen kann, hier, ich möchte das an dieses Device binden. Ich möchte über diesen Fahrt gehen und nicht groß im Programm was ändern. Denn ich kann auch einen vf, ein Programm, das ich vf benutzt, kann auch über mehrere Routing-Tabellen, Entschuldigung, kann auch in mehreren vfs arbeiten. Das heißt, ich kann sagen, ich kann dann SS Hardiman, kannst du mal starten. Und dann muss ich noch den Kördel mitteilen, zudest. Und dann kann ich von jeder vf, diesen SS Hardiman erreichen, solange ich das nicht mit IP-Tabels oder den ich nochmal absicher. Und so muss ich Prozesse nicht mehrfach starten, wenn ich die brauche. Das heißt, ich kann auch von meinem SS Hardiman aus meiner normalen Routing-Tabelle aus dem Kundennetz und auch aus dem Management-Netz beispielsweise zugreifen. Genau. Wenn ich Trace-Rot aufrufe, dann ist das mit defekt das gleiche Ergebnis. Es ist nicht, also bei welchen Name-Space, mit welchen Name-Space benutze, könnte ich IP, Latin S, Hexac, den Name-Space-Namen, Trace-Rot und so weiter aufrufen. Das hätte gemessen, also es ist defekt, wäre das gleiche. Aber ich kann nicht an einen Interface binden. In der Form, wie das hier gemacht ist, dass ich in Trace-Rot und dann nehme einfach und mein Device auf dem Name-Space oder den Vf-Binde, das geht einfach nicht mit Name-Spaces. Das war nie so gedacht. Das war einfach, dass ich wirklich eine Isolation habe, vollständig getrennt. Genau. So, einfach ein paar Direkt-Sticks zu den Netflix-Namespaces oder wann ich das auch benutze. Wie ich auch überhaupt zu diesem Talk habe, Menschen haben Systeme, wo sie den Tunnel, wo sie den ganzen Traffic über den Tunnel ausleiten möchten. Das heißt, sie haben ihr Ether-H0, wo sie eigentlich nur für den Tunnel benutzen und den Rest, der gesamte restliche Traffic auf dem System soll über den, durch diesen Tunnel laufen oder das Ether-H0 oder das Ähnliches. Lange Zeit war die Lösung IP-Rules. Das Problem, wenn ich IP-Rules benutze, ist, wenn sich die IP-Adresse sich ändern sollte, als Zuhause IP-Adresse, das kann ich einfach ohne ein Skripte nicht abbilden mit IP-Rules, das geht nicht. Dann muss ich darum rumskripten. Ich kann vergessen, dass ich das für V6 oder V4 mache. Es kann passieren, dass ich das nur für 1 von beiden mache. Dann liegt irgendwelche Traffic und man dann die Misierungen, die ich unterm Schirm brauchte oder das Firmnetz, macht dann Probleme. Ich benutze andere DNS-Server und so weiter. Alles, was ich nicht haben wollte. Das ist so das Problem an IP-Rules. Network Namespaces war dann für viele dann doch die Lösung. Dann lasse ich mein Tunnel an Open4p, in mein Weihgat wie auch immer in der Namespace laufen. Ich nehme das Tunnel-Interface in die normale Umgebung und binde ETH0 oder mein WLAN-Interface in den Namespace. Das funktioniert so weit ganz gut. Das Problem ist beispielsweise, meine Nameserver müssen dann in der Namespace aus erreichbar sein. Das kann gegebenenfalls nicht der Fall sein, wenn ich beispielsweise vor 6 Namesverver nur genommen habe und weil ich davon ausgehe, dass ich durch den Tunnel immer vor 6 habe. Aber dann kann ich vor 6 haben, weil ich jetzt in einem Idiom von vielen Unisband, die halt kein vor 6 haben, ein bisschen nur vor 4. Das könnte dann ein Problem sein. Ich kann auch nicht PSSH über die Public IP-Adresse zugreifen, sondern nur über die V4-Adresse. Entschuldigung, nur über die IP-Adresse, die ich über den Tunnel bekommen habe. Denn der SSH-Demon wenn er normal läuft, ist er nicht in der Namespace gestartet. Ich könnte natürlich dort einstarten, aber dann habe ich nicht Zugriff auf den restlichen Stick. Und eine praktische Lösung ist der VFs. Das ist die praktischste Lösung für VFs im Alltag, für den die meisten das auch nutzen können. Ich sage einfach hier ET0, du bist jetzt in der VF extern und dann starte ich mein Tunnel da drin. Der läuft da fröhlich rum und der Tunnel-Interface ist dann über den normalen VF. Und so kann ich weiter mein SSH-Demon und ähnliches verwenden. So habe ich da keine größeren Einschränkungen. So. Wofür ich das insbesondere benutze, sind Management-Netzwerke. Ich habe einfach meinen Server, ich habe da die Befürchtung, dass ich irgendwann mal ein Problem ist, dass ich ja nicht draufkomme oder dass ich das über eine weitere Box geregelt habe, die halt per Tunnel, wo ich mein Tunnel aufbauen kann, um in dieses Management-Netzwerk reinzukommen. Einfach, dass es in einer anderen Umgebung ist, abgetrennt vom normalen Netz, mit anderen Firewall-Regeln vielleicht. Wenn es zurücknames-Bases habe ich das Problem, dass ich ein extra SSH-Demon bräuchte beispielsweise, und noch viel größer. Ich habe keinen Zugriff auf die anderen Interfaces, weil die alle weg sind. Das heißt, ich kann nicht auf die Statistiken zugreifen und hoffe, ich möchte extra bei meinem Management-Netzwerk die Statistiken von den Routern von den Geräten abfragen. Ich möchte mir anschauen, wie viel ist denn durch die Sachen durchgegangen. Ich möchte das nicht mehr über das Public Internet laufen lassen und ich habe meinen extra Netzwerk, das nur für die Management- und die Statistiken da ist. Einfach eine komplette Isolierung von dem Netzwerkstack beschränkt mich da einfach zu sehr ein. Das funktioniert halt einfach nicht. Es wird lange benutzt. Da wurden teilweise coole Dinge herum gebaut, oder dass man dann wieder von der Kiste mit VITHs nochmal an SSH-Verbindungen herumbaut aber nicht die schönsten Lösungen. Man kann es auch mit IP-Rules bauen aber auch nicht so eine wirklich schöne Lösung. VFs hat einfach nicht diese Nachteile. Das tut halt einfach. Ich sage hier, gehen in diesen Management-Interface mach das auf. Komm mit meinem SSH-Dement drauf. Mein prometes Note-Exporter ist immer noch erreichbar darüber. Mit IP-Tables kann ich das passen absichern, dass es nur über die VFs beispielsweise wäre, wenn ich das dann brauche und nicht mehr einfach nur über das Publik Internet oder nur über das Namespace ist. Muss es keine Software mehrfach starten was natürlich auch ressourcenschonend ist. Genau. So. Warum Cumulus ist gebaut hat. Also warum die überhaupt die Investitionen gemacht haben dass sie in den Können auch abstürmen zu bekommen ist Hardware-Offloading. Heutzutage gibt es so lange Zeit, glaube ich, Router nur für ein paar großen Herstellern die hatten ein sehr profitäres Betriebssystem da drauf das aus BSD so ein Linux gemischt stand und mit irgendwelchen profitärer Software dann den Ship vom Router bespaßert. Ich rede hier gerade so von großen Routern über 10G-Bereich auch schon ab 10G und Cumulus und ist ein Softwarehersteller für sogenannte Widebox-Switches die halt vom Linux aus den Ship dieses Routers steuern können so dass ich dort halt meinen Routing-Tabellen in den Router abbilden kann und das nicht durch die CPU leiten muss und da gibt es noch eine offene Implementierung die im Liegungskörnel drin ist der Switch-Step und damit kann ich von ein paar Herstellern auch mit Open-Source Software zumindest die Ships bespaßen. Das ist leider noch nicht vollumfänglich manche Hersteller haben da profitäre Erweiterung oder Sachen die ich nur über die profitären APIs benutzen kann aber zumindest reines Offloading von Routen in den Switch bzw. in den Router funktionieren und dafür hat halt das Cumulus gebaut Network-Name-Spacees funktionieren beispielsweise nicht mit dem Offloading das tut halt einfach nicht das Konzept ist dazu anders ein Network-Name-Space kann man sich eher so vorstellen wie einen ganzen eigenen Switch und das gibt es auch nicht so direkt einfach im freien Wildbahn kann man immer bauen aber ist jetzt nicht direkt gedacht so und daher kommt das genau für brauche ich das wenn ich einfach in einem Switch z.B. so diverse Routing-Tabellen habe beispielsweise weil ich einen Kunden habe in einer Cloud-Umgebung die halt alle private IP-Adress-Spaces benutzen können und dann ihre Formen laufen lassen und wenn jeder die 1.2.1.6.8.1.7.8 benutzt dann tut das jetzt nicht wirklich so mit IP-Rules bzw. gar nicht bei Network-Name-Spacees hätte ich das riesen Problem ich müsste für jeden Name-Space einen Routing-Demon dann starten, damit die Routen verteilt werden können zwischen den einzelnen Switchen oder einzelnen Server das können ja auch schon die Hypervisor sein und bei VRFs habe ich einfach die Möglichkeit hinzugehen und aus der Routing-Tabelle das auszulesen, die der Kölner stellt hat und halt auch direkt da rein zu schreiben das heißt Routing-Demon nach minimalen Updates von der Software das können alle modernen Routing-Demons Birt seit 1.6.3 können halt in den Routing-Tabellen von den einzelnen VRFs rumschreiben und die dann halt auch so mit verbinden und auch zwischen Servern halt machen gibt es ein paar Ansätze, ein paar Lösungen kann man im Internet suchen oder mich dann fragen wenn da weiter Interesse besteht zu explizitem Thema so das habe ich schon ein bisschen zusammengefasst gehabt wann verwendet VRFs also meiner Meinung nach man kann immer drum herum mochen es geht immer anders aber halt gerade bei Management-Netzwerken und ähnlichem gerade wenn ich mehrere default Routen habe oder eine default Route in diesem Management-Netz dann ist das eine ziemlich gute Lösung oder wenn ich halt Tunnelinterface benutze mit oder ohne die default Route aber die halt einfach eine größere Solierung vom Netzwerkstack machen sollen und dann wenn ich verschiedene Forwarding-Tabellen habe nicht nur pro Kunde beispielsweise jetzt kann ich auch einfach sagen dass ich verschiedene Qualitätsstufen für Traffic habe zum anderen für eine extra Software dass ich die schon sehr früh in meinem Netzwerk markiere und anders rute beispielsweise weil das Telefonie ist oder Video, Livestreams die haben ja ja so eine Echtzeitbedürfnis und dann FDP können jetzt auch notfalls irgendwo anders solange ruten weil dann ist der FDP etwas langsamer aber weniger Leute als das das Telefonat qualitativ schlecht ist genau, also nicht nur bei Overlaping IP-Spaces sondern halt auch einfach bei verschiedenen Qualitätsansprüchen oder ja, was man halt vielleicht auch einfach das Kunden verschiedene Routine-Tabellen präsentiert bekommen je nachdem was sie bezahlen wenn eine der Meinung ist nur das billigste Internet kaufen dann kriegt er auch nur das billigste das kann man da drüber auch abbilden wenn man das möchte wenn man so lebt da geht einiges und ja in den meisten Fällen kann man das viel gesagt auch mit IP-Routes bauen letztes kann man sehr schwer mit Namespaces abbilden genau ja auch man kleine Zupfote von IP-Routes also von V-Routes V-Routes sind immer vor 4 und vor 6 und es gibt Fälle wo ich kein V-Routes benutzen kann beziehungsweise will das explizit wenig halt unterschiedliches Verhalten für vor 4 und vor 6 brauche also wenn man das braucht dann muss man aufpassen und eigentlich auch keine Namespaces benutzen dann muss man IP-Routes den gebaut gibt Dinge die nicht mit Namespaces wirklich schön tun nehmen wir mal an, dass man mehrere Netzwerkinterfaces nach außen hat und man aber keine LACP bauen kann warum auch immer dass man bei verschiedenen Providern ist dass es einfach technisch geht und ich eine Software mehrfach laufen lassen möchte weil die beispielsweise sehr viel Trafficker zeugt, das ist ein FTP-Server oder ähnliches und dann könnte ich natürlich das in einem Namespace laufen lassen das ist Interface in einem Namespace bewegen und die Software dann dreimal jeweils schon starten das tut noch soweit es tut aber nicht mehr wirklich gut wenn ich dahinter ein weiteres Netzwerk habe was ich z.B. für den Zugriff auf die Daten brauche wenn ich jetzt eine Software habe die halt noch einen Management-Netz oder einen Daten-Netzwerk solches Netzwerk dran muss dann tut das nicht mehr dann könnte ich mit VITH Dinge bauen das geht wieder aber so direkt kann ich nicht sagen, ihr könnt dann weiterhin auf diesen Stolzsch-Netzwerk darauf zugreifen das geht mit VFs ich kann einfach sagen hier ist Software, benutze diese VF mit einem beidrufenden Interface und dann kann ich über die normalen Routing-Tabellen ich kann eben eine Routing in dieses Netzwerk geben und dann kann das über das ganze Mal eine Routing noch abbilden ohne nut und ähnliches gerade wenn ich keinen Connection-Tracking laufen möchte dann kann ich auch keinen Nut benutzen das ist im Endeffekt wie ich darauf kam, dass das Netzwerk nicht tun kann wenn ich halt keinen Nut benutzen kann keine Triggerung, wenn ich keinen Connection-Tracking benutzen kann so habt ihr Fragen? ja bin ich froh erst mal vielen Dank ich glaube, ich habe eine Menge dazu gelernt mein Problem ist ungefähr einem Level über meinem Level ich habe festgestellt, ich verstehe vom Netzwerk anscheinend echt überhaupt nichts, ein bisschen schon aber das klingt total spannend ich kann auch Einsatzzwecke irgendwie unverkennend erkennen was mir jetzt fehlt, ist der erste Schritt wo würdest du sagen sollte jemand wie ich irgendwie ein grundlegendes Verständnis von Netzwerken, aber da schon ich verstehe dir Wörter aber dann ist auch schon vorbei wo kann ich gucken, wo kann ich lesen wo würdest du sagen, was ist der richtige Einstieg um dann mal ein Gefühlsvögel zu bekommen und das auch zu verstehen das ist ja eigentlich die Frage ich denke das wird einiges so gehen das Problem ist also jeder lernt an der Stelle, denke ich ganz anders weil ich muss ja irgendwie erstmal verstehen wie vorwürdig klappt wie das wie wenn ich an welcher Schaubestelle was dann passiert und da sehe ich einfach das einmal durchzuprobieren mal einen VPN aufzubauen und das mit IP Rules abzubilden, mit FOILF zu abzubilden und mit Namespace zu abzubilden zu den Anfang dann kann ich mir in defekt schauen wo ist der Unterschied, warum ist da eigentlich kaum ein Unterschied, nur anderer Aufwand ja, ich muss ich ganz ehrlich sagen, fällt mir gerade schwer die Frage direkt zu beantworten, weil das ist doch einfach also ich fasse ja für mich zusammen der Klassiker MainPages lesen und im Zweifel mit dem Kopf durch die Wand ja ich glaube es ist ein Pfeil von probieren von bei den Vorwürdig-Kramen bei Netzwerk-Kramen erstmal Routing Loops zu entdecken oder auch zu verstehen warum manche Dinge so sind wie sie sind, ist einfach ein ausprobieren um den Schmerz zu haben wenn ich einen Wunsch hätte ja also du weißt ja anscheinend wie es geht vermute ich jetzt mal also es kann zumindest so vielleicht irgendwann mal ein Talk darüber machen so nicht mehr ganz noobs, aber irgendwie doch ein bisschen unter dir fällig cool ja oder den Workshop genau also ich nutze die Gelegenheit mal, weil die Frage vorhin in einem anderen Talk schon mal so ähnlich aufkam ich mach mal Fremdwerbung in deinem Talk gerne auf der Frostcon, die in Bonn stattfindet irgendwann in diesem Jahr noch ich weiß das Datum gerade nicht auswendig da gibt es irgendwie von einem der Kollegen die auch im Nock sitzen ein Network-Enablement-Track ich weiß nicht genau auf welchem Level der aufgehangen ist aber das wäre vielleicht ein Ansatz den man sich mal angucken könnte also wir haben uns nicht abgesprochen, ne noch ist es möglich über ein Interface verschiedene VRFs zu routen und wie wenn es geht, wie unterscheide ich am anderen Ende aus welchem VRF jetzt die IP-Adresse kam das ist nicht möglich was möglich ist ich kann es, wenn es geht einen Forderland beispielsweise machen oder ein Tunnel daher sind die auch eigentlich entstanden also daher war die Geschichte von den Herstellern mit den Leer 3 VPNs das ist ein Tunnel zwischen den Routern im Netzwerk besteht im Endeffekt dann das markiert ist das ist diese VRF so ungefähr wird dann weitergeleitet und dann kann ich diesen Tunnel an der VRF hinzufügen das wäre dann eigentlich die Lösung wie sieht es denn mit Support in Network Managern oder Network die und ähnlichem aus für VRFs zum anlegen, erstellen, Managern Interfaces zuweisen und ähnlichem Spaß mir bekannt ist nur Ihr Faptown 2 von Cumulus das dann einen akzeptablen Support dran hat man hat mal darüber gesprochen das Ding mit Systemdeals zu tun aber das ist immer ja besonders bis da mal was drin ist wo alle zufrieden sind also Systemdeals hat einen akzeptablen Network Manager hat viele Vorteile aber das Ding also das Prozessmanagement das Servicemanagement funktioniert ist nicht immer gegeben korrigiert mich wenn es ein Update gab aber ich kann einen Prozess nicht sagen statt in diesem Network Namespace das gibt es auch noch nicht das gibt's okay aber es gibt's mit ja okay es ist sehr viel Frickel aber ich kann nicht explizit sagen okay einfach angeben hier in diesem Namespace und mach sondern ich könnte natürlich einen IP-Exec und so weiterbauen, es gibt viele Möglichkeiten ich kann auch natürlich ein SystemD extra für diesen Namespace starten aber so direkt möglich ist das im ganz einfachen Stil nicht mit VHFs auch noch nicht gut, noch jemanden Frage vielleicht noch eher ein Kommentar wenn ich mehrere VHFs habe kann ich zwischen diesen VHFs mit ganz normalen Roten Treffigen und her schieben also ich kann ja mit IP-Root Treffigen schicken meine Pakete mit dem IP-Ziel an das Device wenn ich da unter Def ein VHF angebe gehen die Pakete halt über das VHF raus damit kann ich halt relativ bequem bestimmte Netzbereiche von dem einen VHF in einen anderen weiter roten ja genau da war kein Fragezeichen am Ende ne? noch jemand gut, dann scheint der Wissenslos befriedigt wir sind glaube ich ein ganzes Stück vor der Zeit fertig ja, wenn du jetzt nicht noch irgendwie einen halben Vortrag versteckt hast vor uns dann würde ich sagen vielen Dank dafür vielen Dank fürs Zuhören und bis nächste Mal