
Tengo problemas para conectar un proxy directo con el proxy inverso, ambos compatibles con tinyproxy (versión 1.8.3). No sé si será problema de configuración.
Estoy probando estos servidores proxy con 4 máquinas virtuales que ejecutan Debian GNU/Linux 8.9 (jessie). Estas máquinas representan un cliente, un proxy directo, un proxy inverso y el servidor. Estoy configurando la comunicación entre el proxy directo e inverso.
El servidor ejecuta el servidor Apache, que devuelve la página HTML predeterminada que dice "Funciona".
El comportamiento deseado es que el cliente se comunique con el servidor a través del proxy directo que se transmite al proxy inverso que interactúa con el servidor: Cliente (10.0.2.33) -> proxy directo (10.0.2.35) -> proxy inverso (10.0. 2.36) -> servidor (10.0.2.34)
Para probar el sistema utilizo este comando curl en la máquina cliente:
curl -v --proxy http://10.0.2.35:8888 http://10.0.2.34:80/
Archivo de configuración de proxy directo:
## tinyproxy.conf -- tinyproxy daemon configuration file
User nobody
Group nogroup
Port 8888
Listen 10.0.2.35
BindSame yes
Timeout 600
DefaultErrorFile "/usr/share/tinyproxy/default.html"
StatFile "/usr/share/tinyproxy/stats.html"
Logfile "/var/log/tinyproxy/tinyproxy.log"
#Syslog On
LogLevel Info
PidFile "/var/run/tinyproxy/tinyproxy.pid"
#Upstream 10.0.2.36:8888 "10.0.2.0/24"
Upstream 10.0.2.36:8888
MaxClients 100
MinSpareServers 2
MaxSpareServers 5
StartServers 2
MaxRequestsPerChild 0
Allow 127.0.0.1
Allow 10.0.2.0/24
ViaProxyName "tinyproxy1"
ConnectPort 8888
ConnectPort 80
# The following two ports are used by SSL.
ConnectPort 443
ConnectPort 563
Archivo de configuración de proxy inverso:
## tinyproxy.conf -- tinyproxy daemon configuration file
User nobody
Group nogroup
Port 8888
Listen 10.0.2.36
BindSame yes
Timeout 600
StatFile "/usr/share/tinyproxy/stats.html"
Logfile "/var/log/tinyproxy/tinyproxy.log"
#Syslog On
LogLevel Info
PidFile "/var/run/tinyproxy/tinyproxy.pid"
no upstream "10.0.2.34:80"
#no upstream "."
MaxClients 5
MinSpareServers 2
MaxSpareServers 5
StartServers 2
MaxRequestsPerChild 0
Allow 127.0.0.1
Allow 10.0.2.0/24
Allow 10.0.2.35
ViaProxyName "tinyproxy2"
ConnectPort 8888
ConnectPort 80
# The following two ports are used by SSL.
ConnectPort 443
ConnectPort 563
ReversePath "/" "http://10.0.2.34:80/"
ReversePath "/wired/" "http://www.wired.com/"
ReverseOnly Yes
ReverseMagic Yes
ReverseBaseURL "http://10.0.2.34:80/"
Estos son el flujo de flujo TCP capturado por Wireshark:
Flujo [cliente <-> proxy de reenvío]
GET http://10.0.2.34:80/ HTTP/1.1
User-Agent: curl/7.38.0
Host: 10.0.2.34
Accept: */*
Proxy-Connection: Keep-Alive
HTTP/1.0 400 Bad Request
Via: 1.1 tinyproxy1 (tinyproxy/1.8.3)
Server: tinyproxy/1.8.3
Content-Type: text/html
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html>
<head><title>400 Bad Request</title></head>
<body>
<h1>Bad Request</h1>
<p>Request has an invalid URL</p>
<hr />
<p><em>Generated by tinyproxy version 1.8.3.</em></p>
</body>
</html>
Flujo [proxy directo <-> proxy inverso]
GET http://10.0.2.34:80/ HTTP/1.0
Host: 10.0.2.34
Connection: close
Via: 1.1 tinyproxy1 (tinyproxy/1.8.3)
User-Agent: curl/7.38.0
Accept: */*
HTTP/1.0 400 Bad Request
Server: tinyproxy/1.8.3
Content-Type: text/html
Connection: close
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html>
<head><title>400 Bad Request</title></head>
<body>
<h1>Bad Request</h1>
<p>Request has an invalid URL</p>
<hr />
<p><em>Generated by tinyproxy version 1.8.3.</em></p>
</body>
</html>
Estos son los resultados del archivo de registro de tinyproxy:
proxy directo
CONNECT Dec 10 22:05:08 [2788]: Connect (file descriptor 6): 10.0.2.33 [10.0.2.33] at [10.0.2.35]
CONNECT Dec 10 22:05:08 [2788]: Request (file descriptor 6): GET http://10.0.2.34:80/ HTTP/1.1
INFO Dec 10 22:05:08 [2788]: Found upstream proxy 10.0.2.36:8888 for 10.0.2.34
CONNECT Dec 10 22:05:08 [2788]: Established connection to upstream proxy "10.0.2.36" using file descriptor 7.
INFO Dec 10 22:05:08 [2788]: Closed connection between local client (fd:6) and remote client (fd:7)
proxy inverso
CONNECT Dec 10 22:05:08 [4487]: Connect (file descriptor 6): 10.0.2.35 [10.0.2.35] at [10.0.2.36]
CONNECT Dec 10 22:05:08 [4487]: Request (file descriptor 6): GET http://10.0.2.34:80/ HTTP/1.0
ERROR Dec 10 22:05:08 [4487]: Bad request
INFO Dec 10 22:05:08 [4487]: no entity
Actualmente, puedo acceder a la página del servidor dentro de la máquina de proxy inverso, "curvando"http://10.0.2.34:80/yhttp://10.0.2.36:8888/debido a mi configuración de proxy inverso (ReversePath). La siguiente imagen muestra la captura de Wireshark en la máquina de proxy inverso.
Imagen del acceso de proxy inverso a las capturas del servidor
Con toda esta configuración, todo lo que recibo en la máquina del cliente es un mensaje de error 400 de solicitud incorrecta del proxy inverso.
Respuesta1
Este problema fue resuelto. La forma de probar esto no es solicitando la página directamente al servidor, sino a la máquina proxy inversa. Además, el proxy directo no debe transmitir el tráfico al proxy inverso.
El proxy inverso no puede comprender la solicitud enviada al host/servidor, si el proxy directo envía el tráfico ascendente porque funcionan de manera diferente.
La configuración correcta para el proxy de reenvío debe excluir la línea:
upstream 10.0.2.36:8888
Porque el proxy inverso tiene la siguiente regla:
ReversePath “/” “http://10.0.2.34:80/”
Al solicitar el recurso del servidor (la página "Funciona" de Apache), el proxy inverso (10.0.2.36) solicitará el servidor (10.0.2.34) una vez que solicitemos "http://10.0.2.36:8888/"
Deberíamos ejecutar curl al proxy inverso con:
curl -v --proxy http://10.0.2.35:8888 http://10.0.2.36:8888/
Luego podemos ver que la configuración funciona, con el siguiente resultado:
root@debian:/home/debian# curl -v --proxy http://10.0.2.35:8888 http://10.0.2.36:8888
* Rebuilt URL to: http://10.0.2.36:8888/
* Hostname was NOT found in DNS cache
* Trying 10.0.2.35...
* Connected to 10.0.2.35 (10.0.2.35) port 8888 (#0)
> GET http://10.0.2.36:8888/ HTTP/1.1
> User-Agent: curl/7.38.0
> Host: 10.0.2.36:8888
> Accept: */*
> Proxy-Connection: Keep-Alive
>
< HTTP/1.1 200 OK
< Via: 1.0 tinyproxy2 (tinyproxy/1.8.3), 1.1 tinyproxy1 (tinyproxy/1.8.3)
< Last-Modified: Mon, 11 Jun 2007 18:53:14 GMT
< Date: Tue, 12 Dec 2017 23:01:37 GMT
< Content-Type: text/html
< ETag: "2d-432a5e4a73a80"
< Set-Cookie: yummy_magical_cookie=/; path=/
* Server Apache/2.4.29 (Unix) is not blacklisted
< Server: Apache/2.4.29 (Unix)
< Content-Length: 45
< Accept-Ranges: bytes
<
<html><body><h1>It works!</h1></body></html>
* Connection #0 to host 10.0.2.35 left intact