Eu tenho um pequeno servidor que executa várias máquinas virtuais, alguns servidores da Web e também um servidor do Gateway de Área de Trabalho Remota do Windows 2008 R2.
A intenção é ter um servidor Apache2 rodando no Ubuntu 11.10, que irá atuar como um servidor proxy reverso para encaminhar pedidos para o servidor correspondente com base no nome do host que é usado.
Eu tenho este trabalho para vários outros servidores Ubuntu Apache2 e para o servidor IIS7 em execução no meu servidor 2008 R2 RD Gateway.
Com o trabalho, quero dizer que posso acessar todos esses servidores Web via HTTP e HTTPS com base no nome do host que estou visitando com um navegador da Web.
O que não funciona, no entanto, é usar a funcionalidade de gateway de desktop remoto, para conectar-se de um cliente externo a um servidor RDP interno.
Eu sei que o servidor de gateway RD está configurado corretamente porque se eu redirecionar o tráfego HTTPS externo diretamente para o seu IP (ignorando o servidor proxy apache2), tudo funcionará bem.
Quando coloco o proxy apache2 no meio e tento estabelecer uma conexão RDP de uma fonte externa, recebo o seguinte erro no proxy apache error.log:
[error] (70007)The timeout specified has expired: proxy: prefetch request body failed to 192.168.2.172:443 (rdpgw.internal.domain.com) from xx.xx.xx.xx ()
Onde xx.xx.xx.xx é o IP do meu cliente externo.
O cliente de área de trabalho remota no cliente remoto fornecerá um erro de tempo limite genérico e, no servidor do Gateway RD, tudo parece bem.
Ao conectar-se diretamente ao servidor de gateway RD, posso ver isso no arquivo de log do IIS:
2012-01-26 11:54:13 192.168.2.172 RPC_IN_DATA /rpc/rpcproxy.dll localhost:3388 443 - xx.xx.xx.xx MSRPC 401 1 2148074254 15
2012-01-26 11:54:13 192.168.2.172 RPC_OUT_DATA /rpc/rpcproxy.dll localhost:3388 443 - xx.xx.xx.xx MSRPC 401 1 2148074254 15
E ao conectar-se por meio do proxy do apache2, posso ver:
2012-01-26 11:54:53 192.168.2.172 RPC_IN_DATA /rpc/rpcproxy.dll localhost:3388 443 - 192.168.2.170 MSRPC 401 1 2148074254 46
2012-01-26 11:54:53 192.168.2.172 RPC_OUT_DATA /rpc/rpcproxy.dll localhost:3388 443 - 192.168.2.170 MSRPC 401 1 2148074254 31
Portanto, a conexão no segundo caso é proveniente do proxy apache2.
caso contrário, as conexões parecem ser as mesmas.
Sobre uma coisa que não sei ao certo como deve ser a configuração, estão os certificados nos dois servidores.
Entendo que o HTTPS não pode ser "interceptado" e encaminhado pelo servidor proxy, portanto, se estiver correto, há duas conexões SSL separadas aqui envolvidas: 1 do cliente remoto para o proxy do apache e uma do apache proxy para o servidor de gateway RD.
Imaginei que seria melhor se o cliente remoto não visse a diferença, então usei o mesmo certificado autoassinado e chave privada no proxy do apache e no servidor de gateway RD.
Há o conteúdo do arquivo de configuração vhsot apache2 correspondente:
<VirtualHost *:443>
ServerName rdgw.externaldomainname.com
ProxyRequests off
ProxyPreserveHost on
ProxyPass / https://rdgw.internal.domain.com/
ProxyPassReverse / https://rdgw.internal.domain.com/
SSLEngine on
SSLProxyEngine on
RequestHeader set Front-End-Https "On"
SSLCertificateFile /etc/apache2/certs/rdgw.externaldomainname.com.crt
SSLCertificateKeyFile /etc/apache2/certs/rdgw.externaldomainname.com.key
</VirtualHost>
Espero que alguém saiba como isso pode ser feito?
Deve ser possível que eu tenha encontrado este artigo do MS que descreve como configurar exatamente essa configuração, apenas com o MS ISA como um servidor proxy em vez do Ubuntu / Apache2