diff --git a/base.yml b/base.yml
index d9d47d1c81179f9543c84a87c5b898d4d111127c..4c665e830e7e93d2e9b1d6046f8afed96ab4d4b7 100644
--- a/base.yml
+++ b/base.yml
@@ -10,10 +10,18 @@
 
     # Backup password
     backuppc_rsyncd_passwd: "{{ vault_backuppc_rsyncd_passwd }}"
+
+    # NTP servers
+    # TODO get this list with re2o
+    ntp_servers:
+      - fy.adm.crans.org
+      - charybde.adm.crans.org
+      - silice.adm.crans.org
   roles:
     - debian-apt-sources
     - common-tools
     - rsync-client
+    - ntp-client
 
 # Plug LDAP on all servers
 - hosts: all
diff --git a/roles/ntp-client/tasks/main.yml b/roles/ntp-client/tasks/main.yml
new file mode 100644
index 0000000000000000000000000000000000000000..c968990b8f52e220fd8d711d24cdf352d88ba885
--- /dev/null
+++ b/roles/ntp-client/tasks/main.yml
@@ -0,0 +1,26 @@
+---
+- name: Install NTP
+  apt:
+    update_cache: true
+    name: ntp
+  register: apt_result
+  retries: 3
+  until: apt_result is succeeded
+
+- name: Configure NTP daemon
+  lineinfile:
+    path: /etc/default/ntp
+    regexp: '^NTPD_OPTS'
+    line: NTPD_OPTS='-g -x'
+
+- name: Configure NTP
+  template:
+    src: ntp.conf.j2
+    dest: /etc/ntp.conf
+    mode: 0644
+
+- name: Start ntp service
+  systemd:
+    name: ntp
+    enabled: true
+    state: started
diff --git a/roles/ntp-client/templates/ntp.conf.j2 b/roles/ntp-client/templates/ntp.conf.j2
new file mode 100644
index 0000000000000000000000000000000000000000..b65a209c2f0ff7bd761ba482dfbcb791c1908383
--- /dev/null
+++ b/roles/ntp-client/templates/ntp.conf.j2
@@ -0,0 +1,65 @@
+# {{ ansible_managed }}
+# /etc/ntp.conf, configuration for ntpd; see ntp.conf(5) for help
+
+driftfile /var/lib/ntp/ntp.drift
+
+# Leap seconds definition provided by tzdata
+leapfile /usr/share/zoneinfo/leap-seconds.list
+
+# Enable this if you want statistics to be logged.
+#statsdir /var/log/ntpstats/
+
+statistics loopstats peerstats clockstats
+filegen loopstats file loopstats type day enable
+filegen peerstats file peerstats type day enable
+filegen clockstats file clockstats type day enable
+
+
+{% if inventory_hostname in ntp_servers %}
+# pool.ntp.org maps to about 1000 low-stratum NTP servers.  Your server will
+# pick a different set every time it starts up.  Please consider joining the
+# pool: <http://www.pool.ntp.org/join.html>
+pool 0.debian.pool.ntp.org iburst
+pool 1.debian.pool.ntp.org iburst
+pool 2.debian.pool.ntp.org iburst
+pool 3.debian.pool.ntp.org iburst
+{% else %}
+# You do need to talk to an NTP server or two (or three).
+{% for server in ntp_servers %}
+server {{ server }} iburst
+{% endfor %}
+{% endif %}
+
+
+# Access control configuration; see /usr/share/doc/ntp-doc/html/accopt.html for
+# details.  The web page <http://support.ntp.org/bin/view/Support/AccessRestrictions>
+# might also be helpful.
+#
+# Note that "restrict" applies to both servers and clients, so a configuration
+# that might be intended to block requests from certain clients could also end
+# up blocking replies from your own upstream servers.
+
+# By default, exchange time with everybody, but don't allow configuration.
+restrict -4 default kod notrap nomodify nopeer noquery limited
+restrict -6 default kod notrap nomodify nopeer noquery limited
+
+# Local users may interrogate the ntp server more closely.
+restrict 127.0.0.1
+restrict ::1
+
+# Needed for adding pool entries
+restrict source notrap nomodify noquery
+
+# Clients from this (example!) subnet have unlimited access, but only if
+# cryptographically authenticated.
+#restrict 192.168.123.0 mask 255.255.255.0 notrust
+
+
+# If you want to provide time to your local subnet, change the next line.
+# (Again, the address is an example only.)
+#broadcast 192.168.123.255
+
+# If you want to listen to time broadcasts on your local subnet, de-comment the
+# next lines.  Please do this only if you trust everybody on the network!
+#disable auth
+#broadcastclient