web-dev-qa-db-ja.com

ポート(タスクサーバー)をリッスンする場合、ローカルアドレスは `localhost`または` 0.0.0.0`である必要がありますか?

私は何日もの間、自分のコンピューター(Arch Linux)でtaskdサーバーを動作させようとしてきました。私が今直面している問題は、taskdの構成ドキュメント( https://taskwarrior.org/docs/taskserver/troubleshooting-sync.html )に、アドレスとしてのhostname -fの出力(「CN」が何を省略しているかわかりません)。 192.168で始まるローカルIPアドレスも試してみましたが、リンクしたトラブルシューティングガイドにあるハンドシェイクエラーが発生しました。

他のマシンからタスクサーバーにアクセスできなかったため、少し調査を開始しました。私はこれを見つけました:

使用しているポートをリッスンするときは、54000とします。nc -l -p 54000を使用すると、これはss -lntu | grep 54000の出力として表示されます。

tcp    LISTEN   0        10                0.0.0.0:54000          0.0.0.0:*

同じポートでリッスンするtaskdを起動すると、ssは次のようになります。

tcp    LISTEN   0        4               127.0.0.1:54000          0.0.0.0:*

別のマシンから、nc -vv 192.168.x.y 54000(サーバーのIPアドレスを使用)でリッスンしながらポートを確認しようとしましたが、ローカルアドレスが0.0.0.0の場合、ポートが開いていると表示されることがわかりました。それ以外の場合は、閉じた状態で表示されます。これは、127.0.0.1が本質的にlocalhostであり、ネットワークからそれを確認できないためだと思いますか?

taskdには、サーバーオプション付きの構成ファイルもあり、ドキュメントの指示に従って、hostname -fの出力であるwatermelon.localdomainを入力しました。それがlocalhostに翻訳されていると思いますよね?

よろしくお願いします!


更新2018/04/21

設定のserver変数を0.0.0.0:54000に設定することで問題を解決できました。これにより、taskdがポート54000のアドレスをリッスンできるようになりました。今ではすべてが美しく機能します。 taskdのドキュメントは、私が推測するトピックに関して少しあいまいでした。

4
bp99

ソケットは、特定のIPとポートでリッスンするように構成されています。通常、ソケットに使用する2つの主要な構成と、それほど一般的ではありませんが便利な3つ目の構成があります。

1)サービスを実行しているマシンからの通信のみを許可する

これは、127.0.0.1:54000が表示されたときに構成されます。 [〜#〜] only [〜#〜]ホストマシンはこのサービスにアクセスできます。リバースプロキシのようなものを使用して外部からのアクセスを許可できますが、ネットワーク上の何もそれに接続することはできません。

2)サーバーから到達可能なネットワーク上のすべてのマシンへ

これは、0.0.0.0:54000が表示されたときに構成されます。これにより、パケットがサービスに到達できる限り、何でもこのサービスと通信できます。

3)サーバーが参加している特定のネットワークのみ

これは、192.168.0.2:54000(または任意のIP)が表示されたときに構成されます。これは、このネットワークの[〜#〜] only [〜#〜] thissubnetがアクセスを許可されることを意味します。

サービスをネットワーク上の他のマシンから接続できるようにする場合は、サービスを0.0.0.0またはローカルIPにバインドする必要があります。

5
Andrew