diff --git a/group_vars/keepalived.yml b/group_vars/keepalived.yml
index 47059bf164c93680b5cbfbf5d8f0b50aedfa7de0..39f72b8c349c814c58d6bf70a12697dbcae92f10 100644
--- a/group_vars/keepalived.yml
+++ b/group_vars/keepalived.yml
@@ -1,37 +1,25 @@
 ---
-
 glob_keepalived:
   mail_source: keepalived@crans.org
-  mail_destination: root@crans.org
+  mail_destination: shirenn@crans.org
   smtp_server: smtp.adm.crans.org
   pool:
-    all:
+    VI_ALL:
       password: "{{ vault.keepalived.password }}"
       id: 60
       ipv6: yes
-      notify: /usr/scripts/notify-dhcp
+      notify: /var/local/services/keepalived/keepalived.py
       zones:
-        - vlan: zayo
-          ipv4: 158.255.113.73/31
-          brd: false
-          ipv6: 2001:1b48:2:103::bb:2/126
         - vlan: srv
-          ipv4: 185.230.79.62/26
-          ipv6: 2a0c:700:2::ff:fe00:9902/64
+          ipv4: 185.230.79.61/26
+          ipv6: 2a0c:700:2::ff:fe01:9902/64
         - vlan: srv_nat
-          ipv4: 172.16.3.99/24
-          ipv6: 2a0c:700:3::ff:fe00:9903/64
-        - vlan: accueil
-          ipv4: 172.16.14.99/24
-        - vlan: infra
-          ipv4: 172.16.32.99/22
-          ipv6: fd00::11:0:ff:fe00:9911/64
+          ipv4: 172.16.3.199/24
+          ipv6: 2a0c:700:3::ff:fe01:9903/64
         - vlan: adh
-          ipv4: 185.230.78.99/24
-          ipv6: 2a0c:700:12::ff:fe00:9912/48
-        - vlan: adh_nat
-          ipv4: 100.64.0.99/16
-          ipv6: 2a0c:700:13::ff:fe00:9913/48
-        - vlan: federez
-          ipv4: 100.65.0.99/16
-          ipv6: 2a0c:700:254::ff:fe00:99fe/64
+          ipv4: 185.230.78.199/24
+          ipv6: 2a0c:700:12::ff:fe01:9912/48
+
+glob_service_keepalived:
+  name: keepalived
+  install_dir: /var/local/services/keepalived
diff --git a/host_vars/routeur-daniel.adm.crans.org/keepalived.yml b/host_vars/routeur-daniel.adm.crans.org/keepalived.yml
new file mode 100644
index 0000000000000000000000000000000000000000..72646b654180d8b75e60b3e74c7bc7a154d72694
--- /dev/null
+++ b/host_vars/routeur-daniel.adm.crans.org/keepalived.yml
@@ -0,0 +1,16 @@
+---
+loc_keepalived:
+  instances:
+    - name: VI_ALL
+      state: MASTER
+      priority: 150
+
+loc_service_keepalived:
+  git:
+    remote: https://gitlab.adm.crans.org/nounous/keepalived.git
+    version: master
+  config:
+    services:
+      VI_ALL:
+        - isc-dhcp-server
+        - radvd
diff --git a/host_vars/routeur-jack.adm.crans.org/keepalived.yml b/host_vars/routeur-jack.adm.crans.org/keepalived.yml
new file mode 100644
index 0000000000000000000000000000000000000000..620354495f58c9ed6b44f5a5732d67adb342a826
--- /dev/null
+++ b/host_vars/routeur-jack.adm.crans.org/keepalived.yml
@@ -0,0 +1,16 @@
+---
+loc_keepalived:
+  instances:
+    - name: VI_ALL
+      state: BACKUP
+      priority: 100
+
+loc_service_keepalived:
+  git:
+    remote: https://gitlab.adm.crans.org/nounous/keepalived.git
+    version: master
+  config:
+    services:
+      VI_ALL:
+        - isc-dhcp-server
+        - radvd
diff --git a/plays/keepalived.yml b/plays/keepalived.yml
old mode 100644
new mode 100755
index 7b6a6634c62521a570d913b5c96eee13555dfb56..9c51f6d5deac59084ef1f883f881f5bfa571c61b
--- a/plays/keepalived.yml
+++ b/plays/keepalived.yml
@@ -2,6 +2,12 @@
 ---
 - hosts: keepalived
   vars:
-    keepalived: "{{ glob_keepalived | combine(loc_keepalived) }}"
+    keepalived: "{{ glob_keepalived | default({}) | combine(loc_keepalived | default({})) }}"
   roles:
     - keepalived
+
+- hosts: keepalived
+  vars:
+    service: "{{ glob_service_keepalived | default({}) | combine(loc_service_keepalived | default({})) }}"
+  roles:
+    - service
diff --git a/plays/routeurs.yml b/plays/routeurs.yml
index 853ec82d8bb8ff19c62f2a934d5d4024158ee601..f9e42659ac250b2bf5e1d8f3e6a65b2b56689d32 100755
--- a/plays/routeurs.yml
+++ b/plays/routeurs.yml
@@ -6,3 +6,4 @@
 - import_playbook: firewall.yml
 - import_playbook: dns-recursive.yml
 - import_playbook: prefix-delegation.yml
