カーネルパラメータの設定方法(CentOS 8)
カーネルパラメータの設定箇所
世の中の記事では、net.ipv4.ip_forward
をはじめとしたカーネルパラメータは/etc/sysctl.conf
に記述するとあるが、ほかのファイルに分散されて書かれていることがある。
筆者の手元にある、CentOS 8では以下のように書かれていた。
[root@localhost ~]# cat /etc/sysctl.conf # sysctl settings are defined through files in # /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/. # # Vendors settings live in /usr/lib/sysctl.d/. # To override a whole file, create a new file with the same in # /etc/sysctl.d/ and put new settings there. To override # only specific settings, add a file with a lexically later # name in /etc/sysctl.d/ and put new settings there. # # For more information, see sysctl.conf(5) and sysctl.d(5).
To override a whole file, create a new file with the same in /etc/sysctl.d/ and put new settings there.
とあるので、/etc/sysctl.d
に自分がデフォルトから変えたいカーネルパラメータを記述したファイルを置くと思われる。
/etc/sysctl.d
を見てみる。99-sysctl.conf
というファイルのみが置かれているが、/etc/sysctl.conf
へのシンボリックリンクになっている。
[root@localhost ~]# ls -lhtra /etc/sysctl.d/99-sysctl.conf lrwxrwxrwx. 1 root root 14 Apr 23 2020 /etc/sysctl.d/99-sysctl.conf -> ../sysctl.conf
つまり、/etc/sysctl.conf
のファイルも含め、/etc/sysctl.d
配下に置かれたファイルがユーザ設定として上書きされる。
Vendors settings live in /usr/lib/sysctl.d/
とあるので、CentOSのディストリビューションに同梱されているアプリケーションの設定に関わるカーネルパラメータがここにあると想定される。
[root@localhost ~]# ls -lhtr /usr/lib/sysctl.d/ total 24K -rw-r--r--. 1 root root 246 May 11 2019 50-libkcapi-optmem_max.conf -rw-r--r--. 1 root root 636 Apr 23 2020 50-pid-max.conf -rw-r--r--. 1 root root 1.3K Apr 23 2020 50-default.conf -rw-r--r--. 1 root root 524 Apr 23 2020 50-coredump.conf -rw-r--r--. 1 root root 1.8K Apr 24 2020 10-default-yama-scope.conf -rw-r--r--. 1 root root 499 May 28 2020 60-libvirtd.conf
デフォルトでは/run/sysctl.d
は存在しなかった。
[root@localhost ~]# ls -lhtr /run/sysctl.d ls: cannot access '/run/sysctl.d': No such file or directory
設定例
試しにパケット転送を制御するカーネルパラメータであるnet.ipv4.ip_forward
を設定してみる。デフォルトではオフ(=0)になっている。なお、カーネルパラメータは<TUNABLE_CLASS>.<PARAMETER>=<TARGET_VALUE>
という形式になる。この例では<TUNABLE_CLASS>
はnet
とipv4
、<PARAMETER>
がip_forward
、<TARGET_VALUE>
が0か1、という具合である*1。
[root@localhost ~]# sysctl -a | grep net.ipv4.ip_forward net.ipv4.ip_forward = 0 net.ipv4.ip_forward_update_priority = 1 net.ipv4.ip_forward_use_pmtu = 0
/proc/sys/<TUNABLE_CLASS>/<PARAMETER>
にカーネルパラメータの<TARGET_VALUE>
のみが記載されたテキストファイルがあり*2、それでも確認可能*3。
[root@localhost ~]# cat /proc/sys/net/ipv4/ip_forward 0
設定ファイルを作成し*4、設定を反映する。
[root@localhost ~]# echo "net.ipv4.ip_forward = 1" > /etc/sysctl.d/net.ipv4.ip_forward.conf [root@localhost ~]# cat /etc/sysctl.d/net.ipv4.ip_forward.conf net.ipv4.ip_forward = 1 [root@localhost ~]# sysctl -p /etc/sysctl.d/net.ipv4.ip_forward.conf net.ipv4.ip_forward = 1
設定が反映されている。
[root@localhost ~]# sysctl -a | grep net.ipv4.ip_forward net.ipv4.ip_forward = 1 net.ipv4.ip_forward_update_priority = 1 net.ipv4.ip_forward_use_pmtu = 0 [root@localhost ~]# cat /proc/sys/net/ipv4/ip_forward 1
ちなみに、再起動後も反映されている。
[root@localhost ~]# reboot (略) localhost login: root Password: Last login: Fri Jan 15 19:49:21 on ttyS0 [root@localhost ~]# sysctl -a | grep net.ipv4.ip_forward net.ipv4.ip_forward = 1 net.ipv4.ip_forward_update_priority = 1 net.ipv4.ip_forward_use_pmtu = 0 [root@localhost ~]# cat /proc/sys/net/ipv4/ip_forward 1
参考にしたもの
第5章 ランタイム時のカーネルパラメーターの設定 Red Hat Enterprise Linux 8 | Red Hat Customer Portal