Der Port scheint offen zu sein, aber die Verbindung wurde abgelehnt


21

Ich versuche, Port 3000 unter Ubuntu 12.04 zu öffnen, da dort ein Webserver lauscht. Ich bin hier etwas außerhalb meiner Komfortzone und habe viele Stunden damit verbracht, das Problem zu lösen, ohne Erfolg.

Port scheint in der Firewall offen zu sein:

$> sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
...
3000/tcp                   ALLOW       Anywhere
3000/tcp                   ALLOW       Anywhere (v6)

Der Server überwacht diesen Port in Ordnung:

$> netstat -an | grep "LISTEN "
...
tcp        0      0 127.0.0.1:3000          0.0.0.0:*               LISTEN     
...

Und ich kann sogar wgetdie Indexseite in Ordnung bringen:

$> wget localhost:3000
Connecting to localhost (localhost)|127.0.0.1|:3000... connected.
HTTP request sent, awaiting response... 200 OK

Und die empfangene Datei enthält was ich erwarte ("Hallo Welt" :).

Wenn ich es jedoch von einem anderen Computer aus versuche oder wenn ich einen wget mydomain.com:3000erhalte "connection refused"und nmap mir mitteilt, dass der Port nicht offen ist:

$> nmap -A -T4 mydomain.com
Host is up (0.00032s latency).
...
Not shown: 999 closed ports
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 5.9p1 Debian 5ubuntu1 (protocol 2.0)
...
Service Info: OS: Linux

Irgendeine Idee was ich als nächstes probieren soll ???

BEARBEITEN

Hier ist, was Traceroute gibt:

$> traceroute mydomain.com
traceroute to mydomain.com (176.31.x.x), 30 hops max, 60 byte packets
 1  mydomain.com (176.31.x.x)  0.034 ms  0.013 ms  0.010 ms

Ufw deaktivieren, erneut versuchen. Wenn dies nicht funktioniert, befindet sich eine andere Firewall / ein anderes Gerät zwischen dem Remotecomputer und Ihrem Server.
ish

Ich habe es bereits versucht .. nicht gelöst :(
Sebpiq

"Zwischen dem Remote-Computer und Ihrem Server befindet sich eine andere Firewall / ein anderes Gerät." : das ist sehr unwahrscheinlich. Ich habe das zweite wget vom Server aus versucht, damit es eine Rundreise durch das Netzwerk macht.
Sebpiq

huh? Sie können nicht wget serverseb.com von serverseb eingeben und es zu einer Rundreise bringen, ohne etwas ausgefallene Routing-Magie von iptables. Bitte fügen Sie die Ausgabe des traceroute mydomain.comRemote-Computers ein. Sie können die letzten zwei Oktette der letzten (Server-) IP aus Datenschutzgründen ausgeben.
ish

bearbeitet mit einem
traceroute

Antworten:


24

Wenn Ihr Server nur die localhost-Schnittstelle überwacht, können Sie nicht von einem Remotecomputer aus darauf zugreifen. Dies scheint Ihr primäres Problem zu sein, da in Ihrer netstat-Ausgabe nur 127.0.0.1:3000 aufgeführt ist.

Sie müssen auch sicherstellen, dass "mydomain.com" in die richtige IP-Adresse für Ihren Computer aufgelöst wird, sodass die Verbindung mit diesem Computer zur Kommunikation mit der externen Schnittstelle dieses Computers führt.


Ich kann die Maschine mit ihrem Namen ansprechen, daher ist die Namensauflösung hier wohl nicht das Problem. Wie kann ich dafür sorgen, dass der Server von überall horcht?
Sebpiq

1
@sebpiq Diese Auflösung ist programmspezifisch. Sie müssen den Listener des Programms über den Namen ( eth0oder so ähnlich), die IP-Adresse (192.168.1.99 oder so ähnlich) oder die MAC-Adresse an die richtige Schnittstelle binden . Das hängt vom Programm ab.
Wiedereinsetzung von Monica - ζ--

uugh ... klingt verrückt: S Ich werde versuchen, darüber zu googeln. Mein Server ist node.js, daher überprüfe ich, ob Informationen zu der Schnittstelle vorhanden sind, zu der ich eine Verbindung herstellen muss.
Sebpiq

Yeepee !!! @ObsessiveFOSS und dobey, vielen Dank! Mein node.js-Server hat tatsächlich nur localhost abgehört. Ich wusste nicht, dass das so ist, und keines der Tutorials erwähnte das.
Sebpiq

@sebpiq Kein Problem. :-)
Reinstate Monica - ----

13

Ich hatte dieses Problem vor kurzem mit einem nodejs HTTPS-Server, und die Lösung zu ihm war, "localhost", "127.0.0.1" oder sogar den Domain-Namen nicht zu verwenden. Es sollte "0.0.0.0" verwendet werden

Ich glaube, dies fungiert als Platzhalter und ermöglicht nun die öffentliche Auflösung über den Domainnamen und funktioniert auch mit "localhost".

Bearbeiten: Hier ist ein Link zu einer Serverfehlerseite zum Thema 0.0.0.0: /server/78048/whats-the-difference-between-ip-address-0-0-0-0-and- 127-0-0-1


Verwenden Sie "0.0.0.0" wo genau?
Adaephon

@Adaephon In meinem Fall habe ich einen Node-basierten Webserver erstellt. Ich hatte zu ändern: }).listen(3000, '127.0.0.1'); zu }).listen(3000, '0.0.0.0'); in meinem Code.
Sami Fouad

@Adaephon Also ich bin mir nicht sicher, wie viel Hilfe das war, aber wo immer Sie die IP / den Hostnamen definieren, versuchen Sie stattdessen 0.0.0.0.
Sami Fouad

kannst du bitte meinen post besuchen stackoverflow.com/questions/37922804/…
Kar19

1
0.0.0.0 (oder besser gesagt die Binärdarstellung 0) wird aus der Sicht der Socket-Schnittstelle als jeder hörend betrachtet. Sie können eine andere IP-Adresse angeben, und diese hört nur auf die Schnittstelle, an der Sie diese IP-Adresse haben. Wenn Sie beispielsweise 127.0.0.1 angeben, können Sie nur Verbindungen von den 127. *. *. * -IPs (wirklich localhost) oder von anderen Computern mit stark verpfuschten Routingtabellen empfangen, die auf Ihre 127.0.0.1 zugreifen würden (um dies zu testen) letzter Fall!)
Paul Stelian

3

Besteht die Möglichkeit, dass Sie AWS oder andere Cloud-Dienste verwenden? In diesem Fall sollte der Port auf Inctance (OS) -Konfigurationsebene oder danach geöffnet werden. Insbesondere in AWS sollten Sie nach "Sicherheitsgruppen" suchen, in denen Sie den Zugriff auf Port 3000 öffnen sollten

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.