J'essaie de configurer OpenVPN pour écouter sur le port 443, puis transmettre tout le trafic HTTPS à Apache, en utilisant l' port-share
option. Les extraits de configuration pertinents sont les suivants:
OpenVPN
local ${PUBLIC_IP}
port 443
port-share localhost 443
Apache avec SSL
Listen localhost:443
Mon client OpenVPN se connecte très bien, mais lors de l'ouverture de la page activée HTTPS, j'obtiens des erreurs. Firefox dit:
SSL a reçu un enregistrement dépassant la longueur maximale autorisée.
(Code d'erreur: ssl_error_rx_record_too_long)
Curl dit
curl: (35) erreur: 140770FC: routines SSL: SSL23_GET_SERVER_HELLO: protocole inconnu
La demande se termine sur Apache, car je vois dans les journaux d'erreurs les messages suivants:
[Wed Oct 06 01:10:20 2010] [error] [client 127.0.0.1] Invalid method in request \x16\x03\x01
[Wed Oct 06 01:11:04 2010] [error] [client 127.0.0.1] Invalid method in request \x16\x03\x01
[Wed Oct 06 01:11:51 2010] [error] [client 127.0.0.1] Invalid method in request \x16\x03\x01
L'entrée de messages pour une connexion HTTPS est
Oct 6 01:13:21 ns1 openvpn[20154]: Re-using SSL/TLS context
Oct 6 01:13:21 ns1 openvpn[20154]: LZO compression initialized
Oct 6 01:13:21 ns1 openvpn[20154]: Control Channel MTU parms [ L:1544 D:140 EF:40 EB:0 ET:0 EL:0 ]
Oct 6 01:13:21 ns1 openvpn[20154]: Data Channel MTU parms [ L:1544 D:1450 EF:44 EB:135 ET:0 EL:0 AF:3/1 ]
Oct 6 01:13:21 ns1 openvpn[20154]: Local Options hash (VER=V4): 'c0103fa8'
Oct 6 01:13:21 ns1 openvpn[20154]: Expected Remote Options hash (VER=V4): '69109d17'
Oct 6 01:13:21 ns1 openvpn[20154]: TCP connection established with ${CLIENT_IP}:56203
Oct 6 01:13:21 ns1 openvpn[20154]: TCPv4_SERVER link local: [undef]
Oct 6 01:13:21 ns1 openvpn[20154]: TCPv4_SERVER link remote: ${CLIENT_IP}:56203
Oct 6 01:13:21 ns1 openvpn[20154]: ${CLIENT_IP}:56203 Non-OpenVPN client protocol detected
Oct 6 01:13:21 ns1 openvpn[20154]: TCP/UDP: Closing socket
Utilisation de httpd-2.2.3-43.el5.centos et openvpn-2.1.1-2.el5.
Que dois-je faire pour que le partage de port fonctionne?
Mise à jour : utilisation
port 443
port-share localhost 10443
et
Listen localhost:10443
ça ne fait aucune différence.
Mise à jour 2 : sortie de certaines commandes
[root@ns1 ~]# openvpn --help | grep port-share
--port-share host port : When run in TCP mode, proxy incoming HTTPS sessions
[root@ns1 ~]# netstat -nltp | grep 443
tcp 0 0 127.0.0.1:10443 0.0.0.0:* LISTEN 20088/httpd
tcp 0 0 ${PUBLIC_IP}:443 0.0.0.0:* LISTEN 20066/openvpn
la source
port-share localhost 443
. J'ai essayéport-share localhost 10443
, mais ça n'a toujours pas fonctionné, même erreur.openvpn --help | grep port-share
). Et êtes-vous sûr qu'apache écoute sur le port configuré et que SSL fonctionne?En trouvant une réponse qui convient à mon serveur, j'ai trouvé que tout le monde parlait de la
portshare
fonction de la configuration OpenVPN. Cependant, dans mon cas, j'ai besoin de connaître l' adresse IP réelle du client pour la journalisation et d'autres fonctions. J'ai constaté que l'utilisationportshare
entraîne la journalisation de l'IP locale du serveur.Pour résoudre ce problème,
portshare [port]
fonction dans OpenVPN[port]
ProxyProtocol On
dans la configuration Apache.Cela devrait fonctionner et servir le but ci-dessus. Je viens de poster ceci et j'espère que cela pourra aider quelqu'un qui veut faire quelque chose comme moi.
la source
L'option de partage de port d'OpenVPN vous permet de rediriger le trafic vers un autre site HTTPS, pas vers un serveur Web normal; l'erreur que vous voyez
se produit lorsqu'une demande SSL est envoyée à un site non-0SSL. Je peux reproduire l'erreur en utilisant
(au lieu de 443) Si vous configurez votre site HTTPS correctement, le partage de port fonctionnera.
HTH,
JJK
la source
Mise à jour: j'ai remarqué que l'adresse IP des visiteurs du site Web sera toujours
127.0.0.1
dans les journaux du serveur Web. C'est un problème si vous voulez connaître l'origine d'une connexion ou utiliser un outil commefail2ban
. Il semble qu'il n'y ait aucun moyen d'avoir la véritable adresse IP du visiteur dans les journaux Apache si nous utilisons OpenVPNport-share
( https://forums.openvpn.net/viewtopic.php?t=22599 ), j'ai donc utilisé l'outil SSLH en mode transparent: /unix/373717/how-does-sslhs-transparent-mode-work/532333#532333Réponse originale:
Si quelqu'un utilise OpenVPN Access Server, vous devez vous rendre sur
/usr/local/openvpn_as/scripts/
(par exemple sur Debian) et exécuter ces commandes:./sacli --key "vpn.server.port_share.enable" --value "true" ConfigPut ./sacli --key "vpn.server.port_share.service" --value "custom" ConfigPut ./sacli --key "vpn.server.port_share.ip_address" --value <LOCAL_IP> ConfigPut ./sacli --key "vpn.server.port_share.port" --value <PORT> ConfigPut ./sacli start
La source:
https://forums.openvpn.net/viewtopic.php?p=78630#p78630
https://openvpn.net/vpn-server-resources/managing-settings-for-the-web-services-from-the-command-line/#Change_the_web_service_forwarding_settings
Dans mon cas, je n'avais pas besoin de faire la commande pour la clé
vpn.server.port_share.service
et j'ai utilisé la commande à laservice openvpnas restart
place de./sacli start
.J'ai remplacé
<LOCAL_IP>
par127.0.0.1
et<PORT>
par4443
depuis que j'ai configuré Apache pour écouter sur le port 4443.Mon fichier
/etc/apache2/ports.conf
est configuré comme ceci:Et ma configuration SSL Apache
/etc/apache2/sites-enabled/000-default.conf
commence comme ceci:<IfModule mod_ssl.c> <VirtualHost *:4443>
Remarque: J'ai utilisé OpenVPN Access Server dans le passé car il était facile à configurer. Il existe également des scripts alternatifs pour configurer OpenVPN qui ont l'avantage d'être open source et de ne pas limiter le nombre d'utilisateurs, par exemple: https://github.com/Nyr/openvpn-install
la source