Verbindung ohne ports im Router?

Hallo
Ich habe ein Problem,
ich arbeite an einem Server und Client die sic durchs Internet verbinden.
Nur Blöderweise muss man dazu den Port im Router öffnen. Gibt es eine Andere möglichkeit ein Server Client komunikatzieren zu lassen ohne die Ports im Router zu öffnen? Muss auch nicht Java Socket sein wer was besseres kenn kein Problem einfach sagen.
Hoffe auf Antwort
Danke im vorraus

Ist der Server auch hinter einen Router oder ein richtiger Server im Netz?

Das geht nur, wenn du einen zentralen Server (im Internet) hast. Was mir spontan einfällt, wenn es unbedingt eine Direktverbindung sein muss und der Traffic nicht über den Server laufen soll, ist UDP hole punching.
Hier gibt es einen sehr anschaulichen Artikel zur Thematik.

Eigentlich soll es ein Multyplayer von einem Spiel verden:

Hier ist der 1 Spieler der den Client startet —> Router //kommt der Client noch durch --> Internet verbindung zu IP adresse des Servers —> Router //Hier das Problem wenn der Port nicht geöffnet ist wird er blockiert --> PC des Server

Wenn es ein Spiel werden soll, dann stellt die Nutzung von UPD ja auch kein Problem dar.
An einem zentralen, erreichbaren Server im Internet kommst du aber nicht vorbei.
Dazu ist auch noch zu sagen, dass UDP hole punching nicht in jeder Umgebung funktioniert.

im vorliegenden fall wird TO so oder so nicht um einen zentralen server rumkommen, denn wie es aussieht will es TO ja sehr “bequem”
und wenn er dem user kein port-forward zumuten will wird er sicher auch nicht wollen das der user selbst erst umständlich seine ip selbst rausfinden muss

ist udp-hp bei sowas zu empfehlen ? ja, da es mit java schnell und einfach umsetzbar ist, und man zur not mit etwas polling auch viele free-hoster missbrauchen kann

wäre es sinnvoller bei sowas dem user schon ein port-forwarding abzuverlangen ? vielleicht
grundsätzlich gilt : will man hosten muss man eigentlich selbst für sorge tragen das keine firewall im weg ist

letzte möglichkeit : UPnP , was aber gerade in letzter zeit ja mal wieder stark in die kritik geraten ist da man viele router auch von außen mit UPnP steuern kann (quelle : heise)
auch war es mehr nur so ne mode-erscheinung, viele router können es zwar, haben es aber deaktiviert

es gibt halt viele möglichkeiten das von TO geschilderte problem zu lösen, es ist meist nur von den firewalls abhängig

@cmrudolph
mit entsprechendem aufwand bekommt mans auch mit random-NATs hin, der verbindungsaufbau dauert halt nur länger
lediglich NATs bei denen udp gesperrt ist hat man keine chance

Naja, ob es sinnvoll ist, alle 65536 Ports durchzuprobieren? Ich weiß nicht…

Im typischen Heimumfeld dürften die Voraussetzungen gegeben sein, dass man den ausgehenden Port vorhersagen kann und etwas „stateful-inspection-ähnliches“ im Router für UDP konfiguriert ist - also, dass UDP hole punching funktioniert.

UDP komplett zu blocken macht keinen Sinn, denn dann ließen sich die meisten Onlinespiele nicht mehr spielen. Nichtmal eine DNS-Anfrage könnte aus dem Netz gestellt werden (es könnte nur der Router als DNS genutzt werden).

falsch , denn DNS kann auch auf TCP ausweichen (zumindest laut protokoll)

warum man in einem LAN einen rechner so konfigurieren sollte das er einen anderen DNS als sein gateway nutzt , da erschließt sich mir nicht wirklich der sinn , denn ob DNS-blockade hin oder her , wenn der provider nicht nur den DNS versaut um gewisse seiten zu sperren sondern auch die gateways ist es egal ob dein rechner die echte ip des ziel-servers kennt

Nein, da liegst du falsch. TCP wird nur für Zonentransfers verwendet. Probier mal einen DNS mit TCP abzufragen. Da wirst du keine Antwort bekommen.

Es gibt verschiedene Gründe, einen alternativen DNS zu verwenden. In Heimnetzen, so habe ich es oben auch geschrieben, wird die Konfiguration meistens passen. In Unternehmensnetzen gönnt man sich aber für gewöhnlich einen dedizierten DNS (wenn man Active Directory verwendet, dann bleibt einem eigentlich gar nichts anderes übrig). Das Gateway ist dann das, was es sein soll: nämlich nur Gateway.

man sollte vorher mal nachlesen

Protokoll[Bearbeiten]

DNS-Anfragen werden normalerweise per UDP Port 53 zum Namensserver gesendet. Der DNS-Standard fordert aber auch die Unterstützung von TCP für Fragen, deren Antwort zu groß für UDP-Übertragung sind.[1] Falls kein Extended DNS verwendet wird (EDNS), beträgt die maximal zulässige Länge des DNS-UDP-Pakets 512 Bytes. Überlange Antworten werden daher abgeschnitten übertragen. Durch Setzen des Truncated-Flags wird der anfragende Client über diesen Sachverhalt informiert. Er muss dann entscheiden, ob ihm die Antwort reicht oder nicht. Gegebenenfalls wird er die Anfrage per TCP Port 53 wiederholen.
Zonentransfers werden stets über Port 53 TCP durchgeführt. Die Auslösung von Zonentransfers erfolgt aber gewöhnlich per UDP.

