Skip to content
Snippets Groups Projects
Commit 31897513 authored by alexandr.benzonan's avatar alexandr.benzonan
Browse files

update readme

parent 7f06b198
No related branches found
No related tags found
No related merge requests found
...@@ -35,10 +35,357 @@ cette commande est correcte en l’exécutant sur la topologie. ...@@ -35,10 +35,357 @@ cette commande est correcte en l’exécutant sur la topologie.
# **2 - Routage et adressage** # **2 - Routage et adressage**
Voici le résultat du playbook, la 77a0ae0163commande ping est effectivement exécuté et le paquet est bien envoyé sur le bon chemin (code sur le git) pour lancer cette partie, il faut utiliser la commande `ansible-playbook playbook.yaml`
On cherche à recréer une typologie comme celle décrite sur l’image
![Untitled](img/Untitled%204.png) ![Untitled](img/Untitled%204.png)
On peut voir grâce à la commande traceroute que le paquet utilise le bon chemin Nous allons commencer par configurer nos hotes (H1 et H2)
Nos allons créer un template jinja2 pour ce faire (le même template sera utilisé pour les 4 devices)
la première ligne de notre template sera
```bash
auto eth0
```
on indique ici que l’interface redémarre automatiquement au démarrage de l’appareil
on va maintenant configurer cette même interface
on commence par indiquer que l’adressage est statique
```bash
iface eth0 inet static
```
puis on lui indique son adresse et son masque de sous réseau (ici pour H1)
```bash
address 1.0.0.3
netmask 255.255.255.0
```
on lui indique ensuite comment rejoindre l’autre sous réseau
```bash
post-up ip route add default via 1.0.0.1
```
on lui indique ici que tout ses paquets devront passer par 1.0.0.1 qui est l’adresse du routeur qui lui est directement lié
Maintenant notre config au complet
```bash
auto eth0
iface eth0 inet static
address 1.0.0.3
netmask 255.255.255.0
post-up ip route add default via 1.0.0.1
```
nous voulons pouvoir utiliser le même template pour nos différents appareils nous allons donc utiliser des variables
```bash
auto {{ifname}}
iface {{ifname}} inet static
address {{ip}}
netmask {{netmask}}
post-up ip route add default via {{gateway}}
```
la config de H2 est identique mais avec 3.0.0.3 comme ip et 3.0.0.2 comme gateway
Passons maintenant à la config de nos routeurs (ici R1)
nos commençons avec une configuration similaire à celle de H1
```bash
auto eth0
iface eth0 inet static
address 2.0.0.1
netmask 255.255.255.0
post-up ip route add 3.0.0.0/24 via 2.0.0.2
```
ici on indique que pour accéder au sous réseau 3.0.0.0 il faut passer par l’ip 2.0.0.2, le reste de la config n’est pas très différent
il nous faut cependant configurer l’autre interface également
```bash
auto eth1
iface eth1 inet static
address 1.0.0.1
netmask 255.255.255.0
```
configuration identique ici aussi mais nous n’avons pas besoin du post-up
maintenant la configuration entière
```bash
auto eth1
iface eth1 inet static
address 1.0.0.1
netmask 255.255.255.0
auto eth0
iface eth0 inet static
address 2.0.0.1
netmask 255.255.255.0
post-up ip route add 3.0.0.0/24 via 2.0.0.2
```
comme précédemment il nous faut des variables
```bash
auto {{ifname}}
iface {{ifname}} inet static
address {{ip}}
netmask {{netmask}}
auto {{ifname2}}
iface {{ifname2}} inet static
address {{ip2}}
netmask {{netmask}}
post-up ip route add 3.0.0.0/24 via {{gateway}}
```
J’avais indiqué que notre config serait utilisée pour tout les appareils nous allons donc ajouter des conditions
```bash
auto {{ifname}}
iface {{ifname}} inet static
address {{ip}}
netmask {{netmask}}
{% if type == "host" %}
post-up ip route add default via {{gateway}}
{% endif %}
{% if type == "router" %}
auto {{ifname2}}
iface {{ifname2}} inet static
address {{ip2}}
netmask {{netmask}}
{% if inventory_hostname == "R1" %}
post-up ip route add 3.0.0.0/24 nexthop via {{gateway}}
{% else %}
post-up ip route add 1.0.0.0/24 nexthop via {{gateway}}
{% endif %}
{% endif %}
```
Le premier post-up est nécessaire uniquement pour les hosts tandis que la 2eme partie de la config est destinée au routers uniquement
la configuration est sauvegardée dans `/etc/network/interfaces.d/ansible.conf` pour être persistante (il serait mieux de la stocker dans deux fichiers différents nommés eth0 et eth1)
Voici le résultat du playbook, la commande ping est effectivement exécutée
![Untitled](img/Untitled%205.png) ![Untitled](img/Untitled%205.png)
On peut voir grâce à la commande traceroute que le paquet utilise le bon chemin
![Untitled](img/Untitled%206.png)
# 3 - **Tunnel wireguard et serveur web**
On commence par installer wireguard sur nos 2 hosts et nginx sur H2
j’ai choisi de faire cette action à la main
on utilise l’interface de management pour accéder à internet (ce qui n’est généralement pas re commandé mais c’était la solution la plus simple)
```bash
dhclient -v mgmt0
apt instal wiregurad-tools
apt install nginx
delete default route
```
Ici l’installation sur H2, sur H1 on supprime seulement la 3eme ligne
la dernière ligne nous sert à supprimer cet accès après son utilisation
il faudra ensuite à nouveau exécuter la commande
```bash
post-up ip route add default via {{gateway}}
```
pour revenir dans notre état précédent
passons maintenant à la configuration de notre serveur nginx
nous allons conserver la configuration par défaut
```bash
server{
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
try_files $uri $uri/ =404;
}
}
```
Nous allons simplement ajouter deux lignes pour empêcher toutes les connexions sauf depuis 10.0.0.0/24
```bash
allow {{allowed_ips}};
deny all;
```
notre configuration finale sera donc
```bash
server{
listen 80 default_server;
listen [::]:80 default_server;
allow {{allowed_ips}};
deny all;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
try_files $uri $uri/ =404;
}
}
```
elle est aussi stockée dans un fichier template jinja2
on se contente ensuite de la copier dans le bon dossier `/etc/nginx/sites-available/default`
on vient ensuite créer un page web simple grâce à un template jinja2
```html
<!DOCTYPE html>
<html>
<head>
<title>{{title}}</title>
</head>
<body>
<h1>{{content}}</h1>
</body>
</html>
```
on peut changer la valeur de title et content depuis le playbook
maintenant passons à la configuration de wireguard
le plus simple est de le configurer en ligne de commande puis d’utiliser la commande `wg showconf wg0` pour récupérer une config prête à être utilisée
on commence par créer un interface pour wireguard
```bash
ip link add wg0 type wireguard
ip addr add 10.0.0.1/24 dev wg0
ip link set up dev wg0
```
il nous faut ensuite une clef privée et un clef publique pour communiquer
```bash
wg genkey | tee private.key | wg pubkey > public.key
```
et on configure wireguard pour l’utiliser
```bash
wg seet private-key private.key
```
maintenant il faut ajouter notre client
```bash
wg set wg0 peer <client pub key> allowed-ips 10.0.0.2/32 endpoint 3.0.0.3:<port>
```
on récupère la config et on l’utilise dans un template jinja2
```bash
[Interface]
{% if inventory_hostname == "H1" %}
Address = {{h1_ip}}
ListenPort = {{h1_port}}
PrivateKey = {{all.h1_private_key}}
{% else %}
Address = {{h2_ip}}
ListenPort = {{h2_port}}
PrivateKey = {{all.h2_private_key}}
{% endif %}
[Peer]
{% if inventory_hostname == "H1" %}
PublicKey = {{h2_public_key}}
AllowedIPs = {{h1_AllowedIPs}}
Endpoint = {{h1_endpoint}}:{{h2_port}}
{% else %}
PublicKey = {{h1_public_key}}
AllowedIPs = {{h2_AllowedIPs}}
Endpoint = {{h2_endpoint}}:{{h1_port}}
{% endif %}
```
ici aussi la config est la même pour H1 et H2
pour ne pas stocker la clef privée dans la playbook mais la stocker en sécurité elle est dans un vault ansible crée à partir de la commande
```bash
ansible-vault create vault.yml
```
il faut entrer un mot de passe à la création
que l’on peut ensuite modifier grâce à la commande
```bash
ansible-vault edit vault.yml
```
pour le modifier ou l’afficher il est nécessaire d’indiquer le mot de passe
on ajoute donc nos 2 clef privé comme variable et on peut lancer notre playbook
il faudra juste créer un autre fichier qui contient le mot de passe
je l’ai appelé vaultpassword
on le spécifie lorsque lance le playbook
```bash
ansible-playbook --vault-password-file vaultpassword playbook_2.yaml
```
Résultat du playbook avec notre curl sur 10.0.0.2 pour vérifier que wireguard est bien configuré
![Untitled](img/Untitled%207.png)
preuve que l’on peut accéder au serveur uniquement depuis 10.0.0.0/24
![Untitled](img/Untitled%208.png)
le serveur nous indique bien que nous n’avons pas le droit d’y accéder avec une erreur 403
tandis que sur 10.0.0.2 nous avons bien notre page
![Untitled](img/Untitled%209.png)
![Untitled](img/Untitled%2010.png)
\ No newline at end of file
img/Untitled 10.png

128 KiB

img/Untitled 4.png

69.1 KiB | W: | H:

img/Untitled 4.png

67.1 KiB | W: | H:

img/Untitled 4.png
img/Untitled 4.png
img/Untitled 4.png
img/Untitled 4.png
  • 2-up
  • Swipe
  • Onion skin
img/Untitled 5.png

40 KiB | W: | H:

img/Untitled 5.png

69.1 KiB | W: | H:

img/Untitled 5.png
img/Untitled 5.png
img/Untitled 5.png
img/Untitled 5.png
  • 2-up
  • Swipe
  • Onion skin
img/Untitled 6.png

40 KiB

img/Untitled 7.png

109 KiB

img/Untitled 8.png

54.1 KiB

img/Untitled 9.png

21 KiB

0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment