sábado, 17 de maio de 2025

Como Corrigir o Erro "Undefined code: 1006" no Shell do Proxmox via Proxy Reverso do Synology

Pessoal,


Se você, assim com eu, usa o Proxmox VE para gerenciar máquinas virtuais e configurou um acesso externo por meio de um endereço personalizado, como meuproxmox.seusynology.synology.me, utilizando o proxy reverso do Synology DSM, pode ter se deparado com o temido erro "Undefined code: 1006" ao tentar abrir o shell ou o console do Proxmox. Esse problema impede o acesso interativo ao terminal diretamente pela interface web, o que pode ser frustrante, especialmente se você depende do shell para gerenciar o sistema remotamente. Neste tutorial, vou explicar o que causa esse erro, por que ele acontece e como resolvê-lo de forma prática e definitiva.

O que é um Proxy Reverso?

Um proxy reverso é um servidor que atua como intermediário entre o cliente (seu navegador, por exemplo) e o servidor de destino (no caso, o Proxmox). Ele recebe requisições externas e as redireciona para o servidor interno, geralmente em uma rede local. No Synology DSM, o proxy reverso é configurado no Application Portal e permite que você acesse serviços internos, como o Proxmox, usando um domínio amigável (ex.: meuproxmox.seusynology.synology.me) em vez de um IP e porta (ex.: 192.168.0.15:8006). Além de facilitar o acesso, o proxy reverso pode adicionar segurança com SSL/TLS, balanceamento de carga e filtragem de requisições.

O Papel dos WebSockets

Os WebSockets são um protocolo de comunicação bidirecional que permite uma conexão persistente entre o cliente e o servidor. Diferente do HTTP/HTTPS, que é baseado em requisições e respostas únicas, os WebSockets mantêm um canal aberto, ideal para aplicações interativas, como o shell e o console do Proxmox. No Proxmox, o shell utiliza WebSockets (via protocolo wss://, que é a versão segura) para transmitir comandos e respostas em tempo real. Para que isso funcione, o proxy reverso precisa suportar e encaminhar corretamente essas conexões WebSocket, algo que o Synology DSM não faz por padrão.

Por que o Erro "Undefined code: 1006" Acontece?

O erro "Undefined code: 1006" é um código de fechamento de conexão WebSocket, indicando que a conexão foi interrompida inesperadamente. No contexto do Proxmox, isso ocorre porque o proxy reverso do Synology não está configurado para lidar com as atualizações de protocolo (Upgrade) necessárias para WebSockets. Quando você tenta abrir o shell, o navegador solicita uma conexão WebSocket, mas o proxy reverso bloqueia ou não encaminha essa solicitação corretamente para o Proxmox, resultando no erro. Esse problema é comum em proxies reversos que priorizam tráfego HTTP/HTTPS padrão e não estão ajustados para suportar WebSockets.

Planejamento para Resolver o Problema

Para corrigir o erro, precisamos garantir que o proxy reverso do Synology suporte WebSockets. A abordagem principal é adicionar cabeçalhos HTTP específicos (Upgrade e Connection) que instruem o proxy a manter a conexão WebSocket ativa. Isso pode ser feito diretamente na interface gráfica do Synology, usando a funcionalidade de Custom Headers. Caso isso não seja suficiente, podemos editar manualmente a configuração do Nginx (o servidor usado pelo Synology para o proxy reverso) para incluir diretivas explícitas de suporte a WebSockets. Além disso, é importante verificar os certificados SSL, pois problemas com certificados autoassinados ou inválidos podem agravar o erro, especialmente em navegadores mais rigorosos, como o Safari. Como alternativa, se o Synology continuar apresentando problemas, podemos usar o Nginx Proxy Manager em um contêiner LXC no Proxmox, que oferece suporte nativo a WebSockets.

Bom, vamos ao que interessa:

Passo 1: Adicionar Cabeçalhos no Proxy Reverso

  • No DSM, vá para Control Panel > Application Portal > Reverse Proxy.
  • Edite a regra para seu domínio (ex.: meuproxmox.seusynology.synology.me).
  • Na aba Custom Headers, adicione:
Nome: Upgrade
Valor: $http_upgrade
Nome: Connection
Valor: $connection_upgrade
  • Salve e teste o shell.

Passo 2: Configuração Avançada (Se Necessário)
  • Habilite SSH no Synology (Control Panel > Terminal & SNMP).
  • Edite a configuração do Nginx:
    sudo vi /etc/nginx/conf.d/http_servers.conf
  • Adicione ao bloco server:
location / {
    proxy_pass https://192.168.0.15:8006;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
}
  • Verifique e recarregue:
sudo nginx -t
sudo nginx -s reload

Passo 3: Verificar Certificados SSL
  • Use certificados válidos (ex.: Let’s Encrypt) no Proxmox e Synology.
  • Para o Proxmox:
apt install acme.sh
acme.sh --issue --standalone -d meuproxmox.seusynology.synology.me

Passo 4: Dicas
  • Cheque firewalls e antivírus.
  • Teste em diferentes navegadores.
  • Para clusters:
pvecm updatecerts --force
systemctl restart pveproxy.service pvedaemon.service

Alternativa: Nginx Proxy Manager

Instale o Nginx Proxy Manager em um LXC:

docker run -d --name nginx-proxy-manager -p 80:80 -p 443:443 -p 81:81 -v npm-data:/data -v npm-letsencrypt:/etc/letsencrypt --restart=unless-stopped jc21/nginx-proxy-manager:latest

Configure o proxy host com suporte a WebSocket.


Verificar Logs

Proxmox: journalctl -u pveproxy.service

Synology: sudo cat /var/log/nginx/error.log

Com isso, o shell funcionará perfeitamente pelo proxy reverso, permitindo gerenciar suas máquinas virtuais sem interrupções!


Para reforçar: se resolver no primeiro passo, não precisa ir para os seguintes, ok?


Bom, por enquanto é isso!

Fontes:

Nenhum comentário:

Postar um comentário