Par défaut, un serveur OpenVPN écoute sur le port UDP 1194 et un serveur web sur les port TCP 80 et 443.
Le port UDP 1194 peut être bloqué par certains proxy entreprise, d’école ou autre réseau privé ce qui peut empêcher l’accès à son serveur VPN. Pour outre passer cette restriction, le serveur VPN peut être configurer sur le port TCP 443. Mais, si le serveur héberge aussi un serveur web écoutant aussi sur le port 443 cela ne va pas être possible en l’état car un seul port réservé pour un service.
Sur le blog, il a déjà été vue comment partager le port 443 entre SSH et un serveur web avec SSLH. Ici sera utilisé une option native à OpenVPN : port-share.
De plus, le fait de passer sur le protocole TCP cela apporte une meilleur stabilité de la connexion pour les faibles débits et évite l’erreurs du type :
Error: « Replay-window backtrack occurred«
ensuite cette erreur créée les erreurs suivantes :
read UDP [EHOSTUNREACH]: No route to host (code=113)
write UDP []: Network is unreachable (code=101)
État du réseau : not connected
Dans le cas présent, c’est OpenVPN qui fait office de multiplexeur et suivant si la requête est une demande d’accès au VPN sur le port 443 ou au serveur web sur le port 1443 (ou autre).
Partager le port 443 entre OpenVPN et un serveur web
- Éditer le fichier de configuration du serveur, exemple un OpenVPN sous Yunohost :
nano /etc/openvpn/yunohost.conf
- Modifier le protocole UDP part TCP :
proto tcp
- Indiquer le port :
port 443
port-share 127.0.0.1 1443
nano var/www/openvpn/domaine.tld.ovpn
- Changer le port d’écoute :
remote domaine.tld 443
- Nginx :
sed -i -e "s/443/1443/g" /etc/nginx/conf.d/*.conf
sed -i -e "s/443/1443/g" /etc/apache2/ports.conf
- Serveur web Nginx :
systemctl restart nginx
systemctl restart apache2
systemctl restart openvpn
systemctl restart openvpn@yunohost.service
Test de connexion du serveur OpenVPN et du serveur web sur le port 443
- Test du serveur OpenVPN :
sudo openvpn domaine.tld.ovpn
Attention tout de même, lorsque le port 443 est ainsi partagé, le serveur https aura l’impression que toutes les requêtes qu’il reçoit viennent de la machine hôte. Du coup les mesures de sécurité du type la partie admin n’est disponible qu’en local/depuis une certaine IP deviennent inefficaces.
Merci pour ce petit mémo, en revanche la manip m’a rendu complètement inopérant mon site et sans pouvoir me connecter au VPN. Car si je comprends bien, on passe par le VPN pour se conncter au site web. Du coup, même de l’extérieur il devient inaccessible sauf si on est connecter a son VPN ?
Bonjour et merci pour le tuto.
Cependant, même soucis que DEDROD, impossible pour mes sires en SSL d’être accessible depuis le changement décris plus haut.
OpenVPN n’est aussi pas content, il renvoie : Sun May 10 12:29:54 2020 us=108213 83.59.223.87:39624 Non-OpenVPN client protocol detected
J’ai l’impression qu’openVPN a changé depuis 2016, voire qu’il faille activer d’autres options…
Au plaisir !