sshdの起動時に「/var/log/secure」に以下のようなログが記録されていました。
sshd[30843]: error: Bind to port 22 on 0.0.0.0 failed: Address already in use.
いかにも22番ポートが競合している風なメッセージなので「lsof -i:22」を試してみるも・・・
sshd 30843 root 3u IPv6 48986958 TCP *:ssh (LISTEN) sshd 30865 root 3u IPv6 48987078 TCP 192.168.1.123:ssh->192.168.2.123:55099 (ESTABLISHED)
特に何かと競合しているようでも無いし、そもそもsshで接続できている。
「/var/log/secure」の↑のエラーの直前をよく見てみると・・・
sshd[30843]: Server listening on :: port 22. sshd[30843]: error: Bind to port 22 on 0.0.0.0 failed: Address already in use.
のようにIPv6でリッスンしているメッセージがあり、かつ、lsofの出力もIPv6になっているので、IPv6とIPv4でポート番号が競合しているということだと思いますが、このサーバでは「/etc/modprobe.conf」に下記の通り追記してIPv6は無効にしていたはずでした。
alias net-pf-10 off alias ipv6 off
が、ifconfigやらlsmodやらで改めて確認してみるとIPv6が有効になっている・・・
ここ(CentOS 5.5 IPV6を無効化 - おじさんの備忘録-番外編-)の情報を参考に、「/etc/modprobe.conf」に「options ipv6 disable=1」を追加して再起動してみました。
alias net-pf-10 off alias ipv6 off options ipv6 disable=1
すると・・・ifconfigではIPv6が無効になりました*1。
ここ(CentOS 5.x/6.x で IPv6 を無効化)の記事によると、CentOS 5.6 以降は「options ipv6 disable=1」にしないとダメなようです。「/etc/redhat-release」を見てみると、CentOS 5.7 だったのでそのせいのような気はしますが、同じ CentOS 5.7 でも「alias 〜 off」だけで IPv6 を無効にできているサーバもありました。
とりあえず・・・CentOS 5.x でIPv6を無効にするには以下のようにしておくのがよさそうです。
/etc/sysconfig/network に下記を追記(ipv6を無効にするようにセットアップ時に指定していれば最初からあると思いますが)
NETWORKING_IPV6=no
/etc/modprobe.d/ipv6-disable.conf を下記の内容で作成(aliasは無くてもいいのかもしれませんが)
alias net-pf-10 off alias ipv6 off options ipv6 disable=1