# wg-meshconf

wg-meshconf est un outil qui vous aidera à générer des fichiers de configuration par les pairs pour les réseaux de mailles WireGuard. Vous pouvez facilement et rapidement créer des réseaux de mailles WireGuard à l'aide de cet outil.

## Installation (pipx)

Installer Pipx sous Linux 

```shell
python -S python-pipx
```

Avoir le bon chemein

```shell
pipx ensurepath
```

Résultat commande

```
Success! Added /home/yann/.local/bin to the PATH environment variable.

Consider adding shell completions for pipx. Run 'pipx completions' for instructions.

You will need to open a new terminal or re-login for the PATH changes to take effect.
Alternatively, you can source your shell's config file with e.g. 'source ~/.bashrc'.

Otherwise pipx is ready to go! ✨ 🌟 ✨
```

Rafraîchir pour prise en compte de la modification du chemin (path)

```shell
source ~/.bashrc
```

**pipx, est la façon recommandée d'installer wg-meshconf pour les utilisateurs réguliers**. Cette méthode d'installation installe la dernière version de version de wg-meshconf et toutes les dépendances requises de PyPI.

```shell
# installing the program with pipx
pipx install wg-meshconf

# running the program
wg-meshconf showpeers
```

## Apprendre par un exemple

Voyons un exemple réel de la façon dont cet outil peut être utilisé. Cette section montrera comment créer un réseau de mailles simple avec quatre nœuds en utilisant wg-meshconf.

Pour cet exemple, supposons que vous ayez quatre serveurs comme indiqué ci-dessous. Ces serveurs peuvent se rejoindre par l'adresse `Endpoint`. Par exemple, le serveur `tokyo1` peut ping server `shanghai1` avec l'adresse `shanghai1.com`.

![image](image/99200153-94839e80-279b-11eb-81c9-189b609661ee.png)

### Étape 1 : Ajouter la base Information Pair (Peer)

Vous devrez d'abord ajouter l'information des pairs dans la base de données.  
Il y a deux façons de le faire : 

* via Excel 
* via l'interface de ligne de commande.

#### Méthode A: Avec Excel

wg-meshconf a changé son format de base de données de JSON à CSV et a ajouté la commande `init` depuis la version 2.4.0. Cela signifie qu'il est maintenant possible pour les utilisateurs de modifier directement le fichier de base de données avec Excel ou d'autres éditeurs compatibles CSV pour créer/lire/update/effacer l'information des pairs.

Exécutez la commande suivante pour initialiser un nouveau fichier de base de données. Par défaut, le fichier de base de données est nommé `database.csv`. Vous pouvez également spécifier le nom du fichier via `-d`.

```shell
wg-meshconf init
```

Ouvrez le fichier CSV avec un éditeur comme Excel ou LibreOffice Calc. Vous devriez voir les en-têtes de colonne suivantes.

![image](image/120080963-93b4b900-c0aa-11eb-9e40-0da767c1cbfc.png)

Vous pouvez ensuite remplir l'information des pairs. **Vous devrez remplir au moins les valeurs `Nom`, `Adresse` et `Endpoint` des pairs.** Ces valeurs ne peuvent pas être générées automatiquement.

![image](image/120081082-2fdec000-c0ab-11eb-90ad-0993a0557e1e.png)

Une fois que vous avez terminé, enregistrez le fichier et exécutez à nouveau la commande `init` pour générer automatiquement le reste des informations nécessaires telles que les clés privées de pair.

```shell
wg-meshconf init
```

Si vous vérifiez à nouveau le fichier, vous verrez les champs nécessaires se déposer automatiquement.

![image](image/120081172-a2e83680-c0ab-11eb-963d-b6810a6580a3.png)

#### Méthode B: Avec terminal

Si, pour une raison quelconque, vous ne voulez pas modifier le fichier de base de données directement, vous pouvez également utiliser cet outil uniquement via son interface en ligne de commande.

D'abord, nous devons ajouter tous les pairs du réseau de maillé dans la base de données. La syntaxe de base pour ajouter de nouveaux pairs est :

```shell
wg-meshconf addpeer NAME --address IP_ADDRESS --address IP_ADDRESS_2 --endpoint ENDPOINT
```

