Ich bin ein Programmierer, der versucht, einige Dinge außerhalb meiner Domäne herauszufinden:
Angenommen, ich habe einen Computer und Clients stellen TCP-Verbindungen (aber nicht http!) Her. Ich möchte Clients basierend auf dem Hostnamen, mit dem sie eine Verbindung herstellen, zu ihren eigenen Ports umleiten. Beispielsweise stellt client1 eine Verbindung zu client1.myserver.com her und ist mit Port 1234 verbunden. Client2.myserver.com -> 1235, client3.myserver.com -> 1236 usw.
Ich möchte dynamisch steuern, wie Ports x für Host y tatsächlich auf Port z auf meinem physischen Computer zeigen.
Beim Googeln dieser Informationen werden Verweise auf Firewalls, Proxys und Reverse-Proxys angezeigt. Welche Software brauche ich eigentlich? Ermöglicht vorhandene Software solche Änderungen bei Bedarf (ich habe gehört, dass Firewall-Änderungen einen Tag erfordern)?
Wenn ich eine solche Ebene selbst schreiben wollte (da sie möglicherweise etwas anwendungsspezifisch ist), könnte dies in Java oder node.js erfolgen (ich meine, könnte dies mit einer API auf höherer Ebene erfolgen oder muss ich anfangen, die IP auseinanderzunehmen? Pakete)? Wie würde ich wissen, mit welchem Hostnamen der Client verbunden ist, da alle Hostnamen auf demselben Computer aufgelöst werden?
Ich freue mich auch über Hinweise auf Lesematerial.
quelle
Sie können dies am einfachsten mithilfe von SRV-Einträgen in Ihrem DNS erreichen:
http://en.wikipedia.org/wiki/SRV_record
quelle
Können Sie klarer beschreiben, was Sie versuchen und warum? Das "Warum" wird sehr helfen. Was sind die Kunden? Was ist das Protokoll?
Es gibt viele Möglichkeiten, dies basierend auf den Protokollen und Datenströmen zu tun.
Betrachten Sie die Injektion von pf, iptables oder ebtables, siehe "ssh blacklist" für Beispiele. Informationen zur allgemeinen Umleitung finden Sie in LVS, HAproxy und anderen Load Balancern.
Ein alter Trick ist ein "Weck" -System. Dies funktioniert hervorragend für SSH oder andere verschlüsselte Protokolle, die die Ermittlung der Quelldomäne CPU-intensiver machen (Decodieren des Headers). Dadurch wird nur ein einziger Port ausgeführt, wenn niemand verbunden ist.
Bestimmte Ports können basierend auf Schlüsseln / Benutzern, Reverse Lookup, Nachrichtenübermittlung usw. zugewiesen werden. Einige lassen die Instanzen einfach laufen und öffnen / schließen sie mithilfe der pf / iptables-Firewall-Injektion. Andere erweitern dies mithilfe einer Firewall-Regel, um den Dienststart auszulösen, und es wird kein anfänglicher SSH (oder ein anderer Dienst) ausgeführt, bis ein angegebener Port mit einem bestimmten Pakettyp gepingt wird. Ich bevorzuge eine "kürzlich übereinstimmende" benutzerdefinierte Firewall-Regel, um Streupakete zu blockieren und die Serverinstanzen für eine weniger dynamische Interaktion mit der Firewall zu stoppen / zu starten.
Diese Idee kann mit jedem Protokoll und Dienst funktionieren, der codiert oder skriptgesteuert werden kann.
Lesematerial für TCP / IP-Netzwerke: Alles, was von W. Richard Stevens geschrieben oder empfohlen wurde. http://www.kohala.com/start/
Verwenden Sie SSH-Tunnel nicht als Notlösung in der Entwicklung. Diese könnten alles erreichen, was Sie ohne Code benötigen. Was ist deine App? Sollte die Kommunikation nicht sicher sein? Wie wollen Sie Skript-Kiddie-Hacker auf die schwarze Liste setzen? Das ist mehr, was Sie schreiben und debuggen müssen. Sie sollten Ihren Code ohnehin unterteilen, also entwickeln Sie alles andere mithilfe von SSH als Transport, Portweiterleitung, Verschlüsselung, Verwendungsprotokollierung, Blacklisting usw. Wenn alles andere erledigt ist, schreiben Sie Ihren eigenen Netzwerkprotokollmechanismus, um SSH zu ersetzen. Für Benutzer auf dem Gateway-SSH-Server ist kein Terminalzugriff erforderlich, um Tunnel verwenden zu können.
quelle