私は何日もの間、自分のコンピューター(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
に翻訳されていると思いますよね?
よろしくお願いします!
設定のserver
変数を0.0.0.0:54000
に設定することで問題を解決できました。これにより、taskd
がポート54000
のアドレスをリッスンできるようになりました。今ではすべてが美しく機能します。 taskd
のドキュメントは、私が推測するトピックに関して少しあいまいでした。
ソケットは、特定の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にバインドする必要があります。