diff --git a/plays/dns.yml b/plays/dns.yml
index 7f133c1ad6a0eaf49c1b89b60877f229bbd7896e..aa9b0a567eb787361cac784d4feb9c6d93ebc4ef 100755
--- a/plays/dns.yml
+++ b/plays/dns.yml
@@ -15,3 +15,12 @@
       zones: "{{ lookup('re2oapi', 'dnszones') }}"
       reverse: "{{ lookup('re2oapi', 'dnsreverse') }}"
   roles: ["bind-authoritative"]
+
+- hosts: silice.adm.crans.org
+  vars:
+    re2o:
+      server: re2o.adm.crans.org
+      service_user: "{{ vault_re2o_service_user }}"
+      service_password: "{{ vault_re2o_service_password }}"
+  roles:
+    - dns
diff --git a/roles/dns/tasks/main.yml b/roles/dns/tasks/main.yml
new file mode 100644
index 0000000000000000000000000000000000000000..1c1e16d892d0c3761b329cc0a0394618054c47e2
--- /dev/null
+++ b/roles/dns/tasks/main.yml
@@ -0,0 +1,52 @@
+---
+- name: Create dns directory
+  file:
+    path: /var/local/dns
+    state: directory
+    mode: '2775'
+    owner: root
+    group: nounou
+
+- name: Set ACL for dns directory
+  acl:
+    path: /var/local/dns
+    default: true
+    entity: nounou
+    etype: group
+    permissions: rwx
+    state: query
+
+- name: Clone dns repository
+  git:
+    repo: 'http://gitlab.adm.crans.org/nounous/dns.git'
+    dest: /var/local/dns
+    umask: '002'
+
+- name: Deploy re2o config
+  template:
+    src: dns/re2o-config.ini.j2
+    dest: /var/local/dns/re2o-config.ini
+    mode: 0600
+    owner: root
+    group: root
+
+- name: Create generated directory
+  file:
+    path: /var/cache/bind/generated
+    state: directory
+    mode: 0655
+    owner: bind
+    group: bind
+
+- name: Create symbolic link to generated
+  file:
+    src: /var/cache/bind/generated
+    dest: /var/local/dns/generated
+    owner: root
+    group: root
+    state: link
+
+- name: Deploy cron for dns
+  template:
+    src: cron.d/dns.j2
+    dest: /etc/cron.d/dns
diff --git a/roles/dns/templates/cron.d/firewall.j2 b/roles/dns/templates/cron.d/firewall.j2
new file mode 100644
index 0000000000000000000000000000000000000000..1fe89fad4c6855cc288f71eecf6fbbcba1b69b79
--- /dev/null
+++ b/roles/dns/templates/cron.d/firewall.j2
@@ -0,0 +1,2 @@
+{{ ansible_header | comment }}
+*/2 * * * * root /usr/bin/python3 /var/local/dns/dns.py -q
diff --git a/roles/dns/templates/firewall/re2o-config.ini.j2 b/roles/dns/templates/firewall/re2o-config.ini.j2
new file mode 100644
index 0000000000000000000000000000000000000000..7bf9a4cae5e742ebd9dfe48d8a343bf836b791a9
--- /dev/null
+++ b/roles/dns/templates/firewall/re2o-config.ini.j2
@@ -0,0 +1,5 @@
+{{ ansible_header | comment(decoration='; ') }}
+[Re2o]
+hostname = {{ re2o.server }}
+username = {{ re2o.service_userĂ‚ }}
+password = {{ re2o.service_password }}