apt-get install openvpn
cp -r /usr/share/easy-rsa/ /etc/openvpn
export KEY_COUNTRY="FR" export KEY_PROVINCE="FR" export KEY_CITY="FR" export KEY_ORG="exemple.com" export KEY_EMAIL="exemple@exemple.com"
./easyrsa init-pki
./easyrsa build-ca nopass
./easyrsa gen-req myserver nopass
./easyrsa sign-req server myserver
./easyrsa gen-dh
openvpn --genkey --secret ta.key
cd /etc/openvpn/easy-rsa/pki mv ca.crt dh.pem private/myserver.key issued/myserver.crt /etc/openvpn/server/
mkdir /etc/openvpn/jail
Exemple de configuration pour un VPN en tun utilisant le port 443 :
# Serveur TCP/443 mode server proto tcp port 443 dev tun # Clés et certificats ca ca.crt cert myserver.crt key myserver.key dh dh.pem tls-auth ta.key 0 cipher AES-256-CBC # Réseau server 10.0.0.0 255.255.255.0 keepalive 10 120 duplicate-cn client-to-client # Sécurité user nobody group nogroup chroot /etc/openvpn/jail persist-key persist-tun comp-lzo # Log verb 5 mute 20 status openvpn-status.log log-append /var/log/openvpn.log
./easyrsa gen-req client1
./easyrsa sign-req client client1
cp pki/ca.crt /etc/openvpn/client/ cp pki/issued/client1.crt /etc/openvpn/client/ cp pki/private/client1.key /etc/openvpn/client/
Exemple d'un fichier de configuration client :
# Client client dev tun proto tcp-client remote 93.184.216.34 443 resolv-retry infinite cipher AES-256-CBC auth SHA512 auth-user-pass persist-tun persist-key remote-cert-tls server tls-client comp-lzo <ca> -----BEGIN CERTIFICATE----- XXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXX -----END CERTIFICATE----- </ca> <cert> -----BEGIN CERTIFICATE---- XXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXX -----END CERTIFICATE----- </cert> <key> -----BEGIN ENCRYPTED PRIVATE KEY----- XXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXX -----END ENCRYPTED PRIVATE KEY----- </key> key-direction 1 <tls-auth> -----BEGIN OpenVPN Static key V1----- XXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXX -----END OpenVPN Static key V1----- </tls-auth>
Redémarrer le serveur si l'interface tun0 n'est toujours pas présente
On effectuera ici une configuration sous Nftables pour permettre la connexion à un VPN utilisant l'interface tun et le port 443
table inet filter { chain input { type filter hook input priority 0; policy accept; ../.. Reste configuration ../.. tcp dport https accept comment "Allow HTTPS" log prefix "Nftables_drop " drop } } table ip nat { chain prerouting { type nat hook prerouting priority -100; policy accept; } chain postrouting { type nat hook postrouting priority 100; policy accept; ip saddr 10.0.0.0/24 oif "eth0" masquerade } }