CentOS 5.7 でIPv6を無効化する

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になっているので、IPv6IPv4でポート番号が競合しているということだと思いますが、このサーバでは「/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

今まで「alias net-pf-10 off」と「alias ipv6 off」でIPv6を無効にしてきたので、CentOS 5.5 以前から 5.6 以降にアップデートした多くのサーバでIPv6が有効になっているっぽい・・・

*1:lsmodではipv6が現れますが・・・モジュールは読み込まれているが無効ということでしょうか?