- Une nouvelle clé privée sera générée automatiquement si non spécifiée
- ListenPort par défaut à 51820 , standard WireGuard
- Toutes les autres valeurs restent vides par défaut

Il y a d'autres options que vous pouvez spécifier. Utilisez la commande `wg-meshconf addpeer -h` pour plus de détails.

Après avoir ajouté tous les pairs dans la base de données, vous pouvez vérifier qu'ils ont tous été ajoutés correctement via la commande `wg-meshconf showpeers`. Le commutateur `simplify` omet ici toutes les colonnes avec seulement `None`s.

![image](image/99202459-1dec9e00-27a7-11eb-8190-a5a3c6644d2a.png)

### Étape 2: Exporter les fichiers de configuration

Utilisez la commande `genconfig` pour générer des fichiers de configuration pour tous les pairs. Vous pouvez également exporter des configurations pour un seul pair en spécifiant le nom du pair.

Les fichiers de configuration seront nommés d'après les noms des pairs. Par défaut, tous les fichiers de configuration sont exportés dans un sous-répertoire nommé `output`. Vous pouvez modifier cela en spécifiant le répertoire de sortie en utilisant l'option `-o` ou `--output`.

![image](image/99202483-352b8b80-27a7-11eb-8479-8749e945a81d.png)

### Étape 3: Copier les fichiers de configuration vers les pairs

Copier chacun des fichiers de configuration vers les pairs correspondants.

![image](image/99201225-e4fdfa80-27a1-11eb-9b27-6e684d30b784.png)

### Étape 4: Démarrer les services WireGuard

Démarrez les interfaces WireGuard en utilisant la commande `wg-quick`. Il est également possible de contrôler les interfaces WireGuard via le service système `wg-quick@` de WireGuard. L'état WireGuard peut être vérifié via la commande `wg` après la configuration des interfaces WireGuard.

![image](image/99202554-7459dc80-27a7-11eb-9e92-44cd02bdc2f7.png)

### Étape 5 : Vérifier la connectivité

Vérifiez que tous les "endpoints" ont été configurés correctement et peuvent se connecter.

![image](image/99202822-5e98e700-27a8-11eb-8bb2-3e0d2222258f.png)

C'est fait. Maintenant, un réseau maillé a été créé entre les quatre serveurs.

## Mise à jour de l'information par les pairs

Si vous souhaitez mettre à jour les informations d'un pair, utilisez la commande `updatepeer`. La syntaxe de `updatepeer` est la même que celle de la commande `addpeer`. Au lieu d'ajouter un nouveau pair, cette commande écrase les valeurs dans les entrées existantes.

Dans l'exemple ci-dessous, supposons que vous souhaitiez mettre à jour l'adresse du point d'arrivée de «tokyo1» et le changer en «tokyo321.com». Utilisez la commande `updatepeer` et spécifiez le nouveau paramètre à être `tokyo321.com`. Cela écrasera la valeur `tokyo1` existante de `Endpoint`.

![image](image/99204025-3a3f0980-27ac-11eb-9159-0e40fc2eefeb.png)

## Afficher l'information des pairs

La commande `showpeers` imprime par défaut toutes les informations de pairs.

![image](image/99205966-11ba0e00-27b2-11eb-994a-6d2552ff1ca4.png)

Maintenant c'est beaucoup d'informations et beaucoup de colonnes inutiles qui n'ont que `None`s. J'ai donc ajouté la commande `-s`/`--simplify` qui omet ces colonnes inutiles.

![image](image/99206017-38784480-27b2-11eb-9022-21ba791ce28c.png)

Vous pouvez également demander des renseignements sur un pair particulier.

![image](image/99206049-547be600-27b2-11eb-89e9-d7c942dfac44.png)

Le mode texte simple a une utilisation similaire. C'est un peu plus dur à lire.

![image](image/99206104-76756880-27b2-11eb-844b-e5197afcbf99.png)

## Suppression des pairs

Utilisez la commande `delpeer` pour supprimer les pairs. La syntaxe est `delpeer PEER_NAME`.

