Linuxネットワークをデバッグする方法:アドレスはすでに使用されています


10

Slackwareのlinuxボックスがあり、localhostの特定のポートでリッスンするサービスを開始できません。straceを使用するbind()と、呼び出しでエラーが発生することがわかりました。エラーはEADDRINUSE (Address already in use)次のとおりです。

bind(3, {sa_family=AF_INET, sin_port=htons(874), sin_addr=inet_addr("127.0.0.1")}, 16) = -1 EADDRINUSE (Address already in use)

これは、そのポートでリッスンを開始しようとするプロセスで発生するため、プロセス自体とは関係ありません。上記のstrace出力は、コマンドから取得されますstrace -ff nc -l -p 874 -s 127.0.0.1

したがって、これはlocalhostポート874ですでにリッスンしているプロセスがあることを示唆しています。しかし、それを見つけることができないようです。次のコマンドはすべて何も返しません。

netstat -aplunt | grep :874
netstat -na | grep :874
lsof -i :874
lsof -i tcp | grep 874
fuser 874/tcp
socklist | grep 874
iptables -t filter -S | grep 874
iptables -t nat -S | grep 874
iptables -t mangle -S | grep 874
conntrack -L | grep 874

私がリッスンしようとする0.0.0.0:874と、同じエラーで失敗します。nicで構成されたIPアドレスの1つでリッスンする127.0.0.2:874ことは問題なく動作し、リッスンすることも問題なく動作します。別のポートでリッスンしても、127.0.0.1またはで正常に動作し0.0.0.0ます。

それで、今、私は興味があります。ネットワークスタックがここでEADDRINUSEを返す理由を確認するにはどうすればよいですか?他に何を見ることができますか、または他のどのコマンドを実行して詳細情報を取得できますか?

追加情報:

  • カーネル4.1.31。
  • ここではSelinuxは使用されません。
  • Telnetで127.0.0.1に接続しようとすると、「接続が拒否されました」が返される
  • rootとしてコマンドを実行しています

1
iptables -S出力のどこかにポートが記載されていますか?
hertitu 2016年

1
strace -ff nc -l 874の出力も印刷してください。使用したのは、874をソースポートとして接続しようとしているものです。ありがとう!
Anirudh Malhotra

2
AFAIK Linuxは、1000未満のポートをリッスンするときにroot権限を必要とします。多分それがここでの問題です。
Koraktor 2016年

2
このホストはNFSクライアントですか?NFSマウントにソースポート874を使用している可能性があります。とにかく私はnetstat -na | grep 874あなたの現在のnetstatフラグがあまりにも制限的である場合に備えて試みます。
トム・ショー

1
@TomShawあなたは私の一日を作ったよ!それはだったNFSすべての権利。これが正確にどのように行われたのかはわかりませんが、すべてのNFSマウントをマウント解除してRPCおよびNFSサービスを再起動すると、問題はなくなります。tcpdumpを使用して、ポート874からポート111へのトラフィックもいくつか確認しました(なぜそれを以前考えなかったのですか)。これを回答として投稿できますか?
roelvanmeer

回答:


4

ホストがNFSクライアントの場合、NFSマウントにソースポート874を使用している可能性があります。接続はユーザー空間からのものではないため、これまでに使用したツールには表示されない可能性があると思います。

次のいずれかを検討してください。

  • sysctls sunrpc.min_resvportおよびsunrpc.max_resvport(デフォルトは665および1023)を調整して、NFSクライアントが使用するソースポートの範囲を変更します。
  • この範囲外のリスニングポートを使用してください
  • 使用するnoresvport(セキュリティ上の問題を有していてもよい)非特権の範囲を使用するNFSマウントのオプションを
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.