sysctl変更が反映されない原因と確認ポイント【Linux】

  • URLをコピーしました!

Linux で sysctl を変更したのに、

  • 値が変わっていない
  • 再起動すると元に戻る
  • 設定したはずなのに挙動が変わらない

といった経験は非常によくあります。

これは sysctl の仕様というより、

「反映されない典型パターン」を踏んでいるだけ

というケースがほとんどです。

本記事では、

  • sysctl変更が反映されない代表的な原因
  • 確認すべき順番
  • 正しい直し方

を、実務でそのまま使える形で整理します。

目次

まず確認:一時変更か永続変更か

一時変更(即時反映・再起動で消える)

sysctl -w net.ipv4.ip_forward=1

この方法は 再起動すると必ず元に戻ります

「反映されていない」と感じる原因の多くは、

再起動後に確認している

ことです。

原因1:/etc/sysctl.conf が読み込まれていない

永続化の定番である /etc/sysctl.conf ですが、

  • 記述ミス
  • コメントアウト
  • そもそも読み込まれていない

というケースがあります。

確認コマンド

sysctl -p

エラーが出る場合、その設定は反映されません。

原因2:/etc/sysctl.d/ で上書きされている

最近のディストリビューションでは、

/etc/sysctl.d/*.conf

が優先的に読み込まれます。

そのため、

  • /etc/sysctl.conf で設定した
  • しかし別ファイルで上書きされている

という状況が頻発します。

確認方法

grep -R "net.ipv4.ip_forward" /etc/sysctl*

同じパラメータが複数定義されていないかを確認します。

原因3:systemd-sysctl による再適用

systemd 環境では、起動時に

systemd-sysctl

が sysctl を再設定します。

そのため、

  • 手動で変更した
  • しばらくすると元に戻る

という現象が起きます。

確認方法

systemctl status systemd-sysctl

原因4:そもそもカーネルが対応していない

カーネルバージョンや設定によっては、

  • 存在しないパラメータ
  • 無効化されているパラメータ

があります。

確認方法

sysctl -a | grep パラメータ名

出てこない場合、そのパラメータは使用できません。

原因5:設定値が即座に元に戻されている

以下のようなケースです。

  • クラウド初期化スクリプト
  • 構成管理ツール(Ansible / Chef など)
  • 起動時スクリプト

自動設定が優先される環境では、手動変更は無効化されます。

正しい確認手順(実務テンプレ)

  1. 現在値を確認
  2. 一時変更で反映確認
  3. sysctl -p のエラー確認
  4. /etc/sysctl.d の上書き確認
  5. 再起動後の値を確認

「反映された」と判断する基準

  • sysctl コマンドで値が一致している
  • 再起動後も値が維持されている
  • 関連する挙動が変わっている

よくあるNG対応

  • 設定だけして確認しない
  • grep せずに1箇所しか見ない
  • 自動化を疑わない

まとめ

  • sysctlは「どこで」「いつ」適用されるかが重要
  • 反映されない原因はほぼパターン化されている
  • 確認順を守れば迷わない

sysctl が反映されないときは、

設定値ではなく「適用経路」を疑う

これが最短解決ルートです。

目次