From fb08fbf7c98047bce1167fdfca6afc1d7ffa731e Mon Sep 17 00:00:00 2001
From: Benjamin Graillot <graillot@crans.org>
Date: Wed, 19 Aug 2020 19:02:00 +0200
Subject: [PATCH] [radvd] Install radvd on routers

---
 plays/firewall.yml                  | 18 ++++++++++++++++++
 roles/radvd/handlers/main.yml       |  5 +++++
 roles/radvd/tasks/main.yml          | 18 ++++++++++++++++++
 roles/radvd/templates/radvd.conf.j2 | 19 +++++++++++++++++++
 4 files changed, 60 insertions(+)
 create mode 100644 roles/radvd/handlers/main.yml
 create mode 100644 roles/radvd/tasks/main.yml
 create mode 100644 roles/radvd/templates/radvd.conf.j2

diff --git a/plays/firewall.yml b/plays/firewall.yml
index c2976feb..24e1ff68 100755
--- a/plays/firewall.yml
+++ b/plays/firewall.yml
@@ -10,6 +10,24 @@
   roles:
     - arp-proxy
 
+- hosts: crans_routeurs
+  vars:
+    subnets:
+      - name: infra
+        prefix: fd00:0:0:11::/64
+        dns:
+          - fd00::11:0:ff:fe00:9911
+      - name: adh
+        prefix: 2a0c:700:12::/64
+        dns:
+          - 2a0c:700:12::ff:fe00:9912
+      - name: adh_nat
+        prefix: 2a0c:700:13::/64
+        dns:
+          - 2a0c:700:13::ff:fe00:9913
+  roles:
+    - radvd
+
 # Deploy firewall
 - hosts: crans_routeurs
   vars:
diff --git a/roles/radvd/handlers/main.yml b/roles/radvd/handlers/main.yml
new file mode 100644
index 00000000..39552d74
--- /dev/null
+++ b/roles/radvd/handlers/main.yml
@@ -0,0 +1,5 @@
+---
+- name: Restart radvd service
+  service:
+    name: radvd
+    state: restarted
diff --git a/roles/radvd/tasks/main.yml b/roles/radvd/tasks/main.yml
new file mode 100644
index 00000000..65715038
--- /dev/null
+++ b/roles/radvd/tasks/main.yml
@@ -0,0 +1,18 @@
+---
+- name: Install radvd
+  apt:
+    name: radvd
+    state: present
+    update_cache: true
+  register: apt_result
+  retries: 3
+  until: apt_result is succeeded
+
+- name: Deploy radvd configuration
+  template:
+    src: radvd.conf.j2
+    dest: /etc/radvd.conf
+    mode: 0644
+    owner: root
+    group: root
+  notify: Restart radvd service
diff --git a/roles/radvd/templates/radvd.conf.j2 b/roles/radvd/templates/radvd.conf.j2
new file mode 100644
index 00000000..a13cef0b
--- /dev/null
+++ b/roles/radvd/templates/radvd.conf.j2
@@ -0,0 +1,19 @@
+{% for subnet in subnets %}
+interface {{ interfaces[subnet.name] }} {
+	AdvSendAdvert on;
+	AdvDefaultPreference high;
+	MaxRtrAdvInterval 30;
+
+	prefix {{ subnet.prefix }} {
+		AdvRouterAddr on;
+	};
+
+	# La zone DNS
+	DNSSL {{ subnet.name | replace('_', '-') }}.crans.org {};
+
+	# Les DNS récursifs
+{% for dns in subnet.dns %}
+	RDNSS {{ dns }} {};
+{% endfor %}
+};
+{% endfor %}
-- 
GitLab