diff --git a/elements/dhcp-all-interfaces/install.d/50-dhcp-all-interfaces b/elements/dhcp-all-interfaces/install.d/50-dhcp-all-interfaces
index 06098735a..32f6f4be3 100755
--- a/elements/dhcp-all-interfaces/install.d/50-dhcp-all-interfaces
+++ b/elements/dhcp-all-interfaces/install.d/50-dhcp-all-interfaces
@@ -9,5 +9,6 @@ DIB_INIT_SYSTEM=$(dib-init-system)
 if [ "$DIB_INIT_SYSTEM" == "upstart" ]; then
     install -D -g root -o root -m 0755 ${SCRIPTDIR}/dhcp-all-interfaces.conf /etc/init/dhcp-all-interfaces.conf
 elif [ "$DIB_INIT_SYSTEM" == "systemd" ]; then
+    install -D -g root -o root -m 0755 ${SCRIPTDIR}/dhcp-interface@.service /usr/lib/systemd/system/dhcp-interface@.service
     install -D -g root -o root -m 0644 ${SCRIPTDIR}/udev.rules /etc/udev/rules.d/99-dhcp-all-interfaces.rules
 fi
diff --git a/elements/dhcp-all-interfaces/install.d/dhcp-interface@.service b/elements/dhcp-all-interfaces/install.d/dhcp-interface@.service
new file mode 100644
index 000000000..e2643c85f
--- /dev/null
+++ b/elements/dhcp-all-interfaces/install.d/dhcp-interface@.service
@@ -0,0 +1,15 @@
+[Unit]
+Description=DHCP interface %I
+After=network.service network.target
+
+ConditionPathExists=!/etc/sysconfig/network-scripts/ifcfg-%I
+
+[Service]
+Type=oneshot
+User=root
+ExecStartPre=/usr/local/sbin/dhcp-all-interfaces.sh %I
+ExecStart=/sbin/ifup %I
+RemainAfterExit=true
+
+[Install]
+WantedBy=multi-user.target
diff --git a/elements/dhcp-all-interfaces/install.d/udev.rules b/elements/dhcp-all-interfaces/install.d/udev.rules
index 88ce3e13b..302f41bae 100644
--- a/elements/dhcp-all-interfaces/install.d/udev.rules
+++ b/elements/dhcp-all-interfaces/install.d/udev.rules
@@ -1 +1 @@
-SUBSYSTEM=="net", ACTION=="add", RUN+="/usr/local/sbin/dhcp-all-interfaces.sh $name", RUN+="/sbin/ifup $name"
+SUBSYSTEM=="net", ACTION=="add", TAG+="systemd", ENV{SYSTEMD_WANTS}+="dhcp-interface@$name.service"