Provided by: manpages-zh_1.6.3.3-2_all bug

NAME

       sysctl.d - 在启动时配置内核参数

SYNOPSIS

       /etc/sysctl.d/*.conf

       /run/sysctl.d/*.conf

       /usr/lib/sysctl.d/*.conf

描述

       在系统启动时, systemd-sysctl.service(8) 根据上面列出的配置文件设置 sysctl(8)[1]
       内核参数。

配置文件格式

       配置文件的格式是 一系列"KEY=VALUE"行(每行一对)。 空行以及以 "#" 或 ";"
       开头的行都将被忽略。

       注意,在KEY内部,可以使用 "/" 或 "."  作为分隔符。 如果第一个分隔符是 "/" ,
       那么其余的分隔符将保持原样; 如果第一个分隔符是 "."  ,那么互换所有的 "/" 与 "."  ;
       例如,"kernel.domainname=foo" 等价于 "kernel/domainname=foo" ,都会将 "foo" 写入
       /proc/sys/kernel/domainname 参数中。 同样的,"net.ipv4.conf.enp3s0/200.forwarding" 等价于
       "net/ipv4/conf/enp3s0.200/forwarding" , 都是指
       /proc/sys/net/ipv4/conf/enp3s0.200/forwarding 参数。

       sysctl.d/ 中的设置将在系统启动的早期被应用。 针对网络接口的配置,
       则会在对应的网络接口出现的时候被应用, 具体说来就是 net.ipv4.conf.*, net.ipv6.conf.*,
       net.ipv4.neigh.*, net.ipv6.neigh.*  参数。

       许多 sysctl 参数仅在加载相应的内核模块之后才可用。 因为内核模块是按需动态加载的
       (例如在插入新硬件或启动网络时), 所以在系统启动早期运行的 systemd-sysctl.service(8)
       无法设置那些依赖于特定内核模块的参数。 对于这些参数, 首选的方法是通过 udev(7)
       规则来设置, 次选的方法是将这些模块添加到 modules-load.d(5) 中, 因为 modules-load.d(5)
       中的模块会在运行 systemd-sysctl.service(8) 前被无条件的静态加载(参见"例子"小节)。

配置目录及其优先级

       配置文件依次从 /etc/, /run/, /usr/lib/ 目录中读取。 配置文件的名称必须符合 filename.conf
       格式。 对于不同目录下的同名配置文件,仅以优先级最高的目录中的那一个为准。 具体说来就是:
       /etc/ 的优先级最高、 /run/ 的优先级居中、 /usr/lib/ 的优先级最低。

       软件包应该将自带的配置文件安装在 /usr/lib/ 目录中。 /etc/ 目录仅供系统管理员使用。
       所有的配置文件(无论位于哪个目录中),统一按照文件名的字典顺序处理。
       如果在多个配置文件中设置了同一个选项, 那么仅以文件名最靠后(字典顺序)的那一个为准。
       为了便于排序,建议给所有配置文件 都加上两位十进制数字的文件名前缀。

       如果系统管理员想要屏蔽 /usr/lib/ 目录中的某个配置文件, 那么最佳做法是在 /etc/ 目录中
       创建一个指向 /dev/null 的同名符号链接, 即可彻底屏蔽 /usr/lib/ 目录中的同名文件。
       如果软件包自带的某个配置文件位于 initrd 镜像中, 那么还必须重新生成 initrd 镜像。

例子

       Example 1. 设置内核YP域名

       /etc/sysctl.d/domain-name.conf:

           kernel.domainname=example.com

       Example 2. 利用udev规则设置动态内核模块的参数(方法一)

       /etc/udev/rules.d/99-bridge.rules:

           ACTION=="add", SUBSYSTEM=="module", KERNEL=="br_netfilter", \
                 RUN+="/usr/lib/systemd/systemd-sysctl --prefix=/net/bridge"

       /etc/sysctl.d/bridge.conf:

           net.bridge.bridge-nf-call-ip6tables = 0
           net.bridge.bridge-nf-call-iptables = 0
           net.bridge.bridge-nf-call-arptables = 0

       因为此方法在加载模块的同时设置模块的参数, 所以仅在加载 br_netfilter
       模块之后才能过滤桥接包, 若不想过滤桥接包, 只要不加载 br_netfilter 模块即可。

       Example 3. 利用 modules-load.d 目录设置动态内核模块的参数(方法二)

       /etc/modules-load.d/bridge.conf:

           br_netfilter

       /etc/sysctl.d/bridge.conf:

           net.bridge.bridge-nf-call-ip6tables = 0
           net.bridge.bridge-nf-call-iptables = 0
           net.bridge.bridge-nf-call-arptables = 0

       因为此方法总是无条件的加载 br_netfilter 模块, 并且总是无条件的设置模块的参数,
       所以总是无条件的过滤桥接包,若不想过滤桥接包, 必须主动卸载 br_netfilter 模块。

参见

       systemd(1), systemd-sysctl.service(8), systemd-delta(1), sysctl(8)[1], sysctl.conf(5),
       modprobe(8)

NOTES

        1. sysctl(8)
           [set $man.base.url.for.relative.links]//man/sysctl.html

       本页面中文版由中文 man 手册页计划提供。

       翻译人员:金步国
       金步国作品集:http://www.jinbuguo.com
       中文 man 手册页计划:https://github.com/man-pages-zh/manpages-zh