Kann ein Multihomed-Linux-Computer ein echtes Strong ES-Modell implementieren ?
Spezifischer Anwendungsfall
Ich habe ein System mit fünf verschiedenen Schnittstellen, die jeweils mit demselben Subnetz verbunden sind, also dasselbe Gateway zum Internet.
- Ich möchte jede Schnittstelle separat an demselben Port abhören und sicherstellen, dass Pakete immer an derselben Schnittstelle ausgehen, an der sie eingegangen sind, und sicherstellen, dass Pakete, die versuchen, an die "falsche" Schnittstelle zu gelangen, verworfen werden.
- Ich möchte in der Lage sein, an jede Schnittstelle zu binden und ausgehende Verbindungen zu Internetzielen herzustellen, die immer von derselben Quell-IP stammen, an die ich gebunden bin. Zum Beispiel,
curl --interface interface_ip http://ipecho.net/plain
sollte immer die gleiche IP-Adresse anzeigen, an die ich gebunden bin--interface
. - Statische Routen können aufgrund der Verwendung von DHCP auf einer dieser Schnittstellen problematisch sein.
RFC 1122
Aus RFC 1122 - Anforderungen für Internet-Hosts - Kommunikationsschichten, Abschnitt 3.3.4.2 - Multihoming-Anforderungen :
Internet-Host-Implementierer haben zwei verschiedene konzeptionelle Modelle für Multihoming verwendet, die in der folgenden Diskussion kurz zusammengefasst werden. Dieses Dokument bezieht sich nicht darauf, welches Modell bevorzugt wird. Jeder scheint einen Platz zu haben. Diese Ambivalenz spiegelt sich in den optionalen Punkten (A) und (B) wider.
Starkes ES-Modell
Das Strong ES-Modell (End System, dh Host) betont die Unterscheidung zwischen Host und Gateway (ES / IS) und würde daher in den obigen Punkten (A) und (B) MUSS anstelle von MAI verwenden. Es neigt dazu, einen Multihomed-Host als eine Reihe logischer Hosts innerhalb desselben physischen Hosts zu modellieren.
In Bezug auf (A) stellen Befürworter des Strong ES-Modells fest, dass automatische Internet-Routing-Mechanismen ein Datagramm nicht an eine physische Schnittstelle weiterleiten konnten, die nicht der Zieladresse entsprach.
Unter dem Strong ES-Modell ist die Routenberechnung für ein ausgehendes Datagramm die Zuordnung:route(src IP addr, dest IP addr, TOS) -> gateway
Hier wird die Quelladresse als Parameter angegeben, um ein Gateway auszuwählen, das direkt über die entsprechende physikalische Schnittstelle erreichbar ist. Beachten Sie, dass dieses Modell logischerweise erfordert, dass im Allgemeinen mindestens ein Standardgateway und vorzugsweise mehrere Standardwerte für jede IP-Quelladresse vorhanden sind.
Schwaches ES-Modell
Diese Ansicht hebt die ES / IS-Unterscheidung hervor und würde daher in den Punkten (A) und (B) MUSS NICHT für MAI ersetzen. Dieses Modell ist möglicherweise das natürlichere für Hosts, die Gateway-Routing-Protokolle abhören, und ist für Hosts mit eingebetteter Gateway-Funktionalität erforderlich.
Das schwache ES-Modell kann dazu führen, dass der Umleitungsmechanismus fehlschlägt. Wenn ein Datagramm über eine physische Schnittstelle gesendet wird, die nicht der Zieladresse entspricht, erkennt das First-Hop-Gateway nicht, wann eine Umleitung gesendet werden muss. Wenn der Host hingegen über eingebettete Gateway-Funktionen verfügt, verfügt er über Routing-Informationen, ohne Redirects abzuhören.
Im Weak ES-Modell ist die Routenberechnung für ein ausgehendes Datagramm die Zuordnung:route(dest IP addr, TOS) -> gateway, interface
Linux ist standardmäßig ein schwaches ES-Modell, während FreeBSD und andere Unix-Varianten als starke ES-Systeme fungieren. Gibt es eine Möglichkeit, es eher wie ein starkes ES-System zu verhalten?
Welche sysctl
Konfiguration oder Konfiguration zur Kompilierungszeit müsste festgelegt werden, damit sie sich standardmäßig wie ein Strong ES verhält, ohne spezifische Routing-Regeln für eine neue Schnittstelle hinzuzufügen, die Sie hinzufügen? Ich weiß, dass wir eine strikte Filterung der Quellrouten durchführen können net.ipv4.conf.default.rp_filter = 1
, aber es scheint viel mehr zu geben. Wie kann ich standardmäßig quellenbasiertes Routing durchführen?