💨
【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