diff --git a/defaults/main.yml b/defaults/main.yml
index 9f04f6a25ba1bc9a78499df45a1250087e8f33be..93fe5450660552c49b5ba85804f828e7c98386fc 100644
--- a/defaults/main.yml
+++ b/defaults/main.yml
@@ -1,2 +1,4 @@
 ---
 # defaults file for dhcp
+
+dhcp_mail_alias: root
diff --git a/handlers/main.yml b/handlers/main.yml
index db2863518a3eb913453baace6f99c632607da2da..52b3170dd594c48a55e0dd6e619607cca67bd42a 100644
--- a/handlers/main.yml
+++ b/handlers/main.yml
@@ -1,2 +1,11 @@
 ---
 # handlers file for dhcp
+
+- name: Update SMTPd database
+  when: ansible_os_family == 'OpenBSD'
+  command: /usr/bin/newaliases
+
+- name: Restart ISC DHCP server
+  service:
+      name: '{{ dhcp_service[ansible_os_family] }}'
+      state: restarted
diff --git a/tasks/main.yml b/tasks/main.yml
index bf4282fce832a0becaa2976d17fef620cc7fc3cf..0ca5564ef8830e566f822f91598169c5ed76703e 100644
--- a/tasks/main.yml
+++ b/tasks/main.yml
@@ -4,5 +4,35 @@
 - name: Assertions
   assert:
     that:
-        - ansible_os_family in ['OpenBSD', 'Debian']
-        - ansible_distribution_release in ['6.0', 'xenial']
+        - ansible_os_family in dhcp_service
+        - ansible_os_family in dhcp_user
+        - ansible_os_family in aliases_file
+
+- name: APT install
+  apt:
+      name: isc-dhcp-server
+      state: present
+      update_cache: yes
+      cache_valid_time: 3600
+
+- name: Add mail alias
+  when: dhcp_mail_alias is defined
+  lineinfile:
+      dest: '{{ aliases_file[ansible_os_family] }}'
+      create: yes
+      line: '{{ dhcp_user[ansible_os_family] }}: {{ dhcp_mail_alias }}'
+      regexp: '{{ dhcp_user[ansible_os_family] }}:'
+  notify:
+      - Update SMTPd database
+
+- name: Enable service
+  service:
+      name: '{{ dhcp_service[ansible_os_family] }}'
+      state: running
+      enabled: yes
+
+- meta: flush_handlers
+
+- name: Wait for service to come online
+  wait_for:
+      port: 67
diff --git a/tests/test_dhcp.py b/tests/test_dhcp.py
new file mode 100644
index 0000000000000000000000000000000000000000..f898616cbc14f489994ae85faeb716f8edd95b96
--- /dev/null
+++ b/tests/test_dhcp.py
@@ -0,0 +1,16 @@
+from testinfra.utils.ansible_runner import AnsibleRunner
+
+testinfra_hosts = AnsibleRunner('.molecule/ansible_inventory').get_hosts('all')
+
+
+def test_dhcp_service(Service, Socket, SystemInfo):
+    if SystemInfo.type == 'openbsd':
+        service = Service('dhcpd')
+    elif SystemInfo.type == 'debian':
+        service = Service('isc-dhcp-server')
+    assert service.is_running
+    try:
+        assert service.is_enabled
+    except NotImplementedError:
+        pass
+    assert Socket('tcp://0.0.0.0:80').is_listening
diff --git a/vars/main.yml b/vars/main.yml
index 2fb59b1189ef5ad9ce80ae0a8f029187d2c35baa..81f8915ab2c786e91fcafdaacf81207f7207bf74 100644
--- a/vars/main.yml
+++ b/vars/main.yml
@@ -1,2 +1,14 @@
 ---
 # vars file for dhcp
+
+dhcp_service:
+    OpenBSD: dhcpd
+    Debian: isc-dhcp-server
+
+aliases_file:
+    OpenBSD: /etc/mail/aliases
+    Debian: /etc/aliases
+
+dhcp_user:
+    OpenBSD: _dhcp
+    Debian: dhcp