# ServerSocket im internet zugänglich machen



## FreedomTears (22. Aug 2007)

hey,
ich hab mir in mühsehliger arbeit ein kleines programm geschrieben das zwei netzwerkrechner miteinander verbindet, im großen und ganzen klappt auch alles und es geht nicht über die beispiele die man überall findet hinaus (den quelltext zu kopieren wäre etwas viel.....)!
allerdings hab ich bei allen beispielen nie 100% begriffen ob der rechner, sofern er ans internet angeschlossen ist, auch aus diesem heraus aufgerufen werden kann... wenn nicht, gibt es eine möglichkeit ein serversocket explizit als internetzugänglich zu deklarieren?

2 szenarien:
- ich hab sowohl server als auch client auf meinem rechner laufen und connecte per netzwerk ip vom client auf den server. das is kein problem und funktioniert auch wunderbar
- ich starte den server wie zuvor, den client lasse ich allerdings auf meine ip im internet zugreiffen. nach einiger zeit des wartens bekomme ich eine "java.net.SocketException: Network is unreachable" fehlermeldung...

ja, ich habe eine firewall, diese ist aber für meine test ausgeschalten.. zudem hab ich versucht eine regel zu erstellen die meinem jar bestimmte dinge erlaubt, was aber nicht geklappt hat da die firewall nur *.exe dateien rechte verteilen will (kaspersky)

wär toll wenn jemand ne idee hätte...


----------



## Dante (22. Aug 2007)

hi, hängt der rechner direkt am internet oder ist da zB. ein dsl-router dazwischen?

'Network is unreachable' heisst, dass dein Rechner den Adressbereich der eingegebenen IP nicht erreichen konnte, scheint also eher kein Fehler mit deinem Programm sondern ein Denkfehler beim testen zu sein...


----------



## FreedomTears (23. Aug 2007)

Ja, es hängt ein DSL Router dazwischen.. das problem ist, kann ich den irgentwie ignorieren beim addressieren bzw. genauer angeben das er auf meinem rechner schauen soll?


----------



## jPat (23. Aug 2007)

Meistens kann man beim Router einen port direkt zu PC weiterleiten lassen. Anleitungen dazu findest du im Internet. Evtl mal im P2P Network nachschauen.


----------



## ms (23. Aug 2007)

jPat hat gesagt.:
			
		

> Meistens kann man beim Router einen port direkt zu PC weiterleiten lassen. Anleitungen dazu findest du im Internet. Evtl mal im P2P Network nachschauen.


Stichwort: Portforwarding oder NAT


----------



## FreedomTears (23. Aug 2007)

vielen dank..  wäre toll, wenn das java programm unabhänig davon, in welchem netzwerk es gestartet wird diesen port selbst freigeben könnte, das wird aber wohl nich möglich sein da es die entsprechenden freigaben nicht hat.. oder fällt irgentjemand eine möglichkeit dazu ein?


----------



## ms (23. Aug 2007)

FreedomTears hat gesagt.:
			
		

> vielen dank..  wäre toll, wenn das java programm unabhänig davon, in welchem netzwerk es gestartet wird diesen port selbst freigeben könnte, das wird aber wohl nich möglich sein da es die entsprechenden freigaben nicht hat.. oder fällt irgentjemand eine möglichkeit dazu ein?


Dann könnten wir gleich komplett auf Security verzichten.


----------



## Dante (23. Aug 2007)

seit wann ist NAT denn ein sicherheitsfeature? Nicht alles glauben was dir der Hersteller auf die Platte schreibt.

Freedom Tears: Das Problem ist, dass du nicht genug öffentliche IP-Adressen hast, daher bildet dein Router eine öffentliche auf mehrere interne IP-Adressen ab. Ports welche du auf internen IP-Adressen öffnest sind daher - ohne weiteres - nicht auf der öffentlichen IP sichtbar.

Es gibt aber natürlich Möglichkeiten 'Löcher' ins NAT zu schlagen (hier kommt z.B. zum Tragen, dass NAT eben kein Sicherheitsfeature ist), das setzt aber etwas mehr Aufwand, wie Proxies vorraus.

Skype ist z.B. sehr gut darin, aus NATs auszubrechen.


----------



## ms (23. Aug 2007)

Dante hat gesagt.:
			
		

