Hallo, ich versuche gerade das Systemd Network Namespace zuverstehen und anhand der Erklärung hier https://etherarp.net/network-isolation-of-services-with-systemd/index.html, verstehe ich den Sinn und den Anwendungsbereich. Ich hab zwei Applikationen, welche in einem anderen Namespace liegen und über einen definierten TCP Port miteinander kommunizieren müssten. Ist es trotzdem möglich die beiden Applikationen über einen festen TCP Port zuverbinden über localnetwork?
Thorben schrieb: > Hallo, ich versuche gerade das Systemd Network Namespace zuverstehen Network Namespaces sind ein Linux feature, kein Systemd feature. Systemd kann lediglich welche erzeugen. Es gibt sinnvolle Anwendungsfälle für Network Namespaces. Es fragt sich halt nur, was man damit erreichen will. Wenn du keinen Grund hast, das in dem Artikel zu tun, ist es eventuell nicht Sinvoll, es zu nutzen. Grundsätzlich muss man 2 Sachen zu Netzwerk Namespacen wissen: 1) Jeder Netzwerk Namespace ist eine komplett getrennte Netzwerk Umgebung. Routen, IP-Adressen, Interfaces, alles ist erst mal nicht konfiguriert. 2) Ein Interface kann immer nur in einem Network Namespace sein > Ist es trotzdem möglich die beiden Applikationen über einen festen TCP > Port zuverbinden über localnetwork? Wenn du Programme in 2 Netzwerk Namespaces Packst, diesen ein Netzwerkinterface gibst, und es zwischen diesen eine Verbindung gibt, und die IP und Routen in beiden Netzwerk Namespacen entsprechend konfiguriert sind, dann kann man eine Verbindung zwischen Anwendungen in den Namespacen herstellen. Aus Netzwerk Sicht sind das quasi 2 unterschiedliche PCs, wo man das Netzwerk wie üblich konfiguriert. Du kannst zur Kommunikation zwischen Network Namespacen nicht loopback nutzen, jeder netns hat ein eigenes unabhängiges lo Interface. Du kannst virtuelle Verbindungen, und Switches einrichten mittels veth-pairs und bridges. veth pairs sind wie Kabel. Man hat 2 Interfaces, was beim einen rein kommt, kommt am anderen interface an, und die 2 interfaces können in unterschiedlichen Netzwerk Namespacen sein. Bridges sind wie switches. Kann man Interfaces reinstecken, und die Pakete werden dann entsprechend verteilt. So kann man ein virtuelles Netzwerk zwischen den Sachen aufbauen, über Netzwerk Namespaces hinweg. Ist aber umständlich. Ein paar andere Sachen, die zu beachten sind. Kommt eine Anwendung in den Besitz eines File Deskriptors, das kann ein Socket sein, verbunden oder auf verbindungen wartend, oder sonst irgend was, und dieser wurde in einem anderen Namespace erstellt, kann die Anwendung den trotzdem nutzen. Der Namespace, in dem der File Deskriptor erstellt wurde, ist relevant. Das ist bei allen arten von namespacen so. Systemd ist glaube ich unter anderem in der Lage, ähnlich wie xinetd auf Verbindungen zu warten und Anwendungen beim Starten den File Deskriptor mitzugeben. Ich glaube die nennen es socket activation. Unix Sockets sollten von Netzwerk Namespacen nicht betroffen sein. Für deren Isolation existieren IPC Namespaces. All dies gilt für Linux Namespaces allgemein, und ist nicht Systemd spezifisch. Es gilt dort aber natürlich auch.
:
Bearbeitet durch User
>Du kannst virtuelle Verbindungen, und Switches einrichten mittels >veth-pairs und bridges. veth pairs sind wie Kabel. Man hat 2 Interfaces, >was beim einen rein kommt, kommt am anderen interface an, und die 2 >interfaces können in unterschiedlichen Netzwerk Namespacen sein. Bridges >sind wie switches. Kann man Interfaces reinstecken, und die Pakete >werden dann entsprechend verteilt. So kann man ein virtuelles Netzwerk >zwischen den Sachen aufbauen, über Netzwerk Namespaces hinweg. Ist aber >umständlich. Danke für die Erklärung, dann werde ich mir mal die veths und bridges anschauen.
Thorben schrieb: > Danke für die Erklärung, dann werde ich mir mal die veths und bridges > anschauen. Einfacher wirds, wenn du dir das gleich im Kontext von systemd-nspawn anschaust. Oder, wenn's dir nur um "Network Namespaces" geht, und weniger um systemd: Docker oder LXC.
Ich würde zum herum probieren & lernen mit Network Namespaces das "ip" zeug empfehlen. "ip netns add ..." "ip netns exec ..." und "ip link set [interface] netns [namespace]". Da gibt's keine Magie, und man kann ales selbst mal durch gehen.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.