wie gesagt : laut protokoll kann man DNS auch über TCP laufen lassen

Ist aber in den seltensten Fällen in einer Firewall freigegeben.

Nein, man kann DNS nicht einfach so über TCP laufen lassen.

Und in der Praxis ist es nunmal so, dass normale Anfragen per TCP nicht beantwortet werden. Probier es einfach aus.

@DarkRose
ist mir soweit auch klar, ich wollte lediglich ein belegbares argument bringen das man es durch aus machen kann UDP-verkehr zu blockieren und trotzdem “normale” dienste welche über TCP laufen weiter nutzen kann

außerdem ist es nun mal so das sowohl in eigentlich allen privaten LANs sowie in den meisten firmen-netzen in der regel nur ein knotenpunkt existiert, und dieser eine knotenpunkt sowohl als DHCP, DNS und gateway arbeitet, es also eigentlich keinen grund gibt UDP-verkehr zuzulassen nur damit irgendein system innerhalb des netzes seine eigene DNS-anfrage an einen server außerhalb stellen kann
@cmrudolph
dieses MÜSSEN bezieht sich, zumindest der aussage von wikipedia, aber auch auf TCP und die unterstützung das ein DNS-server auch darüber auskunft erteilen können MUSS

in wie fern “große public DNS” darauf eingestellt sind direkt mit einer TCP-frage zumzugehen anstatt erstmal vorher eine UDP-anfrage zu erwarten weis ich nicht, und ich hab jetzt leider weder die zeit noch die lust mir da n test-beispiel zusammen zu kleben

und mir ist es auch ziemlich egal wie du zu dem punkt stehst in deinem LAN deinen router nur als einfaches gateway zu nutzen und dir lieber den aufwand gibst jedes gerät so einzurichten das es selbst eine anfrage z.b. an den google-dns stellt

es ist nun mal so das in den meisten (wie gesagt : eigentlich fast allen) privaten netzen alleine aus bequemlichkeit der nutzer die router von werk schon so eingestellt sind das sie sowohl gateway als auch dhcp und dns sind

die paar wenigen “durchgeknallten” (und ja, ich gehör auch dazu) die ihr netz wirklich extrem verkompliziert aufbauen und alles selbst zusammen basteln bilden nun echt die ausnahme

Oben sagte ich ja bereits, dass in Heimnetzen alles über den 08-15 Router läuft. Bei den Unternehmensnetzen kann ich dir aber nicht zustimmen. Wie ebenfalls oben bereits geschrieben, leistet sich jedes Unternehmen, welches einen Active Directory DC betreibt einen eigenen DNS. Das macht selbstverständlich UDP Traffic von allen anderen Maschinen aus ins Internet überflüssig. Und selbst wenn man DNS-Traffic erlauben möchte, gibt man in der Firewall einfach den UDP Port 53 frei.

Da ist der Eintrag in der Wikipedia dann leider falsch. Das von mir gepostete Zitat kommt aus dem RFC für DNS und dort steht klar „SHOULD“. Und was „SHOULD“ bedeutet, ist ganz klar definiert (am Anfang des RFC).

Ich habe das gerade mal kurz getestet und tatsächlich einen DNS gefunden, der TCP Anfragen beantwortet (der berühmte Google DNS 8.8.8.8). Bei allen anderen DNS kam keine Antwort.
Testen kann man das mit folgender Zeile ganz einfach:

dig +tcp @<IP-vom-DNS> google.com

Der Test bestätigt meine Interpretation vom „SHOULD“ übrigens.

Das ist kein Mehraufwand. Die IP vom DNS wird per DHCP mit übertragen. Das passiert auch, wenn das Gateway selbst als DNS verwendet werden soll. Dann schickt der DHCP eben die IP vom Gateway als DNS raus.

Peace

Christian

Kleine Anmerkung zum DNS per TCP Thema:

Hatte die Tage ein Problem mit Vodafone Usern, welche bestimmte Hostnamen nicht auflösen konnte. Mit anderen Anbietern ging es.

Hab daraufhin Vodafone angeschrieben und den Chef der Vodafone DNS Server am Hörer gehabt. Der meinte nebenbei: DNS Anfragen gehen bei ihnen erstmal per UDP raus. Bei sehr großen anfragen (>1,5k) wird das aber über TCP abgewickelt. D.h. wenn du als DNS eine relativ große Antwort liefern musst, dann musst du die per TCP beantworten können, sonst vergraulst du Vodafone User.

Demnach sollte ein anständiger DNS Server beides beherrschen: UDP und TCP.

Aber um auf die eigentliche Problematik zurück zu kommen:

Ein Multiplayer-Spiel, welches über das Internet gespielt wird und egal wie, ohne zentralen Server auskommt… Das ist in meinen Augen in anbetracht der Router-Problematik keine gute Idee. Nein, es ist in gewisser weise sogar zum scheitern verurteilt.

Just my 5 cent.