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
Image may be NSFW.
Clik here to view.