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.conf
のonly_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
は使わない
以上.