# Un serveur OpenVPN avec Docker

#### [https://memo-linux.com/un-serveur-openvpn-en-moins-de-5-minutes-avec-docker/](https://memo-linux.com/un-serveur-openvpn-en-moins-de-5-minutes-avec-docker/)

---

L’outil de virtualisation **[Docker](https://memo-linux.com/?s=docker)** est vraiment magique pour mettre en place très rapidement des services comme un petit serveur **[vpn](https://memo-linux.com/category/vpn/)** avec **[OpenVPN](https://memo-linux.com/?s=OpenVPN)**.

[![logo_openvpn_docker](https://memo-linux.com/wp-content/uploads/2016/06/logo_openvpn_docker.png)](https://memo-linux.com/wp-content/uploads/2016/06/logo_openvpn_docker.png)

Pour faciliter la mise en œuvre d’un petit serveur VPN, **[Kyle Manna](https://github.com/kylemanna)** met à disposition une image Docker basée sur OpenVPN avec **[EasyRSA PKI CA](https://github.com/OpenVPN/easy-rsa)**.

Caractéristique de l’image Docker **[docker-openvpn](https://github.com/kylemanna/docker-openvpn)** :

- Clé **[Diffie-Hellman](https://fr.wikipedia.org/wiki/%C3%89change_de_cl%C3%A9s_Diffie-Hellman)** sur 2048 bit
- Génération d’une clé privée
- Un certificat auto signé correspondant à la clé privée pour le serveur OpenVPN
- Certificat et clé RSA 2048 bit
- Une clé d’authentification TLS de sécurité HMAC
- Topology réseau net30
- Réseau 192.168.255.0/24
- Serveur DNS par défaut 8.8.8.8 et 8.8.4.4
- Interface réseau TUN

---

- Téléchargement de l’image Docker :

```
docker pull kylemanna/openvpn
```

- Préparation du serveur OpenVPN : 
    - Démarrage de l’environnement **[busybox](https://fr.wikipedia.org/wiki/BusyBox)** pour préparer les fichiers de configration d’OpenVPn:
    
    
    ```
    docker run --name ovpn-data -v /etc/openvpn busybox
    ```
    
    
    - Génération des des fichiers de configuration :
    
    
    ```
    docker run --volumes-from ovpn-data --rm kylemanna/openvpn ovpn_genconfig -u udp://VPN.SERVERNAME.COM
    ```
    
    
    - Génération des clés RSA et DH avec *pass phrase* :
    
    
    ```
    docker run --volumes-from ovpn-data --rm -it kylemanna/openvpn ovpn_initpki
    ```
- Démarrage du serveur OpenVPN :

```
docker run --volumes-from ovpn-data -d -p 1194:1194/udp --cap-add=NET_ADMIN kylemanna/openvpn
```

- Création d’un fichier client pour OpenVPN sans mot de passe :

```
docker run --volumes-from ovpn-data --rm -it kylemanna/openvpn easyrsa build-client-full client-bureau nopass
```

```
docker run --volumes-from ovpn-data --rm kylemanna/openvpn ovpn_getclient client-bureau > client-bureau.ovpn
```

- Test d’accès au serveur OpenVPN à partir d’un poste client GNU/linux :

```
openvpn --config client-bureau.ovpn
```

# Personnaliser les serveurs DNS

- Identifier le numéro d’ID du conteneur :


```
docker ps
```

```
CONTAINER ID  IMAGE         COMMAND     CREATED      STATUS      PORTS                     
fd45d4ace481  68fbf9e45ab5  "ovpn-data"  2 weeks ago  Up 13 days  0.0.0.0:1194->1194/udp

```

- Se connecter au conteneur :


```
docker exec -i -t fd45d4ace481 /bin/bash
```

- Editer le fichier `openvpn.conf` :


```
vi openvpn.conf
```

- Modifier les serveurs DNS, exemple avec ceux d’**[OpenNIC](https://www.opennicproject.org/)** :


```
push dhcp-option DNS 37.187.0.40
```

- Enregistrer les modifications avec la combinaison de touches **:wq!**
- Se déconnecter du conteneur :


```
exit
```

- Redémarrer le conteneur :


```
docker stop fd45d4ace481
docker start fd45d4ace481
```