2017-03-13 1 views
-1

Die Frage klingt vielleicht völlig dumm, aber bitte ertragen mit mir. Ist es jemals möglich, an eine IP-Adresse zu binden, die sich NICHT an einer Schnittstelle auf einem Linux-Rechner befindet? Die offensichtliche Antwort scheint ein "Nein, du kannst nicht binden".Linux Bind an IP-Adresse fehlt von "ip -d addr show"

Ich sehe dies auf einer GoogleCloud Maschineninstanz (ABCD eine echte öffentliche IP-Adresse ist)

=============

test @ gateway4: ~ $ sudo ip -d Adr. Show | grep abcd

=============

Das die Linux-Maschine zeigt, glaubt nicht, dass es irgendeine Schnittstelle mit der IP-Adresse abcd

Und doch hat, wie ich netcat laufen kann , an diese IP-Adresse binden und sogar mit dem Kunden sprechen lassen!

=============

test @ gateway4: ~ $ nc -l abcd 9000

Kunde sagt hallo

======= ======

Wie ist das möglich?

Sicher genug kann ich das mit keiner anderen zufälligen IP-Adresse tun. Das obige Experiment wurde auf einer Google-Cloud-Maschineninstanz durchgeführt, bei der eine Weiterleitungsregel erzeugt wurde, die Verkehr anwies, der an a.b.c.d gerichtet war, um an diese Instanz geliefert zu werden (https://cloud.google.com/compute/docs/load-balancing/network/forwarding-rules). Selbst wenn der Kernel-Stack ACCEPT-Pakete mit dieser Zieladresse akzeptiert, sollte der Kernel nicht denken, dass die IP-Adresse auf einer lokalen Schnittstelle existiert?

Während ich herumspiele, sehe ich, dass GCP eine Route in der "lokalen" Tabelle für diese a.b.c.d Adresse erstellt hat. Ist die Anwesenheit dieser Route ausreichend, damit der Kernel nc an diese IP-Adresse binden kann? Und damit der Kernel Pakete, die an a.b.c.d adressiert sind, an die lokale Schnittstelle schickt?

==============

test @ gateway4: ~ $ sudo ip route zeigt Tabelle lokale | grep a.b.c.d

lokale eth0 proto a.b.c.d dev 66 Umfang Host

==============

Dank!

+0

Wäre dankbar für Feedback oder Grund für die Vergabe negativer Bewertungen/Reputation. – Samar

+0

* "Ist es jemals möglich, an eine IP-Adresse zu binden, die sich NICHT auf einer Linux-Maschine befindet?" * - Ich habe keine Antwort auf diese Frage, aber wie ich es verstehe, ist die IP-Adresse * nicht * der Schnittstelle in Linux zugewiesen. Die IP-Adresse gehört dem Linux-Host. Das erfahren Sie, wenn Sie auf das "ARP-Flux-Problem" stoßen. – sawdust

Antwort

0

Das ist, weil diese öffentliche IP NAT zu einer internen IP NAT ist. Sie können es extern über diese "a.b.c.d" -IP erreichen, aber dahinter befindet sich eine private IP, an die alle Post-NAT-Anfragen gesendet werden.

Überprüfen Sie die Einstellungen Ihrer VM, um PUBLIC < -> PRIVATE IP Mapping zu finden.

+0

Nein. Die durch die Weiterleitungsregel erstellte IP-Adresse lautet NON-NAT (z. B. https: // cloud.google.com/compute/docs/protocol-forwarding/ - Google Compute Engine unterstützt die Protokollweiterleitung, mit der Sie Weiterleitungsregelobjekte erstellen können, die Pakete an eine nicht NAT-bezogene Zielinstanz senden können. Jede Zielinstanz enthält eine einzelne VM-Instanz, die Datenverkehr von den entsprechenden Weiterleitungsregeln empfängt und verarbeitet. Jede andere externe IP ist NAT für die GCP-Instanz, ja. Aber die eine, die ich benutze, ist die nicht-NATted, die ihr Ziel für die Protokollweiterleitungsregel gegeben hat. – Samar