> seit wann ist NAT denn ein sicherheitsfeature? Nicht alles glauben was dir der Hersteller auf die Platte schreibt.



War das an mich gerichtet?

ms


----------



## FreedomTears (23. Aug 2007)

okay... also schön wärs.. *hust*

d.h. allerdings... sollte der server auf meinem rechner laufen und jemand versucht auf unser netzwerk zuzugreifen, über die ip die beispielsweise myip.name/?tab=myip ausgibt, dann sollte er sofern der port freigegeben ist auf diesen server zugreiffen können?


----------



## tuxedo (23. Aug 2007)

Jepp...

Es gibt auch noch Techniken wie UPnP.. Azureus nutzt das unter anderem. Wenn dein Router dann auch UPnP kann, kann die Anwendung dem Router sagen: Du, gib mir mal bitte Port XYZ frei. Und der Router macht das dann, sofern er UPnP Support hat und dieser aktiviert ist.

Wie das mit Java funzt: Kein Plan. 
Skype benutzt im übrigen nix mit Proxy. Skype bohrt die Löcher via  UDP Hole Punching. Siehe auch: http://www.heise.de/security/artikel/82054

Gruß
Alex


----------



## Dante (23. Aug 2007)

@ms: jip, aber platte sollte eigentlich packung heissen 

@freedom-tears: moment, ganz ruhig, was meinst du mit 'myip.name/?tab=myip'? das ist jedenfalls keine IP und ein zugriff beinhaltet immer einen port oder ein protokoll (aus dem sich dann ein default-port ergeben würde).

Was du in deinem DSL-Router einstellen kannst ist, wie oben auch schon gesagt, eine Port-Weiterleitung, d.h. dein DSL-Router nimmt z.B. auf Port 5555 Verbindungen an und leitet diese auf eine feste IP im internen Netz weiter. Wenn der entsprechende Port auf der internen IP dann geöffnet ist, funktioniert das relativ transparent.

@alex: hat wer gesagt, skype würde proxies benutzen? UDP hole punching funktioniert z.B. aber auch nur, wenn beide Kommunikationspartner wissen, dass sie nun mal damit anfangen sollen, somit benötigst du schon einen Proxy, der erstmal deine Verbindungsanfrage weiterleitet.


----------



## tuxedo (23. Aug 2007)

Hmm, okay, als ich mir den POst eben nochmal durchgelesen hab, ist mir aufgefallen dass der Proxy mit wirklich mit Skype assoziiert war. Sorry für die Verwechslung.

UDP H.P. braucht keinen Proxy, eher einen Server. Okay, kommt halt drauf an wie man Proxy definiert ;-)

- Alex


----------



## FreedomTears (23. Aug 2007)

klar behinahltet das noch einen port... es geht mir nur um den zugriff auf den server.. 123.234.345.456:4444 z.b...


----------



## NTB (23. Aug 2007)

FreedomTears hat gesagt.:
			
		

> okay... also schön wärs.. *hust*
> 
> d.h. allerdings... sollte der server auf meinem rechner laufen und jemand versucht auf unser netzwerk zuzugreifen, über die ip die beispielsweise myip.name/?tab=myip ausgibt, dann sollte er sofern der port freigegeben ist auf diesen server zugreiffen können?



Japp! Korrekt!

@dante: klick doch einfach mal drauf, dann weisst du, was er damit meint!


----------



## Dante (23. Aug 2007)

alex0801 hat gesagt.:
			
		

> UDP H.P. braucht keinen Proxy, eher einen Server. Okay, kommt halt drauf an wie man Proxy definiert ;-)



ja, das ist wohl die schuld meiner professorin, dort heisst die kiste nämlich Proxy  Das kommt imho aus der VoIP-Szene, dort heisst eigentlich alles was irgendwie am Aufbauen von Verbindungen beteiligt ist, Proxy.

Da der 'Server' ja aber wirklich Verbindungen zwischen zwei Knoten herstellt, würde ich ihn schon eher als Proxy denn als normalen Server bezeichnen. Ein Server stellt dem Client ja eigentlich nur Dienste zur Verfügung, relaying würde ich aber nicht als einen normalen Serverdienst bezeichnen. Kommt aber auch wieder auf die Definition an.  Man ist das anstrengend


----------