+- import_playbook: keepalived.yml
diff --git a/roles/isc-dhcp-server/handlers/main.yml b/roles/isc-dhcp-server/handlers/main.yml
index 51268e9886357a1fb0171911836070501a93e73b..1922dc71f65ddd58ad0824ab2b0382bfdd836d25 100644
--- a/roles/isc-dhcp-server/handlers/main.yml
+++ b/roles/isc-dhcp-server/handlers/main.yml
@@ -7,6 +7,5 @@
   systemd:
     name: isc-dhcp-server
     state: restarted
-    enabled: true
   listen: 'restart isc-dhcp-server'
   when: not ansible_check_mode and ansible_facts.services['isc-dhcp-server']['state'] == 'running'
diff --git a/roles/keepalived/tasks/main.yml b/roles/keepalived/tasks/main.yml
index 14fc00bd453629dbbf19b7fc8199a5bd93a2c92d..008656e12529d596a9d4ebfabf4bea81476c3269 100644
--- a/roles/keepalived/tasks/main.yml
+++ b/roles/keepalived/tasks/main.yml
@@ -14,15 +14,8 @@
     mode: 0644
   notify: Reload keepalived.service
 
-- name: Create scripts directory
-  file:
-    path: /usr/scripts
-    state: directory
-
-- name: Deploy keepalived dhcp scripts
-  template:
-    src: bin/notify-dhcp
-    dest: /usr/scripts/notify-dhcp
-    mode: 0744
-  when: not ansible_check_mode
-  notify: Reload keepalived.service
+- name: Start and enable keepalived
+  service:
+    name: keepalived
+    state: started
+    enabled: yes
diff --git a/roles/keepalived/templates/bin/notify-dhcp b/roles/keepalived/templates/bin/notify-dhcp
deleted file mode 100755
index a62ad14c109b8e4ffcc3ec32073fd15c7abd0079..0000000000000000000000000000000000000000
--- a/roles/keepalived/templates/bin/notify-dhcp
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/bin/bash
-
-TYPE=$1
-NAME=$2
-STATE=$3
-
-case $STATE in
-	"MASTER")
-		logger -s '[DHCP-NOTIFY] Entering state MASTER, starting isc-dhcp-server.service'
-		systemctl start isc-dhcp-server.service
-		exit 0;;
-	"BACKUP")
-		logger -s '[DHCP-NOTIFY] Entering state BACKUP, stopping isc-dhcp-server.service'
-		systemctl stop isc-dhcp-server.service
-		exit 0;;
-	"FAULT")
-		logger -s '[DHCP-NOTIFY] Entering state FAULT, stopping isc-dhcp-server.service'
-		systemctl stop isc-dhcp-server.service
-		exit 0;;
-	*)
-		logger -s '[DHCP-NOTIFY] Entering UNKNOWN state, doing nothing'
-		exit 1;;
-esac
-
diff --git a/roles/keepalived/templates/keepalived/keepalived.conf.j2 b/roles/keepalived/templates/keepalived/keepalived.conf.j2
index 35c954c7e1cc59dc4f1207e37eaed841c91c3159..f8645e47c182583d5a7ac5eb272f7fe04b65b317 100644
--- a/roles/keepalived/templates/keepalived/keepalived.conf.j2
+++ b/roles/keepalived/templates/keepalived/keepalived.conf.j2
@@ -7,7 +7,7 @@ global_defs {
 }
 
 {% for instance in keepalived.instances %}
-vrrp_instance {{ instance.tag }}4 {
+vrrp_instance {{ instance.name }} {
   state {{ instance.state }}
   priority {{ instance.priority }}
   smtp_alert
@@ -36,7 +36,7 @@ vrrp_instance {{ instance.tag }}4 {
 }
 
 {% if keepalived.pool[instance.name].ipv6 %}
-vrrp_instance {{ instance.tag }}6 {
+vrrp_instance {{ instance.name }}6 {
   state {{ instance.state }}
   priority {{ instance.priority }}
   smtp_alert
diff --git a/roles/radvd/handlers/main.yml b/roles/radvd/handlers/main.yml
index 39552d747c80547d07e842482d3acd3f3850f2fc..3ca4d5677012471273d6c1f3ac7ca01a2b05693c 100644
--- a/roles/radvd/handlers/main.yml
+++ b/roles/radvd/handlers/main.yml
@@ -1,5 +1,10 @@
 ---
+- name: check radvd status
+  service_facts:
+  listen: Restart radvd service
+
 - name: Restart radvd service
   service:
     name: radvd
     state: restarted
+  when: not ansible_check_mode and ansible_facts.services['bird']['state'] == 'running'