Mehrere IP-Adressen innerhalb desselben Subnetzes auf demselben Host

7

Ist es möglich (der eigentliche Wortlaut sollte "Ist es richtig" sein), mehrere IP-Adressen, die zum selben Subnetz gehören, auf demselben Host zu haben?

Hier ist ein Beispiel:

#Host 1
eth0   -> 10.0.0.1/24
eth1   -> 10.0.0.2/24
eth1:1 -> 10.0.0.3/24

Ich habe die Intuition, dass dies aufgrund von Routing-Problemen nicht funktionieren kann, aber ich kann nicht erklären, warum ich das denke.

Ist dieses Muster also korrekt? Wenn ja, ist es üblich? Was können die Probleme bei einer solchen Konfiguration sein?

ereOn
quelle

Antworten:

5

Ja, sicher, es gibt buchstäblich überhaupt kein Problem damit - möglicherweise müssen Sie ein wenig vorsichtig sein, wie Sie Ihr Standard-Gateway einrichten, aber es ist wirklich überhaupt kein Problem. In der Tat mussten Sie auf diese Weise Webserver mit mehreren Standorten einrichten (wir sprechen schon vor langer Zeit).

Chopper3
quelle
Danke für die Antwort. Wie würde ich diesen Host so konfigurieren, dass er von einer lokalen Adresse zur anderen kommunizieren kann? Mit anderen Worten: Was soll ich konfigurieren, damit ich von 10.0.0.1zu pingen kann 10.0.0.3?
Am
Ping sollte einfach funktionieren - wie lautet Ihre Subnetzmaske?
Chopper3
Ich benutze eine /24.
Am
sollte einfach funktionieren ...
Chopper3
4

Es gibt ein etwas häufiges Problem mit den Erwartungen der Menschen bei dieser Art der Einrichtung. Wenn mehrere Adressen in demselben Subnetz zugewiesen sind, scheint normalerweise die gesamte ausgehende Kommunikation von einer einzigen Adresse zu kommen.

Die Antworten auf eingehende Verbindungen sollten daher in Ordnung sein. Die Antworten sollten von der Adresse stammen, an die die eingehende Verbindung hergestellt wurde. Wenn Sie jedoch erwarten, dass ein Prozess, bei dem ausgehende Verbindungen hergestellt werden, eine andere Adresse als die erste verwendet, müssen Sie sicherstellen, dass Sie die IP speziell so konfigurieren können, dass sie auch in der Anwendung gebunden wird.

Zoredache
quelle
4

Ich habe irgendwo eine komplizierte Einrichtung, die diese Art von Netzwerk verwendet. Ich habe zwei interne Schnittstellen und eine externe Schnittstelle zum Internet. (Dies wird sich in zwei externe Schnittstellen in verschiedenen Subnetzen ändern und in eine interne Schnittstelle, die auf zwei interne Schnittstellen aufgeteilt ist, aber es geht auf demselben Weg.) Wie auch immer - weiter zur Antwort!

Angenommen, Sie haben zwei interne Schnittstellen unter:

eth0 192.168.1.2
eth1 192.168.1.3

Sie verwenden einen internen Uplink zum Internet (Router) unter 192.168.1.1

So Ihr Standard wird Routing - Tabelle wie folgt aussehen (Befehl: netstat -rn)

Dest            Gw         Genmask   Flags  ... ... Iface

0.0.0.0     192.168.1.1    0.0.0.0    UG           eth0

192.168.1.0  0.0.0.0     255.255.255.0 U           eth0

192.168.1.0  0.0.0.0     255.255.255.0 U           eth1

Hier ist Ihr Problem, die gesamte Ausgabe erfolgt über, eth0da dies der erste Treffer in Ihrer Routing-Tabelle ist. Wenn Sie also einen anderen Computer (oder sogar dieselbe Box) für ping 192.168.1.3( eth1) verwenden, erhalten Sie keine Antwort? Warum? Weil es von kommt 192.168.1.2.

Sie müssen verwenden iproute2, um individuelle Routing-Tabellen für jedes Gerät einzurichten. Auf diese Weise INPUTantwortet ein Gerät, wenn es etwas in der Kette hat, über dasselbe Gerät.

bearbeiten /etc/iproute2/rt_tableshinzufügen:

1  my_eth0

2  my_eth1 

Führen Sie dann Folgendes aus:

ip route add 192.168.1.0/24 dev eth0 table my_eth0

ip route add default via 192.168.1.1 dev eth0 table my_eth0

ip route add 192.168.1.0/24 dev eth1 table my_eth1

ip route add default via 192.168.1.1 dev eth1 table my_eth1

Fügen Sie nun die Regeln für die zu verwendenden Tabellen hinzu, indem Sie Folgendes ausführen:

ip rule add from 192.168.1.2 table my_eth0

ip rule add from 192.168.1.3 table my_eth1

Dies teilt Ihrem System mit, dass eth0die my_eth0Routing-Tabelle zur Beantwortung verwendet wird, wenn eine Anforderung bei Verwendung eingeht. Wenn eine Anfrage eth1eingeht, antworten Sie mit der my_eth1Routing-Tabelle. Wenn Sie die Befehle zum Laufen bringen, fügen Sie sie in Ihre /etc/rc.localDatei ein und machen Sie sie rc.localausführbar, indem Sie auf sudo chmod u+x /etc/rc.localdiese Weise ausführen, dass Ihre Routen beim Neustart nicht gelöscht werden. Habe Spaß!

