Hallo Netzwerkgurus,
Ich habe einen Linux-Server (Kernel 3.14), der als TFTP-, NFS- und HTTP-Server für eine Farm von Geräten der Unterhaltungselektronik (Set-Top-Boxen - STBs) fungiert. Die Geräte verwenden TFTP, um ihre Kernel zu starten und dann ihre Root-FSes vom NFS-Server auf unserem Computer usw. bereitzustellen.
Aus einem esoterischen technischen Grund werde ich hier nicht näher darauf eingehen (glauben Sie mir einfach :), jede STB muss sich in einem eigenen, physisch getrennten LAN befinden. Die Art und Weise, wie Netzwerke eingerichtet werden, ist:
Der Server verfügt über 1 Netzwerkkarte, mit der auf den Rest der Welt zugegriffen werden kann. Es hat auch 1 Netzwerkkarte für jede STB, die es bedient - und jede davon ist mit einem kleinen Router verbunden, an den die STB + einige andere Geräte angeschlossen sind und ein LAN bilden.
Derzeit sind 3 STBs verbunden, und die LANs sind 172.16.50.0/24, 172.16.51.0/24 und 172.16.52.0/24. Es funktioniert alles gut.
Die Tatsache, dass wir 3 verschiedene LANs haben, bedeutet, dass auf denselben Server als 172.16.50.1 von STB1, 172.16.51.1 von STB2 und 172.16.52.1 von STB3 zugegriffen werden muss - und das bedeutet, dass wir eine etwas andere Umgebung haben Jedes STB und jedes Mal, wenn wir beispielsweise neues RootFS hochladen, um es auf den STBs zu verwenden, müssen wir einige Konfigurationsdateien manuell bearbeiten und die richtige IP eingeben, auf die der Server von diesem bestimmten STB aus zugreifen muss. Nicht sehr praktisch und fehleranfällig!
Das brachte mich zum Nachdenken: Was wäre, wenn wir diese drei LANs einfach so konfigurieren würden, dass sie alle gleich sind? 172.16.50.0/24? Aus Sicht der STB (und der übrigen Geräte im LAN) sollte alles in Ordnung sein, aber was ist mit der Sicht des Servers?
Kann ein Linux-Server N verschiedene Ethernet-Schnittstellen haben, die alle mit derselben statischen IP konfiguriert sind, aber jeweils mit einem physisch separaten LAN verbunden sind?
quelle
Antworten:
Ja, dies ist mit einer netten Funktion namens
network namespaces
(sieheman ip-netns(8)
) möglich. Grundsätzlich erhalten Sie mehrere unterschiedliche Netzwerkstapel mit jeweils eigenen Schnittstellen, Routen usw.Sie müssten für jede Ihrer STBs einen Namespace erstellen und könnten dann Ihre erforderlichen Dienste in jedem Namespace separat ausführen.
Für die Namespaces müssten Sie wie folgt vorgehen:
Erstellen Sie einen Namespace mit dem Namen
net1
:Weisen Sie Ihre Schnittstelle
ethX
dem neuen Namespace zu und konfigurieren Sie Ihre IP-Adresse 172.16.50.1:Die IP-Adresse 172.16.50.1 ist jetzt in Ihrem Standard-Namespace nicht mehr sichtbar. Ein einfaches
ping 172.16.50.1
funktioniert nicht, Sie müssen zuerst zumnet1
Namespace wechseln und dort den Befehl ausführen:Auf diese Weise können Sie jetzt jeden Dienst in jedem Ihrer Namespaces ausführen.
Wenn Sie sich abenteuerlustig fühlen, können Sie sogar versuchen, alle Anfragen von Ihren STBs irgendwie an einen zentralen Dienst umzuleiten. Dazu benötigen Sie einen Tunnel von jedem Namespace zu Ihrem Standard-Namespace (siehe
ip link help veth
) und einige iptables Magie ...quelle
Technisch können Sie, aber die Konfiguration wäre bunt. Es wäre ein Kludge und es würde erfordern, dass jede STB eine eindeutige IP hat, während sie auf ihrem eigenen Draht isoliert ist, um Ihre Anforderung zu erfüllen. Die Konfiguration auf den Clients ändert sich nicht. Hier ist die Konfiguration auf dem Server:
Dies sollte nur zu einer IP pro Schnittstelle in der Routing-Tabelle führen. Diese befinden sich auf separaten Drähten, sodass kein Übersprechen auftritt. Jedes dieser Geräte würde denken, dass sie sich auf einem 2-Knoten 10.0.0.0/8 befinden.
Wenn der Server mit 10.0.50.2 kommunizieren möchte, überprüft er die ARP-Tabelle und anschließend die Routing-Tabelle. Wenn die ARP-Tabelle leer ist, weist die Routing-Tabelle sie an, eine ARP-Anforderung an die jeweilige Schnittstelle zu senden. Daher MÜSSEN sie eindeutige IP-Adressen haben, da der Server sonst nur mit der zuletzt hinzugefügten Route sprechen kann.
Sie können Ihren DHCP-Server so einstellen, dass er IPs basierend auf den Hardwareadressen zuweist, oder auf jeder Schnittstelle einen separaten dynamischen DHCP-Bereich ausführen. Der DHCP-Server kann alles ausgeben, aber 10.0.50.3 auf der eth0-Leitung ist nicht erreichbar.
quelle
Sie können nicht dieselbe IP-Adresse auf mehreren Schnittstellen verwenden. Es funktioniert einfach nicht richtig (normalerweise funktioniert es nur auf der letzten Schnittstelle, auf der die IP zugewiesen wurde).
Sie müssen die Ethernet-Schnittstellen in eine Bridge einfügen und die IP-Adresse auf der Bridge selbst zuweisen.
Im Wesentlichen funktionieren alle Ethernet-Ports in dieser Bridge als Switch.
Alternativ können Sie alle Ethernet-Karten für jede STB entfernen und einfach einen Switch hinzufügen (der skalierbarer ist als das Hinzufügen neuer Ethernet-Karten auf Ihrem Server).
Da es jedoch erforderlich ist, dass sich jede STB in einer eigenen Broadcast-Domäne befindet, müssen Sie sich leider an Ihr aktuelles Setup halten.
Um zumindest den Teil der Serverhardware in Ihrem Setup zu vereinfachen, lassen Sie die mehreren Ethernet-Karten fallen und fügen Sie einfach einen verwalteten Switch hinzu. Verwenden Sie VLANs, um die "mehreren Ethernet-Karten" mit nur einer physischen Ethernet-Karte zu simulieren.
quelle