Cet exemple ci-dessous montre comment supprimer le pair `tokyo1` de la base de données.

![image](image/99204215-e123a580-27ac-11eb-93b1-d07345004fab.png)

## Fichiers de base de données

Toutes les opérations ajout, mise à jour et suppression de pairs sont des opérations de fichiers. Les modifications seront enregistrées dans le fichier de base de données immédiatement. Le fichier de base de données à utiliser peut être spécifié via l'option `-d` ou `--database`. Si aucun fichier de base de données n'est spécifié, `database.csv` sera utilisé.

```csv
"Name","Address","Endpoint","AllowedIPs","ListenPort","PersistentKeepalive","FwMark","PrivateKey","DNS","MTU","Table","PreUp","PostUp","PreDown","PostDown","SaveConfig"
"tokyo1","10.1.0.1/16","tokyo1.com","","51820","","","yJndNh80ToNWGOfDlbtho1wHAEZGa7ZhNpsHf7AJVUM=","","","","","","","",""
"germany1","10.2.0.1/16","germany1.com","","51820","","","SEOaOjTrhR4do1iUrTTRRHZs6xCA3Q/H0yHW3ZpkHko=","","","","","","","",""
"canada1","10.3.0.1/16","canada1.com","","51820","","","2D34jpbTsU+KeBqfItTEbL5m7nYcBomWWJGTYCT6eko=","","","","","","","",""
"shanghai1","10.4.0.1/16","shanghai1.com","","51820","","","CGyR7goj/uGH3TQHgVknpb9ZBR+/yMfkve+kVNGBYlg=","","","","","","","",""
```

## Utilisations détaillées

Vous pouvez consulter la page d'aide du programme. Utilisez le commutateur `-h` ou `--help` pour imprimer la page d'aide.

```shell
$ wg-meshconf -h
usage: wg-meshconf [-h] [-d DATABASE] {addpeer,updatepeer,delpeer,showpeers,genconfig} ...

positional arguments:
  {addpeer,updatepeer,delpeer,showpeers,genconfig}

optional arguments:
  -h, --help            show this help message and exit
  -d DATABASE, --database DATABASE
                        path where the database file is stored (default: database.json)
```

Spécifiez `-h` ou `--help` après une commande pour voir les différentes utilisations de cette commande.

```shell
$ wg-meshconf addpeer -h
usage: wg-meshconf addpeer [-h] --address ADDRESS [--endpoint ENDPOINT] [--privatekey PRIVATEKEY] [--listenport LISTENPORT] [--fwmark FWMARK] [--dns DNS] [--mtu MTU] [--table TABLE] [--preup PREUP] [--postup POSTUP] [--predown PREDOWN] [--postdown POSTDOWN] [--saveconfig] name

positional arguments:
  name                  Name used to identify this node

optional arguments:
  -h, --help            show this help message and exit
  --address ADDRESS     address of the server
  --endpoint ENDPOINT   peer's public endpoint address
  --privatekey PRIVATEKEY
                        private key of server interface
  --listenport LISTENPORT
                        port to listen on
  --fwmark FWMARK       fwmark for outgoing packets
  --dns DNS             server interface DNS servers
  --mtu MTU             server interface MTU
  --table TABLE         server routing table
  --preup PREUP         command to run before interface is up
  --postup POSTUP       command to run after interface is up
  --predown PREDOWN     command to run before interface is down
  --postdown POSTDOWN   command to run after interface is down
  --saveconfig          save server interface to config upon shutdown
```

## License

Ce projet est sous licence [GNU General Public License Version 3 (GNU GPL v3)](https://www.gnu.org/licenses/gpl-3.0.txt)\
Copyright (c) 2018-2023 K4YT3X and contributors.

![GPLv3 Icon](https://www.gnu.org/graphics/gplv3-127x51.png)

Ce projet comprend ou dépend des logiciels et projets suivants:

| **Project**                                          | **License** |
| ---------------------------------------------------- | ----------- |
| [Rich](https://github.com/Textualize/rich)           | MIT License |
| [WireGuard](https://git.zx2c4.com/wireguard)         | MIT License |
| [cryptography](https://github.com/pyca/cryptography) | BSD License |

