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:
- https://forum.proxmox.com/threads/solved-undefined-error-1006-console-not-working-websocket-connection-failed-proxmox-ve-8-nginx-proxy-manager-authelia.135364/
- https://www.reddit.com/r/Proxmox/comments/10cdi60/undefined_code_1006_on_proxmox_console_nginx
- https://forum.proxmox.com/threads/solved-undefined-code-1006.108085/
- https://forum.proxmox.com/threads/unable-to-connect-to-pve-web-console-through-reverse-proxy.46862/
- https://www.reddit.com/r/Proxmox/comments/osq2db/proxmox_behind_proxy_still_cant_connect_to/
- https://forum.proxmox.com/threads/solved-error-1006.115075/
- https://github.com/tobychui/zoraxy/discussions/106
- https://indibit.de/proxmox-failed-to-connect-to-server-mit-safari-auf-macos/
- https://dannyda.com/2020/05/14/how-to-fix-proxmox-ve-pve-novnc-console-not-working-in-ios-iphone-ipad-safari-web-browser-etc-failed-to-connect-to-server/
- https://nginx.org/en/docs/http/websocket.html
- https://www.synology.com/en-us/help/DSM/ApplicationPortal
- https://nginxproxymanager.com/guide/
- https://forum.proxmox.com/threads/undefined-code-1006.93079/
Nenhum comentário:
Postar um comentário