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.