Hallo Frederic,
ich habe gerade in C ein Server-Client-Programm geschrieben,
das über Socks von Linux nach Linux über das internet
kommuniziert.
Meinst Du mit Socks das „Proxy-Protokol“ Socks? (Ist eine reine Verständnisfrage, könnte ja auch ein Tippfehler sein und Sockets gemeint sein)
auf localhost funktioniert das soweit auch, nur wenn ich das
Serverprogramm auf einem entfernten Rechner starte, erhalte
ich per nmap dass der Port „closed“ ist. Der Port ist
definitiv freigeschaltet (funktioniert auch z.B. mit mySQL).
Wenn ich versuche mit dem client zu connecten erhalte ich
logischerweise „Connection refused“.
Ich habe per Google gefunden dass man anscheinend auf dem
Server eine solche anwendung die über socks kommunizieren
möchte zuerst in /etc/xinet.d und /etc/services eintragen
muss.
Um einen solchen Dienst zu installieren und zu Betreiben brauchst Du auf dem Server das Paket openbsd-inetd (xinetd ist eine erweiterte Variante, unter Debian ist das zuerst genannte Standard). Damit wird ein Dienst on-demand gestartet und entsprechend auch die Schnittstellen geschaltet.
Der Eintrag in der /etc/services dient nur dazu, den Port mit einem eindeutigen Namen zu versehen.
Beispiel:
Für MySQL würde drin stehen 3306/tcp mysql
Weder auf meinem Server (Debian Lenny) noch auf dem client
(Ubuntu 9.10) kann ich aber den Ordner /etc/xinet.d finden…
Ist normal, da es nicht zum Standard-Installationsumfang gehört. Muss auch nur auf dem Server installiert werden, da der Client ja aktiv eine Verbindung aufbaut und der Server bei einer solchen Anfrage dann entsprechend mit inetd den Dienst startet und die Ports öffnet. Alternativ müsstest Du wohl in Deinem Programm die entsprechenden Routinen einbauen, damit diese direkt auf den Netzwerk-Stack von Linux zugreifen (so würde ich das, als Nicht-Programmierer, erklären).
Wo muss ich den Service eintragen, damit sich der Port
öffnet???
Nach der Installation von openbsd-inetd gibt es in /etc eine Datei namens inetd.conf, dort siehst Du auch Beispieleinträge. Dementsprechend musst Du Deinen Dienst da rein schreiben und mit /etc/init.d/openbsd-inetd restart neu starten, damit er aktiv wird.
Wenn’s weiterhin Probleme gibt, einfach nochmal Bescheid geben. Evtl. kannst Du mir ja mal das Programm fertig kompiliert (?) schicken, dann sehe ich mir mal an, was es braucht/möchte/macht.
Gruß und viel Erfolg beim testen
Peter