Ich habe so viel wie möglich darüber recherchiert, ohne direkt in der Kernelquelle zu graben. Es scheint eine große Menge an Desinformation / falschen Informationen zu diesem Thema zu geben, daher hoffe ich, dass dies die Frage für mich und andere ein für alle Mal beantwortet.
Streng genommen ist eine IPv4-Erschöpfung tatsächlich möglich? Lassen Sie mich erklären:
- Anscheinend stehen 65535 Ports zur Verfügung. 0 ist nicht verfügbar.
- Ich habe gelesen, dass für die Port-Erschöpfung das Tupel (src ip, src port, dst ip, dst port) eindeutig sein muss.
- Um klar zu sein und davon auszugehen, dass ich 100% der kurzlebigen Ports über die Einstellung sysctl net.ipv4.ip_local_port_range verwenden kann
Und das ist die Frage: Funktioniert das so?
- Ich könnte 65k Verbindungen von 127.0.0.1:(x) bis 127.0.0.1:80 haben
- Ich könnte 65k Verbindungen von 127.0.0.1:(x) bis 127.0.0.1:555 haben
- Grundsätzlich ist die Frage (srcip, srcport, dstip, dstport) noch einmal eindeutig, richtig?
- Ich konnte nicht mehr als 65.000 Verbindungen von IP "A" zu IP "B", Port "N" öffnen.
- Ebenso konnte eine einzelne IP unter xxxx: 80 nicht mehr als 65.000 Verbindungen zu meinem Webserver öffnen. Ich konnte jedoch insgesamt viel mehr als 65.000 unterstützen, solange sie von verschiedenen Quell-IPs stammen .
Schließlich bin ich ein wenig verwirrt über (ausgehende) kurzlebige Ports und eingehende Ports, die abhören. Sobald die Verbindung hergestellt ist, ist mir klar, dass jede Seite der Verbindung gleichrangig und gleich ist, aber bevor dies geschieht:
Wenn zum Beispiel das Tupel (srcip, srcport, dstip, dstport) eindeutig sein muss, warum ist es dann so, wenn ich es aktiviere?
net.ipv4.ip_local_port_range = 1024 65535
Dies ermöglicht die Verwendung von kurzlebigen Ports von 1024-65535. Wenn ich Dienste habe, die an Port 3306 gebunden sind (z. B. mySQL), können diese manchmal nicht gestartet werden, da der Port verwendet wird.
Bezieht sich dies auf die Tatsache, dass: (Und dies ist eine Aussage, die ich um Bestätigung bitte):
- (srcip, srcport, dstip, dstport) müssen für jede Verbindung mit dem Portbereich von 1-65535 eindeutig sein (ohne Berücksichtigung der Verwendung kurzlebiger Ports durch das Betriebssystem).
- Damit ein Socket gebunden werden kann, kann er als (srcip, srcport, *, *) angesehen werden. Oder anders ausgedrückt: Darf die IP diesen Port aus keinem Grund zum Binden verwenden?
Ich kann das obige Verhalten überprüfen, dh ich verwende die exakte sysctl-Zeile oben, und aus diesem Grund habe ich mySQL auf einen Port unter 1024 verschoben, da es gelegentlich und sehr zufällig nicht neu gestartet werden konnte, da angenommen wurde, dass das Betriebssystem diesen Port verwendet (3306). für einen kurzlebigen Hafen.
quelle
Antworten:
Sie haben hier zwei Hauptfragen:
1.
Ja. Nehmen Sie zum Beispiel einen Load Balancing-Router, der alle Verbindungen an eine NAT-IP-Adresse sendet. Dies ist wahrscheinlich der Fall, wenn Sie viele
SRC IP
Verbindungen zum Engpass eines einzelnen habenDST IP
.Dies bedeutet, dass Ihr Webserver eine Reihe von Verbindungen haben kann wie:
und das ist vollkommen in Ordnung. Wenn jedoch alle 'Fremdadressen' gleich sind, kann dies zu einem Problem führen (z. B. 'Großer Router, der NAT <---> Server mit einer IP-Adresse ausführt').
Wenn ich postulieren müsste, warum die kurzlebige Erschöpfung von Ports kein häufiges Problem ist, würde ich vorschlagen, dass jeder Port einen Überwachungsdienst und genügend Ressourcen benötigt, um zu antworten - eine andere Ressource (Speicher, CPU) ist normalerweise zuerst ein Engpass.
Ich persönlich bin jedoch bei der Arbeit in einem Lastausgleichsunternehmen auf einige Probleme mit der Erschöpfung des Hafens gestoßen.
2. Warum kann ein verwendeter Port ein Problem für einen Abhördienst darstellen?
Der mySQL-Server kann nicht an diesen Port gebunden werden, wenn er verwendet wird - beispielsweise von localhost: 3306 oder auf allen Schnittstellen. Siehe zum Beispiel die Zeile 0.0.0.0:80 in der folgenden
netstat
Ausgabe?Dies bedeutet, dass Port 80 über alle Schnittstellen lokal auf dem Server lauscht . Wenn ein anderer Prozess Port 80 hält, bevor mein
nginx
Server gestartetnginx
wird, kann er die Kontrolle über diesen Port nicht übernehmen und schlägt wahrscheinlich beim Start fehl.Normalerweise ist Port 3306 in Ordnung, da Überwachungsdienste vordefinierte Ports (oder Bereiche) haben, die vom Host-Computer angefordert werden - z. B. Port 80 und 443 für Webserver.
quelle
a: Ja, wenn Ihr lokaler Port 1-65535 ist, beträgt die Anzahl der Verbindungen 65k-1 (ein Port ist Listen).
a: Eine einzelne IP konnte unter xxxx: 80 nicht mehr als 65.000 Verbindungen zu meinem Webserver öffnen, da srcip, srcport, dstip, dstport eindeutig sind. Ja, Sie könnten viel mehr als 65k unterstützen, wenn Soruce IP anders ist
quelle