From fe3d5913f390d080831d1ecbea43a7c74ed55190 Mon Sep 17 00:00:00 2001
From: "iliya.saroukha" <iliya.saroukhanian@etu.hesge.ch>
Date: Tue, 18 Mar 2025 12:51:43 +0100
Subject: [PATCH] feat: rendu

---
 README.md | 204 +++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 203 insertions(+), 1 deletion(-)

diff --git a/README.md b/README.md
index ab0e2aa..506709a 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,8 @@
 # Network automation avec `ansible`
 
-## Commandes _ad-hoc_
+## Topologie
+
+### Commandes _ad-hoc_
 
 - Installez ansible sur votre laptop puis vérifiez que les machines sont bien
 joignables avec la commande :
@@ -75,3 +77,203 @@ Expliquez et donner des exemples.
     où il ne transfère pas de code `python` sur l'hôte distant. La commande
     spécifié sera exécuté par le daemon `sshd` en créant un processus enfant
     sur la machine distante
+
+## Routage et adressage
+
+### Playbook `ansible`
+
+```yaml
+---
+- name: Configure network interfaces
+  hosts: all
+  become: true
+  vars:
+    interfaces:
+      H1:
+        - name: "eth0"
+          address: "1.0.0.3"
+          netmask: "255.255.255.0"
+          gateway: "1.0.0.1"
+
+      H2:
+        - name: "eth0"
+          address: "3.0.0.3"
+          netmask: "255.255.255.0"
+          gateway: "3.0.0.2"
+
+      R1:
+        - name: eth1
+          address: "1.0.0.1"
+          netmask: "255.255.255.0"
+        - name: eth0
+          address: "2.0.0.1"
+          netmask: "255.255.255.0"
+
+      R2:
+        - name: eth0
+          address: "2.0.0.2"
+          netmask: "255.255.255.0"
+        - name: eth1
+          address: "3.0.0.2"
+          netmask: "255.255.255.0"
+
+    routes:
+      R1:
+        - network: "3.0.0.0/24"
+          via: "2.0.0.2"
+
+      R2:
+        - network: "1.0.0.0/24"
+          via: "2.0.0.1"
+
+  tasks:
+    - name: Ensure /etc/network/interfaces.d exists
+      ansible.builtin.file:
+        path: /etc/network/interfaces.d
+        state: directory
+        mode: '0755'
+
+    - name: Configure network interfaces
+      ansible.builtin.template:
+        src: "templates/netconfig.j2"
+        dest: "/etc/network/interfaces.d/{{ inventory_hostname }}"
+        owner: "root"
+        group: "root"
+        mode: "0644"
+      notify: Restart networking
+
+    - name: Restart networking before pinging
+      ansible.builtin.meta: flush_handlers
+
+    - name: H1 pings H2
+      ansible.builtin.command:
+        cmd: ping -c 3 3.0.0.3
+      register: ping_result
+      changed_when: false
+      failed_when: ping_result.rc != 0
+      when: inventory_hostname == "H1"
+    
+    - name: H2 pings H1
+      ansible.builtin.command:
+        cmd: ping -c 3 1.0.0.3
+      register: ping_result
+      changed_when: false
+      failed_when: ping_result.rc != 0
+      when: inventory_hostname == "H2"
+
+  handlers:
+    - name: Restart networking
+      ansible.builtin.systemd:
+        name: networking
+        state: restarted
+        enabled: true
+
+```
+
+- À quoi servent les options `--syntax-check` et `--check` de la commande ansible-playbook ?
+    - `--syntax-check` permet de vérifier la syntaxe d'un playbook `ansible
+    sans l'exécuter en tant que tel
+    - `--check` est un mode "d'émulation" de l'exécution du playbook (e.g.
+    connexion aux hôtes) sans effectuer les modifications spécifiées dans le
+    playbook
+
+
+## Tunnel WireGuard et serveur web
+
+### `ansible-vault`
+
+```bash
+ansible-vault create secrets/wireguard_keys.yml
+```
+
+```yaml
+---
+private_keys:
+  H1: "aLU6ekCVmx1S/C2Ld+TCbfBtfg0+TDLqTdBmeX9C/24="
+  H2: "IIjII5Iwmw06jklOTjPqt6vJbYHAdf1cDaa8YFKf5lA="
+```
+
+### Playbook
+
+```yaml
+---
+- name: WireGuard Tunnel
+  hosts: all
+  become: true
+  vars_files:
+    - ./secrets/wireguard_keys.yml
+  vars:
+    interfaces:
+      H1:
+        eth0:
+          address: "1.0.0.3"
+          netmask: "255.255.255.0"
+        wg0:
+          address: "10.0.0.1"
+          port: 51820
+          netmask: "255.255.255.0"
+
+      H2:
+        eth0:
+          address: "3.0.0.3"
+          netmask: "255.255.255.0"
+        wg0:
+          address: "10.0.0.2"
+          port: 51820
+          netmask: "255.255.255.0"
+
+    keys:
+      H1:
+        private:
+          key: "{{ private_keys.H1 }}"
+        public:
+          key: "OMlLks+cwFWshIcrcZK+RJUf841Ra3lcdVLTcxwetUs="
+      H2:
+        private:
+          key: "{{ private_keys.H2 }}"
+        public:
+          key: "PtT28gd4JRts2KZlumjTG2cMWsEWXEN+lM4EsXJUjDY="
+
+  tasks:
+    - name: Setup WireGuard hosts
+      ansible.builtin.template:
+        src: "templates/wireguard.j2"
+        dest: "/etc/wireguard/wg0.conf"
+        owner: "root"
+        group: "root"
+        mode: "0644"
+      when: inventory_hostname == "H1" or inventory_hostname == "H2"
+
+    - name: Enable WireGuard service
+      ansible.builtin.systemd:
+        name: wg-quick@wg0
+        state: restarted
+        enabled: true
+
+    - name: Restrict access to webpage via tunnel
+      ansible.builtin.command:
+        cmd: "sed -i 's/listen 80/listen 10.0.0.2:80/' /etc/nginx/sites-enabled/default"
+      when: inventory_hostname == "H2"
+      notify: Restart nginx
+
+    - name: Testing connectivity
+      ansible.builtin.command:
+        cmd: "wget 10.0.0.2 -O h2.html"
+      when: inventory_hostname == "H1"
+
+  handlers:
+    - name: Restart nginx
+      ansible.builtin.systemd:
+        name: nginx
+        state: restarted
+        enabled: true
+
+```
+
+## Exécution de toute la configuration
+
+```bash
+ansible-playbook prereqs_wireguard.play.yml -i wireguard.ini
+ansible-playbook first.play.yml -i inventory.ini
+ansible-playbook wireguard.play.yml -i inventory.ini
+```
-- 
GitLab