Ich habe einen Server mit Ubuntu Server mit vier IP-Adressen auf einer einzigen Netzwerkkarte.
eth0 192.168.1.100
eth0:0 192.168.1.101
eth0:1 192.168.1.102
eth0:2 192.168.1.103
(Nehmen wir beispielsweise an, dass 192.168.xx für eine Reihe von öffentlichen IP-Adressen verwendet wird.)
Einer unserer Kunden veröffentlicht sein Inventar über FTP, daher melden wir uns jede Nacht an, um eine große Datei von ihrem Server herunterzuladen. Ihre Firewall erwartet, dass unsere (passive) FTP-Verbindung von 192.168.1.100 hergestellt wird.
Angenommen, mein Server verfügt logischerweise über vier IP-Adressen auf einem einzelnen Adapter. Wie ermittelt das Betriebssystem, welche IP-Adresse als Quelle für ausgehende TCP / IP-Verbindungen verwendet wird?
Angenommen, ich stelle unter 192.168.1.101 eine SSH-Verbindung zu meinem Server her und führe FTP interaktiv aus. Wird die ausgehende TCP / IP-Verbindung 192.168.1.101 verwenden, da das Betriebssystem weiß, dass dies die Schnittstelle ist, über die meine Shell verbunden ist?
Was ist, wenn die FTP-Task nicht interaktiv über einen Cron-Job ohne Shell ausgeführt wird?
Wie Sie wahrscheinlich feststellen können, hat mich das ziemlich verwirrt, und ich hoffe, dass meine Fragen zumindest einen Sinn ergeben haben.
Bearbeiten
Um zu verdeutlichen, warum ich frage, habe ich keine Änderungen an der Routing-Tabelle vorgenommen und es wird tatsächlich "eth0" als IFace für die 0.0.0.0-Routen aufgeführt. Alle Anzeichen deuten jedoch darauf hin, dass tatsächlich eth0: 0 als Quelle verwendet wird.
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
0.0.0.0 192.168.1.1 0.0.0.0 UG 100 0 0 eth0
Ich kann an der Routing-Tabelle herumspielen oder unseren Client dazu bringen, die Firewall-Regeln zu ändern, um das gewünschte Verhalten zu erreichen. Ich versuche jedoch, einen kleinen Einblick in die Funktionsweise zu erhalten, um festzustellen, ob ein Fehler im Betriebssystem vorliegt oder nur mein naives Verständnis wie alle Teile zusammenpassen.
Vielen Dank
Ich sehe in Ihrem Beispiel, dass alle IPS zu nah sind, um nicht im selben Netzwerk zu sein
Sind Sie sicher, dass Sie tatsächlich Multihoming betreiben und nicht nur 4 IP-Aliase haben?
Wenn letzteres der Fall ist, können Sie die Quell-IP auf einer Route mit etwas ähnlichem einstellen
In man-Interfaces erfahren Sie, wie Sie es zwischen Neustarts dauerhaft machen können
quelle
Es wird verwendet, was auch immer das Standard-Gateway in der Routing-Tabelle ist, es sei denn, es gibt eine bestimmte Route, die es auffordert, eine andere zu verwenden:
route -n
EDIT: Ich habe deine Frage offenbar zu schnell gelesen ...
Da Sie den passiven Modus verwenden und der Client die Verbindung immer initiiert, wird das Feld src ip im IP-Header immer als die IP angezeigt, mit der der Client verbunden ist. Wenn es aktiver Modus war, initiierte der Bediener die Verbindung, ich denke, es würde immer die „primäre“ IP sein. Befinden sich Ihre Adressen im selben Subnetz, erstellt Linux die erste Adresse, die Sie hinzugefügt haben, als 'Primär' und die anderen als sekundär.
Ich bin mir jedoch nicht ganz sicher, ob ich tcpdump -n ausführen und sehen würde, was es als src-IP ansieht.
EDIT2: Okay, ich habe das oben Gesagte unter dem Gesichtspunkt geschrieben, dass Sie den Server ausgeführt haben. Da Sie also der Client sind und die Verbindung initiieren, wird es anscheinend immer von der primären IP-Adresse stammen, aber probieren Sie es erneut aus mit tcpdump.
quelle
Sofern Ihr FTP-Auftrag nicht die Möglichkeit bietet, die für Verbindungen zu verwendende Schnittstelle anzugeben, wird meines Erachtens standardmäßig die erste physische Schnittstelle im relevanten Subnetz verwendet (in diesem Fall eth0). Wenn Sie einen Server mit zwei Netzwerkkarten in verschiedenen Subnetzen haben, wird anhand der Routingtabelle ermittelt, welche Schnittstelle verwendet werden soll.
Da es auf dem System nur eine einzige physische Schnittstelle (eth0) und vier virtuelle / Aliase (eth0: 0 bis eth0: 2) im selben Subnetz gibt, verwendet der ausgehende Datenverkehr die eth0-IP-Adresse als Quelle, sofern die Anwendung nicht intelligent genug ist eine ausgehende Schnittstelle zu deklarieren.
quelle
nc -s <ip of eth0:2>
oder was auch immer immer die Quelladresse anzeigt, ist tatsächlich die IP von eth0: 0, obwohl Netcat diesbind(2)
zuvor getan hatconnect(2)
. Es sieht also so aus, als würden Aliase nicht funktionieren, um einem Computer die Möglichkeit zu geben, Verbindungen von mehreren Quelladressen herzustellen.Sie können sehen, welches Gerät und welche Quell-IP-Adresse vom Befehl ip route get wie folgt verwendet werden:
Ich habe dies nicht in einer voreingenommenen Umgebung versucht, hoffe aber, dass dies hilft.
quelle
Wenn Sie eine ausgehende Verbindung herstellen, ermittelt Ihr Server anhand der Routing-Tabelle, welche Ihrer vier Schnittstellen verwendet werden sollen. Ihre TCP-Verbindungen haben eine Quell-IP Ihrer Exit-Schnittstelle.
Gibt Ihnen die Ausgabe Ihrer Routingtabelle; Suchen Sie nach Einträgen, die mit der Client-IP übereinstimmen, zu der Sie eine Verbindung herstellen möchten. Wenn keine vorhanden ist, verwenden Sie eine Standardroute (0.0.0.0, Maske 0.0.0.0). Wenn Sie mehrere Standardrouten verwenden, wird die Route mit den niedrigsten Kosten verwendet.
quelle