sysctl

Vorzugsweise für das Linux Kernel-Tuning verwendet.

„all“ vs „default“ in sysctl-Parametern

Was ist der Unterschied zwischen „all“, „default“ oder Geräte-spezifischen Settings in sysctl? Beispiel:

net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.conf.enp1s0.accept_source_route = 1

„all“ ändert die Einstellung für alle existierenden Geräte, egal welche Einstellung die Geräte selbst besitzen - ausser die Geräteeinstellung ist grösser als der „all“-Wert.

„default“ ist die Standardeinstellung für neu hinzugefügte, spezifische Geräte.

Die im Beispiel angeführte Einstellung für „enp1s0“ gilt nur für das Gerät. Damit ergibt sich:

  • enp1s0: accept_source_route = 1

  • eth0: accept_source_route = 0

Achtung

RHEL 7+ kann abhängig von der Hardware bereits NIC-Treiber laden, bevor die sysctl-Defaults zur Anwendung kommen. Um sicherzugehen, dass die sysctl-Einstellungen gelten, sollte man wie auf https://access.redhat.com/solutions/8694 beschrieben ein /sbin/ifup-local verwenden, welches die Einstellungen für das Interface lädt. Beispiel für solch ein Script:

#!/bin/bash

sysctl net.ipv4.conf.$1.rp_filter=2

Falls der NetworkManager zum Einsatz kommt, muss stattdessen ein NetworkManager Dispatcher Script erstellt werden, das vom NetworkManager ausgeführt wird, sobald der Link-State auf up oder down wechselt - abzulegen im Beispiel unter /etc/NetworkManager/dispatcher.d/30-rp_filter

Settings, die sofort aktiv werden

Settings, die ohne Reboot geändert werden können.

# Usage example: set_kparm vm.swapiness 10
set_kparm () {
    echo "Previous value: $(sysctl $1)"
    echo "$1 = $2" >> /etc/sysctl.conf
    sysctl -p > /dev/null
    echo "Current value: $(sysctl $1)"
}

Swapiness auf „10“ setzen (RHEL swappt erst, wenn nur noch 10% RAM oder weniger frei sind):

set_kparm vm.swappiness 10

Settings, die erst nach einem Reboot aktiv werden

qdisc ändern:

# view the current config
sysctl net.core.default_qdisc
# Default RHEL 7: pfifo_fast
# Default RHEL 8: fq_codel

# view the current config
yum -y install iproute-tc
tc -s qdisc show dev eth0
# qdisc fq_codel 0: ...

# update the existing qdisc
set_kparm net.core.default_qdisc pfifo_fast

# reboot necessary
reboot

Built on 2022-06-03