Geoffrey Bush
quelle
Vielen Dank! Die Antwort sollte mit "PING WONT WORK!" Beginnen. weil ich bei der Arbeit darauf gestoßen bin und es schwer hatte, Wurzel zu verursachen.
Sush
2

Es ist vollkommen in Ordnung, aber es wird nicht empfohlen, es so zu machen, wie Sie es sind - mit mehr als einer physischen Schnittstelle im selben Subnetz, die mit demselben Switch verbunden ist. Linux kommt im Allgemeinen gut damit klar, aber einige Betriebssysteme (z. B. Solaris) mögen es wirklich nicht.

Stellen Sie alle Ihre Adressen auf eine physische Schnittstelle (eth0, eth0: 0, eth0: 1 usw.) und verbinden Sie nur diese. Wenn Sie mehrere Schnittstellen für die Leistung verbinden möchten, prüfen Sie die Verbindung und überlasten Sie dann die verbundene Schnittstelle (bond0) , bond0: 0, bond0: 1 usw.).

MadHatter
quelle
2

Nein, diese Konfiguration wird trotz allgemeiner Meinung nicht empfohlen.

Mit virtuellen Schnittstellen (zB eth1: 1) im selben Subnetz , dass die physischen (zB eth1) eine sehr häufige und nützliche Konfiguration ist das kein Problem darstellen.

Eine unterschiedliche physische Schnittstelle im selben Subnetz (oder am schlimmsten in unterschiedlichen Subnetzen, aber in derselben Broadcast-Domäne) kann jedoch aufgrund nicht deterministischer ARP-Einträge zu Problemen führen. Dies gilt zumindest für Solaris und Linux. Wenn Sie dies aus irgendeinem Grund trotzdem tun müssen, wird empfohlen oder erforderlich, das ARP-Verhalten zu optimieren, dh ARP auf einer der Schnittstellen zu deaktivieren oder ARP so zu konfigurieren, dass die Antworten von einer physischen Schnittstelle auf die entsprechenden IP-Adressen beschränkt werden. Suchen Sie unter http://www.mjmwired.net/kernel/Documentation/networking/ip-sysctl.txt nach arp_filter . Eine andere Möglichkeit besteht darin, die Netzmaske auf allen Schnittstellen bis auf eine auf / 24 zu setzen.

Unter Solaris besteht eine unterstützte Möglichkeit zum Konfigurieren mehrerer Schnittstellen im selben Subnetz in der Verwendung von IPMP (IP Multipathing).

Schließlich gilt diese Einschränkung nicht, wenn die physischen Schnittstellen nicht denselben IP-Stack gemeinsam nutzen (z. B. exklusive IP-Zonen von Solaris) oder durch 802.1Q-VLAN-Tagging isoliert sind.

jlliagre
quelle
1

Es ist möglich, es zu tun. Ich habe es schon mal benutzt.

Ich habe eine Anwendung, die beim Herstellen einer Verbindung zu einem Remote-Server unterschiedliche Quell-IP-Adressen verwenden muss. Dies ist in meinem Fall wichtig, um die vom Remote-Server auferlegte Beschränkung der Anzahl zulässiger Verbindungen pro IP zu überwinden.

Ich habe mehrere IP-Adressen auf derselben Schnittstelle konfiguriert und meine Anwendung wurde so konfiguriert, dass diese IPs im Round-Robin-Verfahren verwendet werden.

Khaled
quelle
1

Ja das wird funktionieren.

Wie in den anderen Antworten angedeutet, besteht der eigentliche Zweck darin, verschiedene Dienste auf den verschiedenen IP-Adressen bereitzustellen.

Wenn Sie IIS und Apache auf demselben Computer hatten und beide auf Port 80 ausführen möchten, müssen Sie einen auf 10.0.0.1 und den anderen auf 10.0.0.2 festlegen, da beide nicht auf Port 80 von Port 80 ausgeführt werden konnten die gleiche IP-Adresse.

Es ist wirklich keine große Frage des Routings, da dies nur auf diesem Computer zum Tragen kommt, der über generische Programme wie Webbrowser, Ping usw. auf das Netzwerk zugreift. In diesen Situationen wird immer dasselbe verwendet Adresse als Quelle.

In der Routing-Tabelle gibt die Route die zu verwendende Schnittstelle an, sodass es sich um die Adresse handelt, die an die qualifizierende Route gebunden ist.

ManiacZX
quelle
1

Ich werde hier eine kleine Einschränkung wegwerfen. Das heißt, dass die üblichen Linux-Tools Ihnen Probleme bereiten. Sie handhaben die mehreren Schnittstellen überhaupt nicht gut. Dazu müssen Sie iproute2 verwenden . Dies ist ein weniger verbreitetes Tool als die übliche ifconfig / route-Methode. Ohne sie werden Sie seltsames und falsches Verhalten feststellen, z. B. wenn eine Netzwerkkarte auf den anderen Datenverkehr reagiert.


- Christ Karel

Christopher Karel
quelle