Wer Podman auf einem System mit firewalld nutzt, dem ist möglicherweise aufgefallen, dass die Container nach einem firewalld-cmd --reload nicht mehr erreichbar sind. Abhilfe schafft in solch einem Falle ein manuelles Ausführen von podman network reload --all
Um dies zu automatisieren, kann ein systemd Service erstellt werden, welcher mithilfe von busctl monitor auf Änderungen in firewalld reagiert.
Dazu erstellt man eine entsprechende Servicedefinition:
vi /etc/systemd/system/podman-firewalld-reload.service
# /etc/systemd/system/podman-firewalld-reload.service
[Unit]
Description=Redo podman NAT rules after firewalld starts or reloads
Wants=dbus.service
After=dbus.service
[Service]
Type=simple
Environment=LC_CTYPE=C.utf8
ExecStart=/bin/bash -c 'busctl monitor --system --match type=signal,sender=org.freedesktop.DBus,path=/org/freedesktop/DBus,interface=org.freedesktop.DBus,member=NameAcquired,arg0=org.fedoraproject.FirewallD1 --match type=signal,path=/org/fedoraproject/FirewallD1,interface=org.fedoraproject.FirewallD1,member=Reloaded | while read line; do if [[ $line = ‣* ]]; then podman network reload --all; fi; echo "$line"; done'
[Install]
WantedBy=multi-user.target
Dieser kann nun wie folgt aktiviert und gestartet werden:
systemctl enable podman-firewalld-reload.service
systemctl start podman-firewalld-reload.service
Überprüfen lässt sich dies bei einer Standardkonfiguration mit dem folgenden Befehlen:
firewall-cmd --reload
firewall-cmd --zone trusted --list-all
Sofern bei der Ausgabe von firewalld unter sources weiterhin die IP-Adresse des Containers angegeben ist, sollte dieser auch nach einem Reload der Firewall weiterhin erreichbar sein.
Quelle: https://github.com/containers/podman/issues/5431
Danke für deinen Beitrag, ich habe das ExecStart leicht umbauen müssen, damit ich den Service installieren konnte: ExecStart=/bin/bash -c 'busctl monitor --system --match type=signal,sender=org.freedesktop.DBus,path=/org/freedesktop/DBus,interface=org.freedesktop.DBus,member=NameAcquired,arg0=org.fedoraproject.FirewallD1 --match type=signal,path=/org/fedoraproject/FirewallD1,interface=org.fedoraproject.FirewallD1,member=Reloaded | while read line; do if [[ $line = ‣* ]]; then podman network reload --all; fi; echo "$line"; done'
Die Quotes durch Single-Quotes ersetzt.
Hoi Horst, ich habe die Anleitung entsprechend angepasst. Unter EL8 funktioniert es allerdings auch mit double-quotes.
Danke!!