Chapter 21. Running dhclient exit hooks using NetworkManager a dispatcher script
Chapter 21. Running dhclient exit hooks using NetworkManager a dispatcher script You can use a NetworkManager dispatcher script to execute dhclient exit hooks. 21.1. The concept of NetworkManager dispatcher scripts The NetworkManager-dispatcher service executes user-provided scripts in alphabetical order when network events happen. These scripts are typically shell scripts, but can be any executable script or application. You can use dispatcher scripts, for example, to adjust network-related settings that you cannot manage with NetworkManager. You can store dispatcher scripts in the following directories: /etc/NetworkManager/dispatcher.d/ : The general location for dispatcher scripts the root user can edit. /usr/lib/NetworkManager/dispatcher.d/ : For pre-deployed immutable dispatcher scripts. For security reasons, the NetworkManager-dispatcher service executes scripts only if the following conditions met: The script is owned by the root user. The script is only readable and writable by root . The setuid bit is not set on the script. The NetworkManager-dispatcher service runs each script with two arguments: The interface name of the device the operation happened on. The action, such as up , when the interface has been activated. The Dispatcher scripts section in the NetworkManager(8) man page provides an overview of actions and environment variables you can use in scripts. The NetworkManager-dispatcher service runs one script at a time, but asynchronously from the main NetworkManager process. Note that, if a script is queued, the service will always run it, even if a later event makes it obsolete. However, the NetworkManager-dispatcher service runs scripts that are symbolic links referring to files in /etc/NetworkManager/dispatcher.d/no-wait.d/ immediately, without waiting for the termination of scripts, and in parallel. Additional resources NetworkManager(8) man page on your system 21.2. Creating a NetworkManager dispatcher script that runs dhclient exit hooks When a DHCP server assigns or updates an IPv4 address, NetworkManager can run a dispatcher script stored in the /etc/dhcp/dhclient-exit-hooks.d/ directory. This dispatcher script can then, for example, run dhclient exit hooks. Prerequisites The dhclient exit hooks are stored in the /etc/dhcp/dhclient-exit-hooks.d/ directory. Procedure Create the /etc/NetworkManager/dispatcher.d/12-dhclient-down file with the following content: #!/bin/bash # Run dhclient.exit-hooks.d scripts if [ -n "USDDHCP4_DHCP_LEASE_TIME" ] ; then if [ "USD2" = "dhcp4-change" ] || [ "USD2" = "up" ] ; then if [ -d /etc/dhcp/dhclient-exit-hooks.d ] ; then for f in /etc/dhcp/dhclient-exit-hooks.d/*.sh ; do if [ -x "USD{f}" ]; then . "USD{f}" fi done fi fi fi Set the root user as owner of the file: Set the permissions so that only the root user can execute it: Restore the SELinux context: Additional resources NetworkManager(8) man page on your system
#!/bin/bash Run dhclient.exit-hooks.d scripts if [ -n "USDDHCP4_DHCP_LEASE_TIME" ] ; then if [ "USD2" = "dhcp4-change" ] || [ "USD2" = "up" ] ; then if [ -d /etc/dhcp/dhclient-exit-hooks.d ] ; then for f in /etc/dhcp/dhclient-exit-hooks.d/*.sh ; do if [ -x "USD{f}" ]; then . "USD{f}" fi done fi fi fi chown root:root /etc/NetworkManager/dispatcher.d/12-dhclient-down chmod 0700 /etc/NetworkManager/dispatcher.d/12-dhclient-down restorecon /etc/NetworkManager/dispatcher.d/12-dhclient-down