💨

【Linux】カーネルパラメータ管理(/proc/sys と sysctl.d)

に公開

はじめに

Linux でパケット転送(フォワーディング)の設定が必要になったので、調べた内容をまとめる。

通常、Linux は自身宛てのパケットしか処理しない。しかし、フォワーディングを有効化することで、受け取ったパケットを別のネットワーク(システム)へ転送できるようになる。
今回はその際によく登場する/proc/sysを使った動的設定 と、永続化のためのsysctl.dについて整理する。

/proc とは

まずは/procとは何かを整理しておく。

  • カーネルやプロセス情報を参照・制御するための「仮想ファイル」を格納するディレクトリ
  • /proc以下はストレージ上に保存される実ファイルではなく、メモリ上の仮想ファイル(procfs)
  • 値を表示するときはcatで確認できるが、viなどで直接編集するのは推奨されない
  • 名称の由来は “process filesystem” であり、プロセスやシステム情報に「ファイル」という一貫したインターフェースを提供する仕組み

/proc/sys とは

/proc/sysは カーネルパラメータを動的に変更するためのディレクトリ。

  • 各ファイルは特定のカーネル設定を表しており、数値や文字列を書き込むことで設定を変更できる
  • 設定変更は即時反映されるが、再起動すると元に戻る(永続化されない)

例)IPv4 パケットフォワーディングを一時的に有効化する

# 一時的に有効化(再起動リセットされる)
echo 1 > /proc/sys/net/ipv4/ip_forward

設定の変更方法

再起動後も設定を維持したい場合は、sysctlの仕組みを利用する。

/etc/sysctl.d/

/etc/sysctl.dに設定ファイルを作成

  • 手動で.confファイルを作成
  • 拡張子は.confにする
  • ファイル名の先頭に数字を付けると、読み込み順を制御できる
  • /etc/sysctl.confに直接記述することも可能だが、これは従来の方法であり現在は互換目的で残されている

例)パケットフォワーディングを永続化する場合

echo "net.ipv4.ip_forward = 1" | sudo tee /etc/sysctl.d/99-custom.conf

これで再起動時に99-custom.confが読み込まれ、パケットフォワーディングが有効化される。

設定の即時反映

再起動せずに設定を反映させたい場合はsysctlコマンドを使う。

# /etc/sysctl.conf および sysctl.d 内の設定を全て読み込む
sudo sysctl --system

# 特定のファイルのみ反映させる場合
sudo sysctl -p /etc/sysctl.d/99-custom.conf

補足
--systemオプションは以下の順で設定を読み込む:
/run/sysctl.d//etc/sysctl.d//usr/local/lib/sysctl.d//usr/lib/sysctl.d//lib/sysctl.d//etc/sysctl.conf

設定内容の確認

設定が反映されているか確認するには以下を実行する。

sysctl net.ipv4.ip_forward

出力例:

net.ipv4.ip_forward = 1

Discussion