# Réseau



# Serveur DHCP (ISC-DHCP-SERVER)

## **Configuration d'un serveur DHCP avec routage et NAT**

## **Mise à jour du système**

Commencez par mettre à jour votre système :**`sudo apt update && sudo apt upgrade`**

## **Installation du service DHCP**

Installez le service DHCP avec la commande suivante :**`sudo apt install isc-dhcp-server`**

## **Configuration de l'interface réseau**

Attribuez une adresse IP statique à l'interface réseau que vous souhaitez utiliser pour le DHCP. Par exemple, pour Debian, éditez le fichier `/etc/network/interfaces`. Si votre gestionnaire de réseau est différent, adaptez cette étape selon vos besoins.

[![Screenshot 2024-12-29 at 5.28.24 AM.png](https://wiki.bibisan.com/uploads/images/gallery/2024-12/scaled-1680-/screenshot-2024-12-29-at-5-28-24-am.png)](https://wiki.bibisan.com/uploads/images/gallery/2024-12/screenshot-2024-12-29-at-5-28-24-am.png)

"***eth1***" étant l'interface qui diffusera le DHCP.

## **Configuration du fichier DHCP**

Ouvrez le fichier de configuration principal du service DHCP :**`vim /etc/dhcp/dhcpd.conf`**Recherchez les lignes suivantes et modifiez-les selon vos besoins ou laissez-les par défaut.Ajoutez ensuite la configuration de votre sous-réseau.

Voici un exemple :

subnet 192.168.1.0 netmask 255.255.255.0 {  
 range 192.168.1.2 192.168.1.200;  
 option routers 192.168.1.1;  
 option subnet-mask 255.255.255.0;  
 option domain-name-servers 8.8.8.8, 8.8.4.4;  
 option domain-name "local";  
}

Modifiez cette configuration en fonction de vos besoins spécifiques.

## **Spécification de l'interface réseau pour le DHCP**

Éditez le fichier suivant pour indiquer l'interface réseau que le service DHCP doit écouter :**`vim /etc/default/isc-dhcp-server`**

Ajoutez ou modifiez la ligne suivante pour spécifier votre interface réseau (l'interface qui diffusera le DHCP) :

INTERFACESv4="eth1"

## **Redémarrage et activation du service DHCP**

Redémarrez le service DHCP et configurez-le pour qu'il démarre automatiquement au démarrage du système :**`systemctl restart isc-dhcp-server`**  
**`systemctl enable isc-dhcp-server`**

## **Activation du routage IP**

Pour activer le routage entre les interfaces réseau, éditez le fichier suivant :**`vim /etc/sysctl.conf`**Ajoutez ou décommentez la ligne suivante :

net.ipv4.ip\_forward = 1

[![Screenshot 2024-12-29 at 5.47.30 AM.png](https://wiki.bibisan.com/uploads/images/gallery/2024-12/scaled-1680-/screenshot-2024-12-29-at-5-47-30-am.png)](https://wiki.bibisan.com/uploads/images/gallery/2024-12/screenshot-2024-12-29-at-5-47-30-am.png)

Appliquez les modifications avec la commande suivante :**`sudo sysctl -p`**

## **Configuration du NAT avec iptables**

Configurez le NAT (Network Address Translation) pour permettre aux machines connectées via DHCP d'accéder à Internet via l'interface réseau de votre serveur.Ajoutez cette règle iptables (remplacez `eth0` par l'interface réseau utilisée pour l'accès Internet) :**`sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE` (à la place de eth0 mettez l'interface qui fournit internet à votre serveur)** Pour rendre cette règle permanente, installez **iptables-persistent** :**`sudo apt install iptables-persistent`**Lors de l'installation, acceptez de sauvegarder les règles actuelles pour IPv4 et IPv6 (si applicable). Ensuite, sauvegardez manuellement les règles avec la commande suivante :**`sudo iptables-save > /etc/iptables/rules.v4`**Vérifiez que les modifications ont bien été enregistrées :**`cat /etc/iptables/rules.v4`**

**Activez et redémarrez le service netfilter-persistent pour appliquer les règles au démarrage :`sudo systemctl enable netfilter-persistent`  
`sudo systemctl restart netfilter-persistent` Votre serveur DHCP avec routage et NAT est maintenant configuré et prêt à être utilisé !**

# Serveur PXE (TFTP & ISC-DHCP)

<span class="animate-in fade-in-25 duration-700">Avant de</span><span class="animate-in fade-in-25 duration-700"> suivre ce tuto</span><span class="animate-in fade-in-25 duration-700">riel, vous deve</span><span class="animate-in fade-in-25 duration-700">z disposer d'un </span><span class="animate-in fade-in-25 duration-700">**serveur ISC-DHCP fonctionnel**</span><span class="animate-in fade-in-25 duration-700"> sur</span><span class="animate-in fade-in-25 duration-700"> le même serv</span><span class="animate-in fade-in-25 duration-700">eur où vous souh</span><span class="animate-in fade-in-25 duration-700">aitez installer le</span><span class="animate-in fade-in-25 duration-700"> PXE. Assurez-vous égal</span><span class="animate-in fade-in-25 duration-700">ement d'avoir effe</span><span class="animate-in fade-in-25 duration-700">ctué une mise</span><span class="animate-in fade-in-25 duration-700"> à jour du syst</span><span class="animate-in fade-in-25 duration-700">ème avec la comm</span><span class="animate-in fade-in-25 duration-700">ande suivante :</span><span class="animate-in fade-in-25 duration-700">**`sudo apt update && sudo apt upgrade`**</span>

## **Installation des utilitaires nécessaires**

<span class="animate-in fade-in-25 duration-700">Installez les</span><span class="animate-in fade-in-25 duration-700"> utilitaires Linu</span><span class="animate-in fade-in-25 duration-700">x nécessaires ains</span><span class="animate-in fade-in-25 duration-700">i qu'un serveur T</span><span class="animate-in fade-in-25 duration-700">FTP avec la comm</span><span class="animate-in fade-in-25 duration-700">ande suivante :</span><span class="animate-in fade-in-25 duration-700">**`sudo apt install syslinux-common syslinux-efi tftpd-hpa`**</span>

## **Création du répertoire de configuration**

<span class="animate-in fade-in-25 duration-700">Créez un</span><span class="animate-in fade-in-25 duration-700"> répertoire pour</span><span class="animate-in fade-in-25 duration-700"> stocker les fich</span><span class="animate-in fade-in-25 duration-700">iers de configuration :</span><span class="animate-in fade-in-25 duration-700">\*\*</span><span class="animate-in fade-in-25 duration-700">`sudo mkdir /tftpboot`</span><span class="animate-in fade-in-25 duration-700">\*\*</span><span class="animate-in fade-in-25 duration-700">Accédez au</span><span class="animate-in fade-in-25 duration-700"> répertoire </span><span class="animate-in fade-in-25 duration-700">`/usr/lib/syslinux/modules/efi64/`</span><span class="animate-in fade-in-25 duration-700"> et</span><span class="animate-in fade-in-25 duration-700"> copiez les fich</span><span class="animate-in fade-in-25 duration-700">iers suivants dans</span><span class="animate-in fade-in-25 duration-700"> </span><span class="animate-in fade-in-25 duration-700">`/tftpboot`</span><span class="animate-in fade-in-25 duration-700"> :</span><span class="animate-in fade-in-25 duration-700">\*\*</span><span class="animate-in fade-in-25 duration-700">`cp {ldlinux.e64,libutil.c32,menu.c32} /tftpboot`</span><span class="animate-in fade-in-25 duration-700">\*\*</span><span class="animate-in fade-in-25 duration-700">Copiez égal</span><span class="animate-in fade-in-25 duration-700">ement le fich</span><span class="animate-in fade-in-25 duration-700">ier suivant :</span><span class="animate-in fade-in-25 duration-700">\*\*</span><span class="animate-in fade-in-25 duration-700">`cp /usr/lib/SYSLINUX.EFI/efi64/syslinux.efi /tftpboot`</span><span class="animate-in fade-in-25 duration-700">\*\*</span><span class="animate-in fade-in-25 duration-700">Accédez au</span><span class="animate-in fade-in-25 duration-700"> répertoire </span><span class="animate-in fade-in-25 duration-700">`/tftpboot`</span><span class="animate-in fade-in-25 duration-700"> et</span><span class="animate-in fade-in-25 duration-700"> créez un sous</span><span class="animate-in fade-in-25 duration-700">-répertoire </span><span class="animate-in fade-in-25 duration-700">`pxelinux.cfg`</span><span class="animate-in fade-in-25 duration-700"> :</span><span class="animate-in fade-in-25 duration-700">**`cd /tftpboot`**</span><span class="animate-in fade-in-25 duration-700">  
</span><span class="animate-in fade-in-25 duration-700">**`mkdir pxelinux.cfg`**</span>

## **Configuration du serveur TFTP**

<span class="animate-in fade-in-25 duration-700">Modifiez</span><span class="animate-in fade-in-25 duration-700"> le fichier de</span><span class="animate-in fade-in-25 duration-700"> configuration T</span><span class="animate-in fade-in-25 duration-700">FTP avec la comm</span><span class="animate-in fade-in-25 duration-700">ande suivante :</span><span class="animate-in fade-in-25 duration-700">\*\*</span><span class="animate-in fade-in-25 duration-700">`vim /etc/default/tftpd-hpa`</span><span class="animate-in fade-in-25 duration-700">\*\*</span><span class="animate-in fade-in-25 duration-700">Assurez-vous que</span><span class="animate-in fade-in-25 duration-700"> le contenu du</span><span class="animate-in fade-in-25 duration-700"> fichier est conf</span><span class="animate-in fade-in-25 duration-700">orme à ce qui</span><span class="animate-in fade-in-25 duration-700"> suit :</span>

<span class="animate-in fade-in-25 duration-700">TFTP\_USERNAME="tftp"  
TFTP\_DIRECTORY="/tftpboot"  
TFTP\_ADDRESS="0.0.0.0:69"  
TFTP\_OPTIONS="--secure"  
</span>

<span class="animate-in fade-in-25 duration-700">N'oubliez pas de configurer votre pare-feu pour autoriser le port **69/UDP** si nécessaire. Démarrez et activez le service TFTP :**`systemctl start tftpd-hpa`**  
**`systemctl enable tftpd-hpa`**</span>

## **Configuration du serveur DHCP**

**Ouvrez le fichier de configuration DHCP situé à l'adresse suivante : `/etc/dhcp/dhcpd.conf`. Ajoutez ces deux lignes à la configuration de votre sous-réseau DHCP :**

**next-server 192.168.1.5;  
option bootfile-name "syslinux.efi";**

**Remplacez `192.168.1.5` par l'adresse IP de votre serveur PXE.**

**Exemple de configuration DHCP complète :**

**subnet 192.168.0.0 netmask 255.255.255.0 {  
 range 192.168.0.106 192.168.0.200;  
 option routers 192.168.0.1;  
 default-lease-time 3600;  
 max-lease-time 86400;  
 next-server 192.168.0.105;  
 option bootfile-name "syslinux.efi";  
}**

**Redémarrez le service DHCP pour appliquer les modifications :`systemctl restart isc-dhcp-server`**

## **Ajout des fichiers d'installation Debian**

**Créez un répertoire pour l'ISO Debian dans `/tftpboot` :`sudo mkdir /tftpboot/Debian`Montez votre fichier ISO Debian et copiez son contenu dans le répertoire créé précédemment :`sudo mount your_iso_file.iso /mnt`  
`sudo cp -r /mnt/* /tftpboot/Debian`**

> Cette commande peut prendre du temps en fonction de la taille de votre fichier ISO.

## **Configuration du menu PXE**

**Accédez au répertoire `/tftpboot/pxelinux.cfg` et créez un fichier nommé `default` :`vim /tftpboot/pxelinux.cfg/default`Ajoutez la configuration suivante pour Debian Net Boot :**

UI menu.c32

LABEL Debian Net Boot  
MENU LABEL Debian  
KERNEL debian/install.amd/vmlinuz  
APPEND initrd=Debian/install.amd/initrd.gz  
TEXT HELP  
Installation minimale de Debian.  
ENDTEXT

Les fichiers spécifiés (vmlinuz et initrd.gz) doivent être situés dans le répertoire `/tftpboot/Debian/install.amd`.

Exemple d'arborescence des fichiers dans /tftpboot (peuvent être différent selon les images) :

/tftpboot/  
├── Debian/  
│ ├── install.amd/  
│ │ ├── vmlinuz  
│ │ ├── initrd.gz  
├── ldlinux.e64  
├── libutil.c32  
├── menu.c32  
├── pxelinux.cfg/  
│ ├── default  
├── syslinux.efi

## **Ajout d'autres systèmes d'exploitation (exemple Ubuntu)**

Pour ajouter un autre système, comme Ubuntu, utilisez une configuration similaire en modifiant les chemins et noms des fichiers correspondants.Exemple pour Ubuntu :

UI menu.c32

LABEL Ubuntu Net Boot  
MENU LABEL Ubuntu  
KERNEL ubuntu/install/amd64/linux  
APPEND initrd=ubuntu/install/amd64/initrd.gz  
TEXT HELP  
Installation minimale d'Ubuntu.  
ENDTEXT

## **Finalisation**

Redémarrez votre service TFTP pour finaliser la configuration :**`systemctl restart tftpd-hpa`**

Votre serveur PXE est maintenant configuré et prêt à être utilisé !

# WireGuard Client Installation

## **ÉTAPE 1 : INSTALLER WIREGUARD**

<div class="mb-md" id="bkmrk-mettez-%C3%A0-jour-votre-"><div class="relative default font-sans text-base text-textMain dark:text-textMainDark selection:bg-super/50 selection:text-textMain dark:selection:bg-superDuper/10 dark:selection:text-superDark"><div class="min-w-0 break-words [word-break:break-word]"><div dir="auto"><div class="prose dark:prose-invert inline leading-normal break-words min-w-0 [word-break:break-word]">1. Mettez à jour votre système : <div class="w-full md:max-w-[90vw]"><div class="codeWrapper text-textMainDark selection:!text-superDark selection:bg-superDuper/10 bg-offset dark:bg-offsetDark my-md relative flex flex-col rounded font-mono text-sm font-thin"><div class="-mt-xl"><div><div class="text-text-200 bg-background-300 py-xs px-sm inline-block rounded-br rounded-tl-[3px] font-thin">  
    </div></div><div class="pr-lg">`<span class="token token">sudo</span> <span class="token token">apt</span> update <span class="token token operator">&&</span> <span class="token token">sudo</span> <span class="token token">apt</span> upgrade -y`</div></div></div></div>
2. Installez WireGuard : <div class="w-full md:max-w-[90vw]"><div class="codeWrapper text-textMainDark selection:!text-superDark selection:bg-superDuper/10 bg-offset dark:bg-offsetDark my-md relative flex flex-col rounded font-mono text-sm font-thin"><div class="-mt-xl"><div><div class="text-text-200 bg-background-300 py-xs px-sm inline-block rounded-br rounded-tl-[3px] font-thin">  
    </div></div><div class="pr-lg">`<span class="token token">sudo</span> <span class="token token">apt</span> <span class="token token">install</span> wireguard`</div></div></div></div>

</div></div></div></div></div><p class="callout info">**Si vous n'avez pas le paquet resolvconf d'installer installez le également avec : " apt install resolvconf -y "**</p>

## **ÉTAPE 2 : GÉNÉRER LES CLÉS POUR LE CLIENT**

<div class="mb-md" id="bkmrk-wireguard-utilise-un"><div class="relative default font-sans text-base text-textMain dark:text-textMainDark selection:bg-super/50 selection:text-textMain dark:selection:bg-superDuper/10 dark:selection:text-superDark"><div class="min-w-0 break-words [word-break:break-word]"><div dir="auto"><div class="prose dark:prose-invert inline leading-normal break-words min-w-0 [word-break:break-word]">WireGuard utilise une paire de clés publique/privée pour l'authentification. 1. Accédez au répertoire de configuration de WireGuard : <div class="w-full md:max-w-[90vw]"><div class="codeWrapper text-textMainDark selection:!text-superDark selection:bg-superDuper/10 bg-offset dark:bg-offsetDark my-md relative flex flex-col rounded font-mono text-sm font-thin"><div class="-mt-xl"><div><div class="text-text-200 bg-background-300 py-xs px-sm inline-block rounded-br rounded-tl-[3px] font-thin">  
    </div></div><div class="pr-lg">`<span class="token token">cd</span> /etc/wireguard`</div></div></div></div>
2. Générez les clés : <div class="w-full md:max-w-[90vw]"><div class="codeWrapper text-textMainDark selection:!text-superDark selection:bg-superDuper/10 bg-offset dark:bg-offsetDark my-md relative flex flex-col rounded font-mono text-sm font-thin"><div class="-mt-xl"><div><div class="text-text-200 bg-background-300 py-xs px-sm inline-block rounded-br rounded-tl-[3px] font-thin">  
    </div></div><div class="pr-lg">`<span class="token token">umask</span> 077wg genkey <span class="token token operator">|</span> <span class="token token">tee</span> private.key <span class="token token operator">|</span> wg pubkey <span class="token token operator">></span> public.key`</div></div></div></div>
3. Vérifiez les clés générées : 
    - Clé privée : <div class="w-full md:max-w-[90vw]"><div class="codeWrapper text-textMainDark selection:!text-superDark selection:bg-superDuper/10 bg-offset dark:bg-offsetDark my-md relative flex flex-col rounded font-mono text-sm font-thin"><div class="-mt-xl"><div><div class="text-text-200 bg-background-300 py-xs px-sm inline-block rounded-br rounded-tl-[3px] font-thin">  
        </div></div><div class="pr-lg">`<span class="token token">cat</span> private.key`</div></div></div></div>
    - Clé publique : <div class="w-full md:max-w-[90vw]"><div class="codeWrapper text-textMainDark selection:!text-superDark selection:bg-superDuper/10 bg-offset dark:bg-offsetDark my-md relative flex flex-col rounded font-mono text-sm font-thin"><div class="-mt-xl"><div><div class="text-text-200 bg-background-300 py-xs px-sm inline-block rounded-br rounded-tl-[3px] font-thin">  
        </div></div><div class="pr-lg">`<span class="token token">cat</span> public.key`</div></div></div></div>
4. Conservez la clé publique, car elle devra être partagée avec le serveur WireGuard.

</div></div></div></div></div>## **ÉTAPE 3 : CRÉER LE FICHIER DE CONFIGURATION DU CLIENT**

<div class="mb-md" id="bkmrk-cr%C3%A9ez-un-fichier-de-"><div class="relative default font-sans text-base text-textMain dark:text-textMainDark selection:bg-super/50 selection:text-textMain dark:selection:bg-superDuper/10 dark:selection:text-superDark"><div class="min-w-0 break-words [word-break:break-word]"><div dir="auto"><div class="prose dark:prose-invert inline leading-normal break-words min-w-0 [word-break:break-word]">1. Créez un fichier de configuration pour l'interface WireGuard (par exemple `wg0.conf`) : <div class="w-full md:max-w-[90vw]"><div class="codeWrapper text-textMainDark selection:!text-superDark selection:bg-superDuper/10 bg-offset dark:bg-offsetDark my-md relative flex flex-col rounded font-mono text-sm font-thin"><div class="-mt-xl"><div><div class="text-text-200 bg-background-300 py-xs px-sm inline-block rounded-br rounded-tl-[3px] font-thin">  
    </div></div><div class="pr-lg">`<span class="token token">sudo</span> <span class="token token">nano</span> /etc/wireguard/wg0.conf`</div></div></div></div>
2. Ajoutez le contenu suivant au fichier (adaptez selon vos besoins) : <div class="w-full md:max-w-[90vw]"><div class="codeWrapper text-textMainDark selection:!text-superDark selection:bg-superDuper/10 bg-offset dark:bg-offsetDark my-md relative flex flex-col rounded font-mono text-sm font-thin"><div class="-mt-xl"><div><div class="text-text-200 bg-background-300 py-xs px-sm inline-block rounded-br rounded-tl-[3px] font-thin">  
    </div></div><div class="pr-lg">`[Interface]PrivateKey = <clé_privée_du_client> # Remplacez par la clé privée générée (fichier private.key)Address = 192.168.110.2/24          # Adresse IP privée du client dans le tunnel VPNDNS = 192.168.110.1                 # (Optionnel) Serveur DNS à utiliser via le VPN[Peer]PublicKey = <clé_publique_du_serveur> # Clé publique fournie par le serveur WireGuardEndpoint = <ip_publique_du_serveur>:51820 # Adresse IP ou nom de domaine et port du serveur WireGuardAllowedIPs = 0.0.0.0/0, ::/0          # Acheminer tout le trafic via le VPN`</div></div></div></div>
3. Remplacez `<clé_privée_du_client>` et `<clé_publique_du_serveur>` par les valeurs appropriées.
4. Sauvegardez et fermez le fichier (`Ctrl+O`, puis `Ctrl+X`).

</div></div></div></div></div>## **ÉTAPE 4 : ACTIVER ET TESTER LA CONNEXION**

<div class="mb-md" id="bkmrk-activez-l%27interface-"><div class="relative default font-sans text-base text-textMain dark:text-textMainDark selection:bg-super/50 selection:text-textMain dark:selection:bg-superDuper/10 dark:selection:text-superDark"><div class="min-w-0 break-words [word-break:break-word]"><div dir="auto"><div class="prose dark:prose-invert inline leading-normal break-words min-w-0 [word-break:break-word]">1. Activez l'interface WireGuard : <div class="w-full md:max-w-[90vw]"><div class="codeWrapper text-textMainDark selection:!text-superDark selection:bg-superDuper/10 bg-offset dark:bg-offsetDark my-md relative flex flex-col rounded font-mono text-sm font-thin"><div class="-mt-xl"><div><div class="text-text-200 bg-background-300 py-xs px-sm inline-block rounded-br rounded-tl-[3px] font-thin">  
    </div></div><div class="pr-lg">`<span class="token token">sudo</span> wg-quick up wg0`</div></div></div></div>
2. Vérifiez que l'interface est active : <div class="w-full md:max-w-[90vw]"><div class="codeWrapper text-textMainDark selection:!text-superDark selection:bg-superDuper/10 bg-offset dark:bg-offsetDark my-md relative flex flex-col rounded font-mono text-sm font-thin"><div class="-mt-xl"><div><div class="text-text-200 bg-background-300 py-xs px-sm inline-block rounded-br rounded-tl-[3px] font-thin">  
    </div></div><div class="pr-lg">`<span class="token token">ip</span> a show wg0`</div></div></div></div>
3. Testez la connectivité en pingant une adresse IP via le VPN (par exemple, l'adresse IP privée du serveur ou une ressource accessible uniquement via le VPN) : <div class="w-full md:max-w-[90vw]"><div class="codeWrapper text-textMainDark selection:!text-superDark selection:bg-superDuper/10 bg-offset dark:bg-offsetDark my-md relative flex flex-col rounded font-mono text-sm font-thin"><div class="-mt-xl"><div><div class="text-text-200 bg-background-300 py-xs px-sm inline-block rounded-br rounded-tl-[3px] font-thin">  
    </div></div><div class="pr-lg">`<span class="token token">ping</span> <span class="token token">192.168</span>.110.1`</div></div></div></div>

</div></div></div></div></div><div class="mb-md" id="bkmrk-pour-d%C3%A9sactiver-la-c"><div class="relative default font-sans text-base text-textMain dark:text-textMainDark selection:bg-super/50 selection:text-textMain dark:selection:bg-superDuper/10 dark:selection:text-superDark"><div class="min-w-0 break-words [word-break:break-word]"><div dir="auto"><div class="prose dark:prose-invert inline leading-normal break-words min-w-0 [word-break:break-word]">1. <p class="callout info">Pour désactiver la connexion VPN :</p>
    
    <div class="w-full md:max-w-[90vw]"><div class="codeWrapper text-textMainDark selection:!text-superDark selection:bg-superDuper/10 bg-offset dark:bg-offsetDark my-md relative flex flex-col rounded font-mono text-sm font-thin"><div class="-mt-xl"><div class="pr-lg">`<span class="token token">sudo</span> wg-quick down wg0`</div></div></div></div>

</div></div></div></div></div>## **ÉTAPE 5 : ACTIVER LE DÉMARRAGE AUTOMATIQUE (OPTIONNEL)**

<div class="mb-md" id="bkmrk-si-vous-souhaitez-qu"><div class="relative default font-sans text-base text-textMain dark:text-textMainDark selection:bg-super/50 selection:text-textMain dark:selection:bg-superDuper/10 dark:selection:text-superDark"><div class="min-w-0 break-words [word-break:break-word]"><div dir="auto"><div class="prose dark:prose-invert inline leading-normal break-words min-w-0 [word-break:break-word]">Si vous souhaitez que l'interface VPN démarre automatiquement au démarrage du système : 1. Activez le service WireGuard associé à `wg0` : <div class="w-full md:max-w-[90vw]"><div class="codeWrapper text-textMainDark selection:!text-superDark selection:bg-superDuper/10 bg-offset dark:bg-offsetDark my-md relative flex flex-col rounded font-mono text-sm font-thin"><div class="-mt-xl"><div><div class="text-text-200 bg-background-300 py-xs px-sm inline-block rounded-br rounded-tl-[3px] font-thin">  
    </div></div><div class="pr-lg">`<span class="token token">sudo</span> systemctl <span class="token token">enable</span> wg-quick@wg0.service`</div></div></div></div>
2. Désactivez-le si nécessaire : <div class="w-full md:max-w-[90vw]"><div class="codeWrapper text-textMainDark selection:!text-superDark selection:bg-superDuper/10 bg-offset dark:bg-offsetDark my-md relative flex flex-col rounded font-mono text-sm font-thin"><div class="-mt-xl"><div><div class="text-text-200 bg-background-300 py-xs px-sm inline-block rounded-br rounded-tl-[3px] font-thin">  
    </div></div><div class="pr-lg">`<span class="token token">sudo</span> systemctl disable wg-quick@wg0.service`</div></div></div></div>

</div></div></div></div></div>## **NOTES IMPORTANTES**

<div class="mb-md" id="bkmrk-cl%C3%A9-publique-du-clie"><div class="relative default font-sans text-base text-textMain dark:text-textMainDark selection:bg-super/50 selection:text-textMain dark:selection:bg-superDuper/10 dark:selection:text-superDark"><div class="min-w-0 break-words [word-break:break-word]"><div dir="auto"><div class="prose dark:prose-invert inline leading-normal break-words min-w-0 [word-break:break-word]">- **Clé publique du client** : Vous devrez fournir cette clé au serveur WireGuard pour qu'il puisse autoriser votre connexion. 
    - Pour afficher la clé publique du client, utilisez : <div class="w-full md:max-w-[90vw]"><div class="codeWrapper text-textMainDark selection:!text-superDark selection:bg-superDuper/10 bg-offset dark:bg-offsetDark my-md relative flex flex-col rounded font-mono text-sm font-thin"><div class="-mt-xl"><div><div class="text-text-200 bg-background-300 py-xs px-sm inline-block rounded-br rounded-tl-[3px] font-thin">  
        </div></div><div class="pr-lg">`<span class="token token">cat</span> /etc/wireguard/public.key`</div></div></div></div>
- **Sécurité des clés** : Assurez-vous que les fichiers contenant vos clés privées sont protégés avec des permissions strictes. <div class="w-full md:max-w-[90vw]"><div class="codeWrapper text-textMainDark selection:!text-superDark selection:bg-superDuper/10 bg-offset dark:bg-offsetDark my-md relative flex flex-col rounded font-mono text-sm font-thin"><div class="-mt-xl"><div><div class="text-text-200 bg-background-300 py-xs px-sm inline-block rounded-br rounded-tl-[3px] font-thin">  
    </div></div><div class="pr-lg">`<span class="token token">chmod</span> <span class="token token">600</span> /etc/wireguard/private.key /etc/wireguard/wg0.conf`</div></div></div></div>

</div><div class="prose dark:prose-invert inline leading-normal break-words min-w-0 [word-break:break-word]"></div></div></div></div></div>Dans le fichier /etc/wireguard/wg0.conf, vous pouvez rajouter ceci à la fin si vous voulez maintenir une connexion permanente au vpn <span style="background-color: rgb(224, 62, 45);">PersistentKeepalive = 25</span>

<div class="mb-md" id="bkmrk-"><div class="relative default font-sans text-base text-textMain dark:text-textMainDark selection:bg-super/50 selection:text-textMain dark:selection:bg-superDuper/10 dark:selection:text-superDark"><div class="min-w-0 break-words [word-break:break-word]"><div dir="auto"><div class="prose dark:prose-invert inline leading-normal break-words min-w-0 [word-break:break-word]"></div></div></div>  
</div></div><div class="prose dark:prose-invert inline leading-normal break-words min-w-0 [word-break:break-word]" id="bkmrk-cela-envoie-un-paque">Cela envoie un paquet keepalive toutes les 25 secondes pour maintenir la connexion active.</div><div class="prose dark:prose-invert inline leading-normal break-words min-w-0 [word-break:break-word]" id="bkmrk--1"></div><div class="mb-md" id="bkmrk-avec-ces-%C3%A9tapes%2C-vot"><div class="relative default font-sans text-base text-textMain dark:text-textMainDark selection:bg-super/50 selection:text-textMain dark:selection:bg-superDuper/10 dark:selection:text-superDark"><div class="min-w-0 break-words [word-break:break-word]"><div dir="auto"><div class="prose dark:prose-invert inline leading-normal break-words min-w-0 [word-break:break-word]">Avec ces étapes, votre machine Linux sera configurée comme un client VPN WireGuard et pourra se connecter à un serveur WireGuard distant pour sécuriser ses communications réseau !</div></div></div></div></div><div class="mt-sm flex items-center justify-between" id="bkmrk--2"><div class="-ml-sm flex items-center gap-xs"><div>  
</div></div><div class="flex items-center gap-x-xs"><div class="flex items-center gap-xs border-borderMain/50 ring-borderMain/50 divide-borderMain/50 dark:divide-borderMainDark/50  dark:ring-borderMainDark/50 dark:border-borderMainDark/50 bg-transparent">  
</div><div class="">  
</div><div class="hidden rounded border p-xs md:block border-borderMain/50 ring-borderMain/50 divide-borderMain/50 dark:divide-borderMainDark/50  dark:ring-borderMainDark/50 dark:border-borderMainDark/50 bg-transparent">  
</div></div></div>

# Ajout de routes statiques

## Exemple de configuration Pour une config Netplan

# Configuration des routes réseau

## Netplan (`/etc/netplan/`)

Les routes doivent être définies directement sous les paramètres de l'interface de sortie souhaitée. Il est important de choisir le bon fichier netplan avant d'y placer vos routes.

---

### Configuration avec IP statique

```yaml
network:
  version: 2
  renderer: networkd
  ethernets:
    enp114s0:
      addresses:
        - 192.168.249.8/24
      gateway4: 192.168.249.1
      nameservers:
        addresses:
          - 8.8.8.8
          - 8.8.4.4
      dhcp4: no
      dhcp6: no

```

---

### Configuration avec route statique (IP statique)

```yaml
network:
  version: 2
  renderer: networkd
  ethernets:
    ens33:
      addresses:
        - 192.168.1.100/24
      routes:
        - to: 192.168.1.82/32
          via: 192.168.1.1
      nameservers:
        addresses:
          - 8.8.8.8
          - 1.1.1.1

```

---

### Configuration avec route statique (DHCP)

```yaml
network:
  version: 2
  renderer: networkd
  ethernets:
    ens33:
      dhcp4: yes
      routes:
        - to: 192.168.1.82/32
          via: 192.168.1.1

```

---

### Explication des attributs

- **`to`** : l'adresse IP de destination à atteindre (ex: `192.168.1.82/32` pour une IP précise, ou `192.168.45.0/24` pour un réseau entier).
- **`via`** : la gateway permettant d'atteindre la destination. Dans le cas d'un réseau sans gateway, on indiquera l'adresse IP de l'interface de sortie.

---

### Cas particulier : route sans gateway (`on-link: true`)

Lorsque vous avez **deux interfaces sur le même subnet**, le kernel peut ne pas savoir quelle interface utiliser pour joindre une IP spécifique. Dans ce cas, `on-link: true` combiné à une table de routage dédiée permet de forcer l'interface de sortie.

`on-link: true` indique au kernel que la destination est directement accessible sur le lien réseau, sans gateway intermédiaire. La valeur de `via` sera alors l'IP de destination elle-même.

```yaml
network:
  version: 2
  renderer: networkd
  ethernets:
    enxdceae7dd1709:
      addresses:
        - 192.168.1.244/24
      routes:
        - to: 192.168.1.15/32
          via: 192.168.1.15
          on-link: true
          table: 100
        - to: 192.168.1.22/32
          via: 192.168.1.22
          on-link: true
          table: 100
      routing-policy:
        - to: 192.168.1.15/32
          table: 100
          priority: 50
        - to: 192.168.1.22/32
          table: 100
          priority: 50
      dhcp4: false

```

> **Note :** Plus la valeur de `priority` est basse, plus la règle est prioritaire. Une priorité de `50` sera donc appliquée avant une règle à `100`.

> **Attention :** Cette configuration ne résout pas le cas où l'IP de destination est aussi assignée localement sur une autre interface de la même machine. Dans ce cas, le kernel traitera toujours le paquet en local.

---

## `/etc/network/interfaces`

Ajouter la commande suivante après la configuration réseau dans le fichier `/etc/network/interfaces` :

```
up ip route add <réseau_destination>/<masque> via <gateway_ou_interface>

```

**Exemple :**

```
up ip route add 192.168.45.0/24 via 192.168.6.1

```

# Tunneling SSH

Le protocol SSH nous permet de créer des tunnels pour accéder à des appareil distant, à condition d'avoir une connexion SSH sur un appareil au sein du réseau.



#### **SSH Local Port Forwarding (-L)**

- Concept : Relie un port spécifique de votre machine à un port spécifique d'une machine distante via le serveur SSH.

- Commande :

```
ssh -L [PORT_LOCAL]:[IP_DESTINATION]:[PORT_DESTINATION] utilisateur@serveur_ssh
```

- Exemple : `ssh -L 8080:192.168.1.1:80 user@remote`
  - **Accès** : Tapez http://localhost:8080 pour voir l'interface du routeur 192.168.1.1
 

#### **SSH Dynamic Port Forwarding (-D)**

- Concept : Transforme votre connexion SSH en un Proxy SOCKS. Au lieu de viser une seule IP, votre navigateur peut atteindre n'importe quelle IP du réseau distant.

- Commande:

  
```
ssh -D [PORT_PROXY] utilisateur@serveur_ssh
```

- Exemple : `ssh -D 1080 user@remote` Vous pouvez aussi le lancer en arrière plan avec la commande `ssh -f -N -D 1080 utilisateur@serveur_ssh`
  - `-f` : Met SSH en arrière plan
  - `-N` : N'ouvre pas de termanl distant (uniquement le tunnel)

Sur macOS, une fois le tunnel ouvert vous pouvez ouvrir un navigateur avec :
```
open -a "Google Chrome" --args --proxy-server="socks5://localhost:1080"
```
- Ça fonctionne avec tous les navigateurs basé sur chronium comme Arc par exemple.
    - Exemple avec Arc `open -a "Arc" --args --proxy-server="socks5://localhost:1080"`
 
Une fois le nagivateur ouvert, tapez juste l'ip voulue pour y accéder. Si vous voulez changer le port ne le changer pas sur la commande faites juste `adresse_ip:port`. 

Le port 1080 sert uniquement de porte d'entrée.

- Pour fermer le tunnel vous pouvez utiliser la commande `pkill -f "ssh -D 1080"` qui stoppera tous les commandes contenant `ssh -D 1080`

# Ping

La commande ping utilise le protocole ICMP pour vérifier la connectivité avec une machine distante.


### 📋 Récapitulatif des options `ping` essentielles

| Option | Nom officiel | Description & Usage | Exemple |
| :--- | :--- | :--- | :--- |
| **`-c`** | **Count** | Arrête le ping après un nombre précis de paquets. Indispensable pour les scripts. | `ping -c 4 8.8.8.8` |
| **`-I`** | **Interface** | Force le départ du paquet via une interface (eth0) ou une adresse IP source. | `ping -I wlan0 1.1.1.1` |
| **`-i`** | **Interval** | Définit le délai entre chaque envoi (en secondes). Par défaut : 1s. | `ping -i 0.2 10.0.0.1` |
| **`-s`** | **Size** | Définit la taille du paquet en octets (utile pour tester le MTU). | `ping -s 1472 8.8.8.8` |
| **`-W`** | **Timeout** | Temps d'attente max pour une réponse (en secondes) avant de considérer l'échec. | `ping -W 2 192.168.1.1` |
| **`-f`** | **Flood** | Envoie les paquets au maximum de la capacité réseau (nécessite `sudo`). | `sudo ping -f 1.1.1.1` |
| **`-a`** | **Audible** | Émet un bip sonore (PC speaker) à chaque réponse reçue. | `ping -a 192.168.1.50` |
| **`-n`** | **Numeric** | Désactive la résolution DNS pour un démarrage instantané. | `ping -n google.com` |

# Configuration /etc/network/interfaces

Sur debian par défaut les paramètres de configuration réseau se trouve dans /etc/network/interfaces.

Voici un exemple de configuration statique.


#### Activation au branchement/détection
allow-hotplug ens18

#### Configuration manuelle (static)
```
iface ens18 inet static
    address 192.168.1.50
    netmask 255.255.255.0
    gateway 192.168.1.1
    # Optionnel : serveurs DNS (Google et Cloudflare ici)
    dns-nameservers 8.8.8.8 1.1.1.1
```

# Iptables

Iptables est un utilitaire permettant de maniper le firewall natif de linux (netfilter).


Ce guide récapitule les commandes essentielles pour administrer un pare-feu Linux.

---

Pour changer les policies par défaut on peut utiliser les commandes:


    sudo iptables -P INPUT DROP  
    sudo iptables -P FORWARD DROP  
    sudo iptables -P OUTPUT ACCEPT  

Tout trafic ne s'appliquant pas à une règle présente suivra par défaut la policy.

### 1. Consultation des règles
| Commande | Description |
| :--- | :--- |
| `iptables -L` | Liste les règles de la table **filter** (par défaut). |
| `iptables -L -n -v` | Liste détaillée (octets, paquets) sans résolution DNS. |
| `iptables -L --line-numbers` | Affiche les numéros de ligne (utile pour supprimer). |
| `iptables -S` | Affiche les règles sous forme de commandes brutes. |
| `iptables -t nat -L -n -v` | Liste les règles de la table **NAT** (redirections). |

---

### 2. Gestion des règles (Ajout/Suppression)
> ⚠️ **Note :** L'ordre des règles est crucial, la lecture se fait de haut en bas.

* **Ajouter à la fin (`-A`)** :  
  `iptables -A INPUT -p tcp --dport 80 -j ACCEPT`
* **Insérer au début ou à une ligne précise (`-I`)** :  
  `iptables -I INPUT 1 -i lo -j ACCEPT`
* **Supprimer par numéro de ligne (`-D`)** :  
  `iptables -D INPUT 3`
* **Vider toutes les règles d'une table (`-F`)** :  
  `iptables -F`

---

### 3. Configuration du NAT (Table NAT)
Le NAT s'applique toujours avec l'option `-t nat`.

### Partage de connexion (Masquerade / SNAT)
Permet aux hôtes internes (LAN) d'accéder à Internet via l'IP du pare-feu.
```bash
iptables -t nat -A POSTROUTING -o [interface_WAN] -j MASQUERADE