Sysctl Einträge dauerhaft machen

ich habe seit einem Upgrade das Problem, dass aus virtuellen Maschinen unter KVM die DNS Namensauflösung nicht mehr funktioniert. Ich kann aus den virtuellen Maschinen über die IP Adresse auf das Internet zugreifen nicht aber über den Hostnamen. ping 8.8.8.8 funktioniert, ping google.com nicht.

Ich habe im Internet eine Lösung gefunden. Ich muss per sysctl drei Kernelparameter setzen.

meine Datei ~peter/sysctl.conf

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

Als root das sysctl file aktivieren

sudo sysctl -p ~peter/sysctl.conf

danach funktioniert die Namensauflösung aus den virtuellen Maschinen.

Allerdings ist es so, dass ich das nun nach jedem Einloggen machen muss. Nach einem Neustart hat Linux die Werte der drei Kernelparameter wieder vergessen. Wie kann ich das dauerhaft machen ? Wie kann ich nach dem Systemstart ein Kommando als root automatisch ausführen ?

geht folgendes Kommando im Autostart per skript gestartet ?

sudo sysctl -p ~peter/sysctl.conf

Nun per Skript geht das im Prinzip schon. Aber es geht zum Beispiel auch einfach so

> sudo cp ~peter/sysctl.conf /etc/sysctl.d/99-kvm-dns.conf

Siehe dazu am besten
man sysctl.conf

hallo,

danke für den Hinweis. Ich habe eine Datei 99-kvm-dns.conf mit diesen Inhalten in /etc/sysctl.d/ abgelegt

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

aber es funktioniert nicht. Der Dienst boot-sysctl liest auch nicht aus diesem Verzeichnis sondern aus /boot
Dort wird eine Datei sysctl.conf-5.14.21-15400… eingelesen.

im log vom systemd-sysctl kann ich auch nichts entdecken

Kommando zurück

im log von systemd-sysctl finde ich folgendes

Couldn’t write ‘0’ to ‘net/bridge/bridge-nf-call-ip6tables’, ignoring: No such file or directory
Couldn’t write ‘0’ to ‘net/bridge/bridge-nf-call-iptables’, ignoring: No such file or directory
Couldn’t write ‘0’ to ‘net/bridge/bridge-nf-call-arptables’, ignoring: No such file or directory

Ich habe in der Datei aber Punkte und keinen /

Ich vermute mal da wird das Kernel Module bridge nicht (oder noch nicht )geladen sein wenn der systemd Dienst versucht die Parameter zu setzen. Auf meinem Test System funktioniert es aber da wird bridge auch geladen (aber vermutlich eher zufällig zum richtigen Zeitpunkt)

Sorry das relevante Kernel Module ist br_netfilter das dann bridge benutzt.

Meine ursprüngliche Antwort war wohl leider etwas zu einfach gedacht. Wenn man zusätzlich in /etc/dracut.conf.d eine Datei 99-kvm-dns.conf mit folgendem Inhalt anlegt

linux:/etc/dracut.conf.d # cat 99-kvm-dns.conf 

force_drivers+=" br_netfilter "

und dann die initramfs per dracut neu generiert sollte es funktionieren. Info zu initramfs siehe hier
https://doc.opensuse.org/documentation/leap/reference/html/book-reference/cha-boot.html#pro-generate-initramfs.

wie sieht der dracut Befehl aus, um initramfs neu zu erzeugen ?
Habe noch nie mitr dracut gearbeitet ?Ich sehe dracut immer erst am Ende eines updates am Bildschirm durchlaufen

dracut OPTIONS image kernel-version

???

Ich habe mir das Kapitel Generate an initramfs angesehen, traue mich aber nicht

Ich benutze dracut eigentlich auch nur in Ausnahmefällen und wenn ich so nachdenke es geht auch ohne dracut und neue initramfs. Lösche die Datei /etc/dracut.conf.d/99-kvm-dns.conf wieder falls vorhanden. Dann dies hier ausführen:

> cd /etc/modules-load.d/
> sudo bash -c "echo 'br_netfilter' > kvm-dns.conf

Damit wird das br_netfilter module beim Systemstart auf einer Test VM bei mir auch ohne modifizierte initramfs geladen und die net.bridge* Parameter gesetzt.

Ja, das klappt nun. Habe eine Datei im etc Verzeichnis

peter@linux-Z840:/etc/modules-load.d> ls
kvm-dns.conf
peter@linux-Z840:/etc/modules-load.d>
peter@linux-Z840:/etc/modules-load.d> cat kvm-dns.conf
br_netfilter
peter@linux-Z840:/etc/modules-load.d> 

nun keine Fehlermeldungen im log von Dienst "systemd-sysctl"

Modulk br_netfilter wurde wohl gefunden. Danke wieder was gelernt