Wir spielen Seeschlacht auf BGP

BGP ist der Klebstoff des Internets. Für das Protokoll, das 1989 auf zwei Servietten gezeichnet wurde , ist es gleichzeitig überraschend und schrecklich, dass es fast alle Interaktionen zwischen ISPs abwickelt und ein wesentlicher Bestandteil des Internets ist.

BGP hat einen schlechten Ruf, vor allem aufgrund der Vertrauenswürdigkeit der Verbindungen zwischen Peers und der schwierigen Aufgabe, die Legitimität von Routen zu überprüfen. Deshalb hören wir überall von BGP-Hacks mit unterschiedlichem Schweregrad: von der Änderung des Routings aller YouTube zu AWS Route 53 .

Um die Natur dieser Hacks zu verstehen, müssen Sie die Topologie des Internets verstehen. Beginnen wir mit einem einsamen Router:



Ein einzelner Router ist wenig nützlich, wenn er nichts weiterleiten kann. Daher werden wir einen anderen Router auf physischer Ebene daran anschließen (es kann alles sein: von Kupfer-Ethernet und optischer Unterwasserfaser bis zu 802.11-Wi-Fi-Verbindungen).

Dann sollten zwei verbundene Router (in unserem Fall rot und blau) verstehen, dass sie den Verkehr füreinander leiten können. Schließlich besteht der Punkt von Routern darin, den Verkehr von einem Ziel zu einem anderen zu leiten.

Wie oben erwähnt, besteht eine übliche Methode zwischen ISPs darin, BGP auf beiden Seiten zu installieren und sie sich gegenseitig „mitteilen“ zu lassen, dass sie den Verkehr weiterleiten können:



Aber es ist nicht sehr nützlich, wenn sie nur miteinander sprechen, plötzlich sind die roten und blauen Router nicht direkt verbunden? Je mehr Router wir verbinden, desto komplexer wird die von uns gebildete Routing-Topologie. Dies ist möglich, weil jeder BGP-Peer Routing-Tabellen mit den anderen Peers teilt, mit denen er verbunden ist:



Wie Router Informationen miteinander austauschen, hängt von der Konfigurationsrichtlinie ab. Dies hängt normalerweise von den tatsächlichen Bedingungen für benachbarte Knoten ab. Es gibt verschiedene Einstellungen für Kunden, Verkehrsaustauschvereinbarungen und höhere Anbieter.

Aus diesem Grund benötigen Router eine Reihe programmierter Anweisungen, um herauszufiltern, was sie nicht von anderen Knoten geben oder nehmen möchten. Von Zeit zu Zeit erhalten Angreifer jedoch Zugriff auf einen Router, der mit einem anderen Router verbunden ist, der nicht über solche Filter verfügt. Dies auf Softwareebene zu beheben ist unglaublich schwierig , da Änderungen an den Routern der einzelnen Anbieter erforderlich sind. Frühere Versuche sind nicht weit verbreitet .

BGP bietet die Möglichkeit, Informationen mithilfe einer Route namens Community zu codieren. Es ist in RFC1997 definiert (leider 1996 geschrieben, etwas verpasst). Die Community kann an eine Routendeklaration angehängt werden und besteht aus einer 32-Bit-Nummer. In der Praxis wird dieser Wert in zwei 16-Bit-Zahlen aufgeteilt (eine für den Lieferavis und eine für das mit / für diesen Lieferavis verknüpfte Signal):



Sie werden verwendet, um zusätzliche Informationen über die Route zu übertragen, z. B. wo der Anbieter diese Route genommen hat:



Dies ist nützlich für die Filterung. Wenn Sie beispielsweise viele Anbieter haben und versuchen, keinen Verkehr außerhalb des Landes zuzulassen, können Sie die entsprechende Community verwenden, um den Verkehr entlang dieser Routen zu leiten.

Es brachte mich zum Nachdenken. Was kann ich sonst noch durch die Community signalisieren? Und wie weit kannst du gehen?

Nach einigen Tests stellte sich heraus, dass jedes Tier-1- Netzwerk die Community löscht, mit Ausnahme der früheren Ebene 3 , die die Übertragung der Community vom Quellrouter zum Client ermöglicht. Dies bedeutet auch, dass ein Router Informationen auch ohne direkte Verbindung an andere senden kann.

Seeschlacht


Da ich wusste, dass es einen indirekten Kommunikationskanal über BGP gibt, wollte ich diesen irgendwie nutzen, um eine nicht traditionelle Kommunikation aufzubauen. Ich habe "Seeschlacht" als Medium gewählt, da für dieses Spiel eine Mindestmenge an Informationen (X- und Y-Koordinaten sowie Informationen zum letzten Schuss: getroffen oder verfehlt) übertragen werden muss.

Zwei Spiele auf BGP zwei Communities wurden erstellt.



Das ganze Spiel passt in zwei 16-Bit-Zahlen und ermöglicht so ein zuverlässiges Spielen durch zwei Communities.

Da der Seekampf ein Spiel für zwei ist, habe ich AS203729 zum Spielen eingeladen. Es ist mit BGP in New York verbunden und meine Installation arbeitet in London.

Bei der Planung des Spiels gingen wir davon aus, dass wir aufgrund der Häufigkeit der Aktualisierung der Routen den BGP-Verkehr dämpfen könnten. Da wir beide im realen Produktionsverkehr sitzen, haben wir vereinbart, für jede Bewegung einen 30-Sekunden-Timer festzulegen, da die Dämpfung zu Ausfällen auf den Produktionsservern führt.

Es wurde auch anderer Datenverkehr über die Spielrouter geleitet, sodass ich den Routing-Daemon online halten musste und es unmöglich war, den speziellen BGP-Daemon zu verwenden. Um diese Einschränkung zu umgehen, hat die Binärdatei des Spiels die BIRD-Konfiguration mithilfe des Kontrollsockels des Dämons generiert und neu geladen, um nach Routenänderungen abzufragen.

Mit diesen Einstellungen spielten AS206924 und AS203729 am 16. Mai 2018 wahrscheinlich das erste Brettspiel in der Geschichte, das ausschließlich mit BGP durchgeführt wurde.



Das Spiel verlief reibungslos, mit Ausnahme einer 45-minütigen Pause aufgrund der oben genannten Dämpfung. Dies geschah auf meiner Seite und ließ Level 3 45 Minuten lang die weniger optimale Route für meinen Verkehr anwenden. Um ein erneutes Auftreten der Situation zu verhindern, haben wir uns entschlossen, zwischen den Zügen auf einen Zeitraum von 90 Sekunden umzuschalten.

Trotzdem wurde der letzte Schlag gegen die Flotte meines Freundes AS203729 in Zug 68 ausgeführt. Damit bin ich der erste Gewinner eines Brettspiels, das mit einem öffentlichen Internet-Routing-Protokoll durchgeführt wurde.

War das logisch? Wahrscheinlich nicht. Hat es Spaß gemacht? Meine Güte, ja.

Der Quellcode wurde auf beiden Seiten veröffentlicht, obwohl ich nicht vorschlage, dieses Experiment zu wiederholen.

Bis zum nächsten Mal!

Source: https://habr.com/ru/post/de415689/


All Articles