Estoy tratando de configurar OpenVPN para escuchar en el puerto 443, y luego pasar todo el tráfico HTTPS a Apache, usando la port-share
opción. Los fragmentos de configuración relevantes son:
OpenVPN
local ${PUBLIC_IP}
port 443
port-share localhost 443
Apache con SSL
Listen localhost:443
Mi cliente OpenVPN se conecta bien, pero al abrir la página habilitada HTTPS, obtengo errores. Firefox dice:
SSL recibió un registro que excedió la longitud máxima permitida.
(Código de error: ssl_error_rx_record_too_long)
Curl dice
curl: (35) error: 140770FC: rutinas SSL: SSL23_GET_SERVER_HELLO: protocolo desconocido
La solicitud termina en Apache, ya que veo en el registro de error los siguientes mensajes:
[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
La entrada de mensajes para una conexión HTTPS es
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
Usando httpd-2.2.3-43.el5.centos y openvpn-2.1.1-2.el5.
¿Qué debo hacer para que el puerto compartido funcione?
Actualización : usando
port 443
port-share localhost 10443
y
Listen localhost:10443
No hace diferencia.
Actualización 2 : alguna salida de comando
[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
fuente
port-share localhost 443
. Lo intentéport-share localhost 10443
, pero todavía no funcionó, el mismo error.openvpn --help | grep port-share
) ¿Y está seguro de que Apache escucha en el puerto configurado y tiene SSL funcionando?Al encontrar una respuesta que se adapta a mi servidor, encontré a todos hablando de la
portshare
función de la configuración de OpenVPN. Sin embargo, en mi caso, necesito saber la dirección IP real del cliente para el registro y otras funciones. Descubrí que el usoportshare
hace que se registre la IP local del servidor.Para arreglar esto,
portshare [port]
función en OpenVPN[port]
ProxyProtocol On
en la configuración de Apache.Debería funcionar y cumplir el propósito anterior. Acabo de publicar esto y espero que pueda ayudar a alguien que quiera hacer algo como yo.
fuente
La opción de puerto compartido de OpenVPN le permite redirigir el tráfico a otro sitio HTTPS, no a un servidor web normal; el error que estás viendo
se produce cuando se envía una solicitud SSL a un sitio que no es 0SSL. Puedo reproducir el error usando
(en lugar de 443) Si configura su sitio HTTPS correctamente, el puerto compartido funcionará.
HTH
JJK
fuente
Actualización: Noté que la dirección IP de los visitantes del sitio web siempre estará
127.0.0.1
en los registros del servidor web. Este es un problema si desea conocer el origen de una conexión o utilizar una herramienta comofail2ban
. Parece que no hay forma de tener la dirección IP real del visitante en los registros de Apache si estamos usando OpenVPNport-share
( https://forums.openvpn.net/viewtopic.php?t=22599 ), por lo que utilicé la herramienta SSLH en modo transparente: /unix/373717/how-does-sslhs-transparent-mode-work/532333#532333Respuesta original:
Si alguien usa OpenVPN Access Server, debe ir a
/usr/local/openvpn_as/scripts/
(por ejemplo en Debian) y ejecutar este comando:./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
Fuente:
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
En mi caso, no necesitaba hacer el comando para la clave
vpn.server.port_share.service
y usé el comando enservice openvpnas restart
lugar de./sacli start
.Reemplacé
<LOCAL_IP>
con127.0.0.1
y<PORT>
con4443
desde que configuré Apache para escuchar en el puerto 4443.Mi archivo
/etc/apache2/ports.conf
está configurado así:Y mi configuración de Apache SSL en
/etc/apache2/sites-enabled/000-default.conf
comienza así:<IfModule mod_ssl.c> <VirtualHost *:4443>
Nota: Utilicé OpenVPN Access Server en el pasado ya que fue fácil de configurar. También hay scripts alternativos para configurar OpenVPN que tienen la ventaja de ser de código abierto y no limitar la cantidad de usuarios, por ejemplo: https://github.com/Nyr/openvpn-install
fuente