ポートは開いているようですが、接続は拒否されました


21

Ubuntu 12.04でポート3000を開こうとしていますが、Webサーバーがリッスンしているためです。私はここのコンフォートゾーンから少し外れており、成功せずに問題を解決しようとして多くの時間を費やしました。

ファイアウォールでポートが開いているようです:

$> sudo ufw status
Status: active

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

サーバーはそのポートで大丈夫です:

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

そして、私もwget大丈夫インデックスページ:

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

そして、受信したファイルには、私が期待するものが含まれています( "hello world" :)。

ただし、別のコンピューターから試行する場合、または私wget mydomain.com:3000が取得した"connection refused"場合、nmapはポートが開いていないことを教えてくれます:

$> 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

次は何を試してみるべきか?

編集

tracerouteが提供するものは次のとおりです。

$> 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を無効にして、もう一度試してください。それでも解決しない場合は、リモートコンピューターとサーバーの間に別のファイアウォール/デバイスがあります。
ISH

私はすでに試しました..それを解決しませんでした:
sebpiq

「リモートコンピューターとサーバーの間に別のファイアウォール/デバイスがあります。」:これは非常にまれです。サーバーから2番目のwgetを試し、ネットワークを往復しました。
sebpiq

え?serversebからwget serverseb.comと入力して、手間のかかるiptablesルーティングマジックなしでラウンドトリップを実行することはできません。traceroute mydomain.comリモートコンピューターからの出力を貼り付けてください。プライバシーのために、最後の(サーバー)IPの最後の2オクテットを**アウトできます。
ISH

tracerouteで編集
sebpiq

回答:


24

サーバーがlocalhostインターフェイスのみでリッスンしている場合、リモートコンピューターからアクセスすることはできません。netstatの出力には127.0.0.1:3000のみがリストされているため、これが主な問題のようです。

また、「mydomain.com」がマシンの正しいIPアドレスに解決されることを確認する必要があります。これにより、それに接続すると、そのマシンの外部インターフェースと通信することになります。


名前を使用してマシンにsshできるので、名前解決はここでは問題ではないと思います。サーバーがどこからでもリッスンできるようにするにはどうすればよいですか?
sebpiq

1
@sebpiqこの解像度はプログラム固有です。名前{ eth0、またはそのようなもの)、IPアドレス(192.168.1.99、またはそのようなもの)、またはMACアドレスによって、プログラムのリスナーを適切なインターフェースにバインドする必要があります。これはプログラムによって異なります。
モニカの復活-ζ--12年

うーん...非常識に聞こえる:S私はそれについてグーグルしようとします。私のサーバーはnode.jsなので、接続する必要のあるインターフェイスに関する情報があるかどうかを確認します。
sebpiq

イーピー!!! @ObsessiveFOSSとdobeyありがとうございます!私のnode.jsサーバーは、実際にはlocalhostでのみリッスンしていました。私はそれがそのようになっていることを知りませんでした、そして、チュートリアルのどれもそれについて言及しませんでした。
sebpiq

@sebpiq問題ありません。:-)
モニカの復活-ζ--12年

13

最近、nodejs HTTPSサーバーでこの問題が発生しましたが、その解決策は「localhost」、「127.0.0.1」、さらにはドメイン名を使用しないことでした。「0.0.0.0」を使用することでした

これはワイルドカードとして機能し、ドメイン名を介したパブリック解決を可能にし、「localhost」でも機能すると考えています

編集:0.0.0.0トピックのserverfaultページへのリンクは次のとおりです:https : //serverfault.com/questions/78048/whats-the-difference-between-ip-address-0-0-0-0-- 127-0-0-1


正確にどこで「0.0.0.0」を使用しますか?
アデフォン

@Adaephonさて、私の場合、ノードベースのWebサーバーを作成しました。:私は変更しなければならなかった }).listen(3000, '127.0.0.1');}).listen(3000, '0.0.0.0'); 私のコードで。
サミのFouad

@Adaephonだから、それがどれだけ助けになったかはわかりませんが、IP /ホスト名をどこで定義していても、代わりに0.0.0.0を試してください。
サミのFouad

私の投稿をご覧ください。 stackoverflow.com/questions/37922804/...
Kar19

1
0.0.0.0(またはバイナリ表現0)は、ソケットインターフェイスの観点から全員をリッスンしていると見なされます。別のIPを指定すると、そのIPがあるインターフェイスのみをリッスンします。たとえば、127.0.0.1を指定すると、127。*。*。* IP(実際にはローカルホスト)から、または127.0.0.1にアクセスするために深刻なエラーが発生したルーティングテーブルを持つ他のコンピューターからのみ接続を受信できます(これをテストするには)最後のケース!)
ポールステリアン

3

AWSまたはその他のクラウドサービスを使用している可能性はありますか?その場合、ポートはInctance(OS)構成レベル以降で開く必要があります。特にAWSでは、ポート3000へのアクセスを開く必要がある「セキュリティグループ」を探す必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.