# Déployer un service OpenVPN

Cette image garantit uniquement le bon fonctionnement des fonctionnalités de base. Si vous avez la capacité de configurer vous-même, il est recommandé de le faire ou de vous référer à la méthode d'implémentation de cette image pour le réaliser. Avant de l'utiliser, vous devez avoir des connaissances de base sur Linux et Docker. Cette image a été testée avec succès sur Debian 9. Ce guide explique comment l'utiliser sur Debian 9, mais il est généralement applicable à d'autres systèmes comme Ubuntu. Le port par défaut pour ce service est 1190/UDP, veuillez vous assurer que cette règle est autorisée dans votre pare-feu.

## Prérequis

Vous devez également effectuer les modifications suivantes sur votre serveur, exécutez la commande :

```bash
echo net.ipv4.ip_forward=1 >>/etc/sysctl.conf
sysctl -p
```

Si **`ufw` est installé** sur votre serveur, vous devez également ajouter le contenu suivant au début du fichier `/etc/ufw/before.rules`. Modifiez `eth0` et le sous-réseau en fonction de l'interface et de la configuration réelles de votre serveur. Notez que cela doit être ajouté avant les règles `*filter` (le cas échéant).

```bash
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 172.27.27.0/24 -o eth0 -j MASQUERADE
COMMIT
```

Modifiez la configuration suivante dans `/etc/default/ufw` pour la définir sur `ACCEPT`.

```bash
DEFAULT_FORWARD_POLICY="ACCEPT"
```

Enfin, exécutez la commande suivante pour redémarrer le service de pare-feu ufw sur le serveur.

```bash
ufw reload
```

Si votre serveur **n'a pas `ufw` d'installé**, assurez-vous que la règle `FORWARD` d'iptables est sur `ACCEPT`, exécutez la commande suivante.

```{attention}
Après un redémarrage du serveur, vous devrez peut-être réappliquer cette règle. Il est recommandé d'installer ufw.
```

```bash
iptables -P FORWARD ACCEPT
```

## Initialisation de la configuration

Maintenant, créons un répertoire pour stocker la configuration de notre service OpenVPN.

```bash
mkdir -p ~/lamda-openvpn-server
```

Ensuite, exécutez la commande suivante pour initialiser le service OpenVPN.

```bash
docker run -it --rm --privileged --net host -v ~/lamda-openvpn-server:/etc/openvpn rev1si0n/openvpn ovpn-server-new
```

Attendez la fin de l'exécution de la commande. Vous pouvez maintenant voir la configuration du service dans le répertoire `~/lamda-openvpn-server`. Le fichier de configuration est `config.ovpn`. Vous pouvez l'ouvrir avec un éditeur de texte, il est recommandé de ne modifier que les champs suivants.

```ini
# Le sous-réseau et le masque du VPN
server 172.27.27.0 255.255.255.0
# Le port du service VPN
port 1190

# Ou si vous avez besoin qu'une interface réseau spécifique sur le serveur soit accessible par les clients VPN
# Vous pouvez également ajouter une route, mais notez que vous ne pourrez accéder qu'à l'adresse IP de l'hôte actuel sur ce sous-réseau
# Si vous avez besoin d'un accès complet à ce sous-réseau pour les clients, des configurations supplémentaires sont nécessaires
push "route 192.168.68.0 255.255.255.0"

# Modifiez 114 par le serveur DNS de votre choix
push "dhcp-option DNS 114.114.114.114"
```

## Création des identifiants de connexion client

Une fois l'édition terminée, nous allons maintenant créer un client. Vous pouvez remplacer `myname` par le nom de votre choix, mais il ne doit pas être dupliqué.

```bash
docker run -it --rm --privileged --net host -v ~/lamda-openvpn-server:/etc/openvpn rev1si0n/openvpn ovpn-client-new myname
```

Une fois la création terminée, utilisez les commandes suivantes pour obtenir les identifiants de connexion de ce client.

```bash
# Remarque : L'adresse IP dans la configuration est l'adresse IP publique actuelle obtenue automatiquement. Si elle est incorrecte, vous devrez la modifier manuellement.
#
# Génère la configuration ovpn et la redirige vers le fichier myname.ovpn, qui peut être utilisé par des applications comme OpenVPN-Connect
docker run -it --rm --privileged --net host -v ~/lamda-openvpn-server:/etc/openvpn rev1si0n/openvpn ovpn-client-profile ovpn myname >myname.ovpn
# Génère un OpenVPNProfile pour lamda, utilisable directement dans lamda
# Il contient une section commentée properties.local. Vous pouvez copier la configuration openvpn.*
# de cette section dans /data/usr/properties.local pour activer la connexion VPN automatique.
docker run -it --rm --privileged --net host -v ~/lamda-openvpn-server:/etc/openvpn rev1si0n/openvpn ovpn-client-profile lamda myname
```

## Révocation des identifiants client

Si vous devez révoquer les identifiants d'un client, exécutez la commande suivante. Après la révocation, il peut être nécessaire de redémarrer le service OpenVPN.

```bash
docker run -it --rm --privileged --net host -v ~/lamda-openvpn-server:/etc/openvpn rev1si0n/openvpn ovpn-client-revoke myname
```

## Démarrage du service OpenVPN

Vous pouvez maintenant exécuter la commande suivante pour démarrer le service OpenVPN en premier plan. Cela vous permettra de voir directement les journaux de connexion des clients et de diagnostiquer les erreurs.

```bash
docker run -it --rm --name openvpn-server --privileged --net host -v ~/lamda-openvpn-server:/etc/openvpn rev1si0n/openvpn run
```

Une fois que vous avez confirmé que tout fonctionne correctement, il est recommandé de l'exécuter en arrière-plan. Utilisez cette commande pour démarrer le service en arrière-plan.

```bash
docker run -d --rm --name openvpn-server --privileged --net host -v ~/lamda-openvpn-server:/etc/openvpn rev1si0n/openvpn run
```

## Documents de référence

Documentation de base : https://openvpn.net/community-resources/reference-manual-for-openvpn-2-4/

Configuration du routage : https://community.openvpn.net/openvpn/wiki/BridgingAndRouting