Reenviar SSH desde el servidor proxy inverso a través de VPN al servidor doméstico

Reenviar SSH desde el servidor proxy inverso a través de VPN al servidor doméstico

Estoy intentando configurar GitLab en mi servidor doméstico. HTTPS funciona y puedo acceder a la interfaz de GitLab, pero SSH no y, por lo tanto, no puedo enviar código al servidor.

Aquí está la configuración:

Cloudflare <--> Reverse Proxy (nginx, hosted on Digital Ocean) <--- VPN ---> Untangle Firewall <--> GitLab Server (on ESXi)

Si intento realizar SSH directamente desde el proxy inverso al servidor GitLab (a través de una conexión VPN), funciona perfecto.

Si intento realizar SSH desde mi computadora portátil usando el nombre de dominio, obtengo:

kex_exchange_identification: Connection closed by remote host
Connection closed by 104.31.73.156 port 2095

Si intento realizar SSH desde mi computadora portátil usando la IP del proxy inverso (eliminando así Cloudflare), obtengo:

Bad packet length 1231976033.
ssh_dispatch_run_fatal: Connection to {{ IP }} port 2095: message authentication code incorrect

Actualmente estoy intentando usar el módulo de transmisión nginx para hacerlo, y esta es la configuración de la transmisión:

stream {
        upstream git-ssh {
                server {{INTERNAL GITLAB IP}}:22;
        }
        server {
                listen 2095;
                proxy_pass {{INTERNAL GITLAB IP}}:22;
                proxy_protocol on;
        }
}

La razón por la que tengo git-ssh ascendente y luego no lo uso es porque me preguntaba si ese era el problema, pero no hay diferencia si lo uso o no.

No estoy familiarizado con iptables, pero probé los siguientes comandos:

sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 2095 -j DNAT --to-destination {{GITLAB IP}}:22
sudo iptables -t nat -A POSTROUTING -o eth0 -p tcp --dport 2095 -j SNAT --to-source {{PROXY IP}}

Pero no pareció funcionar. ssh simplemente se queda ahí y no devuelve nada y finalmente se agota el tiempo de espera.

Actualmente, UFW está configurado como deshabilitado en el proxy para realizar pruebas, por lo que no sucede nada allí. 2095 es un puerto aprobado para Cloudflare (https://support.cloudflare.com/hc/en-us/articles/200169156-Identifying-network-ports-compatible-with-Cloudflare-s-proxy), así que no debería ser así. SSH está permitido a través del firewall de GitLab, por lo que no debería ser así. Todavía no tengo el Firewall configurado en DigitalOcean, así que no debería ser así.

Estoy perdido ahora y esperaba que alguien pudiera darme sugerencias.

Respuesta1

No importa, finalmente pude arreglarlo, aunque no del todo a mi gusto.

Desde mi configuración de transmisión, tuve que eliminar proxy_protocol;

Cloudflare siguió siendo un problema. Ejecutar ssh -vvv al host/protocolo a través de Cloudflare mostraría que estaba devolviendo una página 400 html en lugar de permitirle el paso. Entonces tuve que agregar un nuevo registro para permitir el tráfico a través de la red de Cloudflare sin proxy, razón por la cual no estoy del todo satisfecho con mi solución.

Finalmente, tuve que editar mi archivo ~/.ssh/config y agregar un parámetro HostName para no tener que arreglar el origen de git upstream para cada uno de mis proyectos.

Si alguien tiene una solución mejor que me permita seguir usando Cloudflare con Proxy, me encantaría escucharla.

información relacionada