OpenVPN port-share com Apache / SSL

5

Estou tentando configurar o OpenVPN para escutar na porta 443 e, em seguida, passar todo o tráfego HTTPS para o Apache, usando a opção port-share . Snippets de configuração relevantes são:

OpenVPN

local ${PUBLIC_IP}
port 443
port-share localhost 443

Apache com SSL

Listen localhost:443

Meu cliente OpenVPN se conecta muito bem, mas ao abrir a página HTTPS, recebo erros. O Firefox diz:

SSL received a record that exceeded the maximum permissible length.

(Error code: ssl_error_rx_record_too_long)

Curl diz

curl: (35) error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol

A requisição acaba no Apache, pois vejo no log de erro as seguintes mensagens:

[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

A entrada de mensagens para uma conexão HTTPS é

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 o httpd-2.2.3-43.el5.centos e o openvpn-2.1.1-2.el5.

O que devo fazer para que o compartilhamento de portas funcione?

Atualizar : usando

port 443
port-share localhost 10443

e

Listen localhost:10443

não faz diferença.

Atualização 2 : alguma saída 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       
    
por Robert Munteanu 06.10.2010 / 00:16

3 respostas

7

a opção port-share define a porta que o aplicativo outro está escutando.

O que você quer fazer é configurar

port-share 10443

e defina o Apache para escutar na porta 10443:

Listen <your-public-ip>:10443

Isso porque dois aplicativos não podem abrir a mesma porta de uma só vez.

    
por 06.10.2010 / 00:55
1

A opção de compartilhamento de porta do OpenVPN permite que você redirecione o tráfego para outro site HTTPS, não para um servidor web comum; o erro que você está vendo

[error] [client 127.0.0.1] Invalid method in request \x16\x03\x01

ocorre quando uma solicitação SSL é enviada para um site não 0SSL. Eu posso reproduzir o erro usando

  port-share localhost 80

(em vez de 443) Se você configurar o site HTTPS corretamente, o compartilhamento de portas funcionará.

HTH

JJK

    
por 12.10.2010 / 14:39
1

Como no meu processo de encontrar uma resposta que poderia atender ao meu servidor, encontrei todos falando sobre a função portshare da configuração do OpenVPN. No entanto, no meu caso, quando é necessário conhecer o endereço IP do cliente para o registro em log e outras funcionalidades, descobri que usar o compartilhamento de portas faz com que o IP local do servidor seja registrado.

Para lidar com esse problema, descobri que depois de abrir a função de compartilhamento de portas no OpenVPN e configurar o servidor Apache para escutar essa porta, a extensão ProxyProtocol poderia ser instalada. A extensão está disponível nesta página: link e não é difícil de instalar. Siga as instruções no arquivo readme para instalar esta extensão. Em seguida, adicione a linha ProxyProtocol On na configuração do Apache. Deve funcionar e servir ao propósito acima. Apenas postou isso e espero que possa ajudar alguém que queira fazer algo como eu fiz.

    
por 07.08.2017 / 08:07