Laden...

Kestrel Server von privatem Netzwerk aus erreichen

Erstellt von Olii vor 5 Jahren Letzter Beitrag vor 5 Jahren 2.203 Views
O
Olii Themenstarter:in
76 Beiträge seit 2017
vor 5 Jahren
Kestrel Server von privatem Netzwerk aus erreichen

Hallo liebe Forum User,

ich habe ein kleines Problem das mich heute schon den ganzen Tag gekostet hat.

Ich habe eine WebApi für meine Mobile-App entwickelt die auf dem Webserver Kestrel aufgebaut ist. Diese läuft auf meinem Rechner auf dem Port 5001. Mein Computer ist über LAN verbunden.

Jetzt wollte ich meine App mal testen und mit dem Server verbinden. Dazu habe ich die IPv4 von meinem Rechner verwendet 194.168.2.***:5001.

Aber immer wenn ich versuche mich zu verbinden kommt 194.168.2.***:5001 hat die Verbindung abgelehnt.

Also habe ich es aus dem Browser von meinem Smartphone versucht und dass selbe geschieht. Von meinem Rechner aus kann ich allerdings auf die Api zugreifen.

Das habe ich alles versucht:

  • versucht Rechner und Smartphone über thearing zu verbinden
  • versucht ohne thearing zu verbinden
  • Rechner für alle Sichtbar gemacht im Netzwerk
  • Anti-Virus deaktiviert
  • Firewall deaktiviert
  • versucht zu verbinden über 198.168.2.***:5001
  • versucht über 127.0.0.1 zu verbinden
  • versucht über localhost zu verbinden
  • versucht über 10.0.2.2 zu verbinden (eigentlich nur für Emulatoren)
  • versucht über die IPV4 vom vEthernet zu gehen die mit 172.24.. beginnt

nicht funktioniert. Mein Smartphone ist über WLAN verbunden und mein Rechner über LAN. Die müssen im selben Netzwerk sein. Ich habe nichts am Router umgestellt oder etwas der gleichen. Alles Standardeinstellungen in dem Telekom Router.

Hat jemand noch eine Idee was ich versuchen kann?

Mein Server hört auft den Port 5001 falls das irgend eine Rolle spielt.

R
74 Beiträge seit 2006
vor 5 Jahren

android tethering over usb

tethering in den Netzwerkeinstellungen aktivieren
Ethernet over usb in den Entwicklereinstellungen setzen (Debugoptionen)

Gerät verbinden über USB. (WLAN und Mobiles Netzwerk ausschalten am Gerät)

Dein Rechner sollte jetzt ein neues Netzwerk melden.
commandline: ipconfig => IPv4 ablesen. Sollte Dir auffallen eine noch nie vorher gesehene Adresse zu entdecken. (neues öffentliches Netzwerk)

Ports/Anwendung in FW hinterlegen (eingehend)

Diese Adresse im Browser auf Deinem Gerät eingeben.

=> funktionierte bei mir wunderbar.

16.807 Beiträge seit 2008
vor 5 Jahren

Also das mit dem Tethering halte ich für Quatsch.
Eine App sollte problemlos via WiFi einen Server im Netzwerk erreichen können - auch ohne Tethering oder USB.

@Olli: mal mit einem anderen Device als dem Handy versucht, um einzugrenzen obs an der App oder am "Server" liegt?

Ansonsten:

Aber immer wenn ich versuche mich zu verbinden kommt 194.168.2.***:5001 hat die Verbindung abgelehnt.

Hoffentlich wurde das abgelehnt!
194.*er Adressen sind nicht privat; ergo ungültig für das LAN - ebenso 198er Adressen.

Private Adressen sind: 10.*er, 172.16-172.31.*er und 192.168.*er
Hast Du evtl. irgendwo nen Dreher oder ein komisch konfiguriertes LAN?

Man kann im LAN auch nicht-private Adressen mappen; macht aber mit Geräten oft Probleme.

Weitere Vermutung: Kestrel hört per default nur auf localhost. Also nur auf Verbindungen, die von localhost kommen.
Man muss via .UseUrls(hostUrl) angeben, wie Netzwerkadresse ist. Sonst wird Kestrel nie vom Netzwerk aus erreichbar sein.

Zudem sollte man Kestrel nur als Reverse Proxy betreiben; also auf Windows einen IIS davor schalten, der extern erreichbar ist.

