拾い物のコンパス

まともに書いたメモ

xinetdが動作しないときの対処

概要

xinetdでサービスを動かしたら接続は上手くいくが、プログラムからの出力が返ってこなかった。この時に試したことを書き残す。
最終的にはxinetdの公式レポジトリからソースを引っ張ってきてインストールしたら正常に動作した。
他にはonly_fromの記述に注意すれば上手く行くことがわかった.
尚、この現象は32ビット版でのみ起こった. 64ビット版では今回の問題は起こらなかった.

環境

Ubuntu 14.04 LTS 32bit Arch Linux 64bit

設定ファイル

# xinetd.conf
service unlisted
{
    type        = UNLISTED
    socket_type = stream
    protocol    = tcp
    wait        = no
    only_from   = localhost 192.168.0.0/16
    port        = 20020
    server      = /bin/echo
    server_args = hogehogehogehoge                                
}

サーバを立てた状態で $ nc localhost 20020 を実行すれば hogehogehogehoge と表示される。

実行コマンド

$ sudo xinetd -f xinetd.conf -d

試したこと

  • 再インストール
    apt-get remove xinetd && apt-get install xinetd
  • デーモンのリスタート
    $ service xinetd restart
  • 再起動
    $ reboot
  • アップデート・アップグレード
    $ apt-get update; apt-get upgrade どれも効果なし。

対処

その1

ソースを取ってきてインストールする。

$ git clone https://github.com/xinetd-org/xinetd.git
$ cd xinetd
$ ./configure
$ make
$ make install

/usr/local/sbin/にインストールされる。
これでちゃんと動いた。

その2

$ ip address show
で自分のIPを調べる.xintd.confonly_fromで接続を192.168.0.0/24に制限しているから,自分のIPが外れていたら適宜修正すること.
$ nc <your_IP> 20020

その3

以下を編集する.

[-] only_from   = localhost 192.168.0.0/16
[+] only_from   = 127.0.0.1 192.168.0.0/16

only_fromの記述にlocalhostは使わないほうがいいようだ.
これならば nc localhost/127.0.0.1/192.168.?.? 20020 どのIPでも上手く行った.
ちなみに,xnetd実行時にsudoを忘れるとどのIPでも出力が返ってこなかった.

まとめ

  • xinetd実行時にはsudoをつけよう
  • xinetd.confファイルのonly_fromではlocalhostは使わない

以上.