O
Olii Themenstarter:in
76 Beiträge seit 2017
vor 5 Jahren

@Abt oh ich bin ein Schusel, ich meinte 192* und nicht 198 und 194. da bin ich mit den Zahlen wohl durcheinander gekommen. Zur Sicherheit habe ich gerade nochmal alles überprüft aber alles ist auf 192 eingestellt. Das LAN habe ich gar nicht konfiguriert. Von der Telekom is der Router gekommen, hab den eingestöpselt und los gings. Aber ich habe gerade noch in den Router Einstellungen nachgeschaut. Alle im selben Netz und ohne irgendwelche Einstellungen.

Ich werd es nochmal mit dem tethering versuchen, so wie es RED-BARON beschrieben hat. Vielleicht funktioniert das ja.

Ich bin echt kein Experte in Sachen Netzwerk aber inner Firma hats irgendwie funktioniert aber Zuhause ist irgendwie der Wurm drin. Ich versuche das tethering nochmal und schreibe hier ob es funktioniert hat.

16.807 Beiträge seit 2008
vor 5 Jahren

Hast du meine letzten 3 Zeilen beachtet?
Ich hab gesehen, dass mein Edit hier erfolgt ist, während Du eine Antwort geschrieben hast.

Ebenso kann es sein, dass der Router die Devices isoliert; also die Geräte sich im Netzwerk nicht sehen können, weil der Router die Information nicht weitergibt.
Tethering kann dieses Problem lösen; löst aber nicht die Ursache.
Tethering erzeugt hier nur ein direktes Netzwerk zwischen PC und Handy - das ist aber nicht Sinn der Sache.

O
Olii Themenstarter:in
76 Beiträge seit 2017
vor 5 Jahren

Oh danke für den Hinweis, die Zeilen waren nicht da als ich das gelesen habe.

Ich probiere das gerade aus und... ich muss dir wirklich danke. Ich bin gerade so froh. Vielen vielen dank Abt. Ich muss dir deine Hilfe irgendwann zurück zahlen irgendwie.

Es lag wirklich an Kestrel. Ich habe jetzt erstmal die url "hardgecoded" für die Computer IP und es hat sofort funktioniert. Ohne Firewall auszuschalten und ohne Tethering.

Seit 13:00 Uhr saß ich da jetzt dran 😄. nochmal vielen dank.

Also für alle die das Problem mal haben sollten:
Wenn Ihr Kestrel verwendet lässt Kestrel nur localhost zu. Damit ihr von einem Smartphone aus zugreifen könnt müsst ihr .UseUrls(hostUrl) (so wie es Abt beschrieben hat) ergänzen in der program.cs (falls ihr asp.net core verwendet). in meinem Fall sieht das dann in etwa so aus: .UseUrls("http://192.168.2.xxx:60000", "http://192.168.2.xxx:60001")

Nur ohne die Sterne (Sterne hab ich nur gemacht weil ich mich so wohler fülle).

Großes danke an Abt, aber auch an RED-BARON für eure Hilfe.

O
Olii Themenstarter:in
76 Beiträge seit 2017
vor 5 Jahren

Was mich aber wunder. Ich hatte heute Mittag extra die IP-Adresse ausgelesen die Kestrel zur Laufzeit verwendet hat, mit diesen Befehlen:

var httpConnectionFeature = httpContext.Features.Get<IHttpConnectionFeature>();
var localIpAddress = httpConnectionFeature?.LocalIpAddress;

Dort war meine Computer-Adresse verwendet worden und trotzdem konnte ich mich nur mit localhost verbinden. Das ist mir ein Rätsel.

16.807 Beiträge seit 2008
vor 5 Jahren

Du kannst auch einfach

UseUrls("http://*:<Port>")

schreiben, dann hört Kestrel auf alle Interfaces. Schau einfach mal in die Doku, da sind die Szenarien erklärt.
zB Docker-Default für das Url-Mapping ist http://+:80

PS: httpConnectionFeature?.LocalIpAddress ist Deine Local IP Address; aber nicht zwangsläufig die Adresse auf die Kestrel hört.

PPS: editier Dein Beitrag bitte bei den IP Adresse von "*" auf "x", wenn Du was kaschieren willst (nicht notwendig, weil es eh private Adressen sind; aber wenn Du Dich wohler fühlst..).
Weil * hat eben ne andere Bedeutung.