Mostrando postagens com marcador Shell. Mostrar todas as postagens
Mostrando postagens com marcador Shell. Mostrar todas as postagens

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:

segunda-feira, 20 de março de 2023

Dica: Forçar um desligamento nas VMs do Proxmox

Pessoal,


Às vezes as VMs do Proxmox precisam ser desligadas para manutenção de algum código ou reiniciadas para atualização de algum componente ou programa ou simplesmente porque sua criação gerou algum erro e ela entra em um loop infinito.

O problema é que, quase sempre algumas vezes o comando para parar é ignorado e a gente fica tentando desligar, parar, forçar desligamento e gera isso aqui embaixo:


Quem nunca passou por isso? Quem nunca apelou e tirou o computador da tomada de raiva porque a VM não parava? Quem nunca arrancou os cabelos de raiva? Quem nunca chutou o computador? Eu nunca fiz nada disso!

Assim, aqui vai uma pequena dica: o comando abaixo mostra as VMs que você tem e quais estão ativas (tá, é meio supérfluo porque basta olhar o seu PVE para saber as VMs que você tem e quais estão ativas, mas vá lá):

# cat /etc/pve/.vmlist
{
"version": 59,
"ids": {
"100": { "node": "proxmox", "type": "qemu", "version": 2 },
"102": { "node": "proxmox", "type": "qemu", "version": 3 },
"104": { "node": "proxmox", "type": "qemu", "version": 59 },
"101": { "node": "proxmox", "type": "qemu", "version": 1 },
"103": { "node": "proxmox", "type": "qemu", "version": 23 }}

}

Ótimo, pode ver que está ativa a 59 ("version: 59) e essa corresponde à VM 104 (no meu caso é exatamente essa a única ativa no momento).

Para forçar e realmente parar a VM, dê o seguinte comando:

# qm stop 104
Pronto! Tchau pra você, VM que não quer desligar!!

É só essa dica por enquanto!

sábado, 17 de setembro de 2022

Dica: Tailscale - Serviço de VPN remoto

Pessoal,


Como comentei em posts anteriores (aqui e aqui), estou testando alguns serviços para ter acesso remoto aos meus servidores em casa.

No post anterior eu falei do ShellHub, um serviço bem interessante para acessar o shell remotamente via SSH.

Descobri mais dois serviços bem interessantes: o Tailscale e o ZeroTier.

Neste post vou falar do Tailscale e em outro do ZeroTier. Num primeiro momento, parece que o Tailscale é baseado no Wireguard e o ZeroTier no OpenVPN. Isso proporciona mais rapidez ao Tailscale porém o OpenVPN é bem mais rodado que o Wireguard, assim o ZeroTier sai na frente em questão de segurança.

É importante perceber que tanto esse serviço quanto o ZeroTier ou o ShellHub não darão a você acesso completo a sua rede, mas sim acesso a uma máquina da rede. O OpenVPN dá o acesso à rede por completo, ou seja, sua máquina remota parece que está dentro da rede doméstica. Pode parecer a mesma coisa, mas não é.

Por exemplo, o meu NextCloud está instalado na mesma VM do OMV (192.168.1.3). Assim, se eu instalar esses serviços nessa VM, só preciso digirar a porta no navegador e pronto, acesso. Mas se o serviço estiver instalado ou ativo em outra VM, não terei acesso ao NextCloud. A mesma coisa se eu quiser acessar o meu Proxmox (192.168.1.2), também não vou conseguir. Já o OpenVPN, Wireguard ou um VPN tradicional dará o acesso à rede toda. É diferente, entenderam?

Vamos lá. Após entrar no site do Tailscale (tailscale.com), faça seu cadastro e siga em frente, escolhendo qual máquina você deseja conectar. No meu caso, como vou instalar na VM do OMV, vou usar a recomendação do serviço e instalar o pelo curl.

    $ curl -fsSL https://tailscale.com/install.sh | sh

Prontamente ocorre a instalação em menos de 30 segundos. Para concluir e iniciar o serviço, execute o comando abaixo:

    $ tailscale up

O serviço cria um enderço para você acessar e autenticar:


Copie esse endereço, cole no navegador e siga em frente. Prontamente o serviço é adicionado.


Pronto! Agora copie o IP da máquina que deseje acessar, coloque no navegador fora da rede e pronto!

Em breve vou falar do ZeroTier.

Por enquanto é isso!

quarta-feira, 7 de setembro de 2022

Dica: ShellHub - SSH para Acesso Remoto

Pessoal,


Como disse aqui, a Claro avacalhou meu NAS ao me entregar uma merda de um modem sem possibilidade de colocar em bridge.

Assim, preciso me virar para acessar os meus arquivos remotamente.

A primeira coisa é conseguir acessar a máquina do NAS remotamente.

Para isso, achei um serviço bem interessante: o ShellHub.

Esse serviço é completo e gratuito para até 3 dispositivos. Para mim, acessando o NAS é suficiente porque, primeiro, é SSH e, segundo, só preciso disso pro NAS mesmo.

A primeira coisa é criar uma conta gratuita. Use uma senha forte!

Existem duas possibilidades de instalação. A primeira é criando toda a estrutura você mesmo. Se por um lado tudo estará no seu computador, por outro lado você terá que configurar, administrar e atualizar. Veja como aqui. Seria a minha opção se não fosse a presepada da Claro.

A outra possibilidade, fácil, é usando o ShellHub Cloud. Esse serviço deles cria uma ponte remota entre o seu servidor e o seu terminal.

Assim, crie a conta gratuitamente. Assim que você entrar, aparecerá uma tela de boas vindas e uma tela mostrando uma linha de comando para você instalar no computador que você deseja acessar remotamente (óbvio que neste momento da instalação você deve ter acesso ao seu servidor).


Só copie esse curl e siga as instruções (você precisa do Docker instalado).



Após instalado, volte ao site do ShellHub e vá em Devices. Lá deverá ter um aviso de um device aguardando autorização (Pending). Clique em Action e autorize.


Pronto. Agora volte em Devices e você verá a sua máquina conectada. Eu já tinha uma (Debian 11) e fiz essa para o blog no Ubuntu:



Pronto. Existem duas formas de conexão. Uma é clicando Connect e essa tela abaixo se abrirá. Aqui você vai colocar os dados do seu usuário da máquina remota (como você se conecta, seu username ou root e senha do usuário). Repare que NÃO são os dados da sua conta do ShellHub e sim os dados do seu servidor remoto!



Pronto, você está conectado!


Repare que eu estou logado no Ubuntu!

Outro modo de acessar é pelo terminal. Para isso abra o terminal, copie o nome do SSHID e coloque no terminal a seguinte fórmula:

    ssh <username>@<seu SSHJID>


Ficará assim:



Bom, já ajuda bastante, né?

Se quiserem um tutorial por vídeo, recomento esse aqui do YouTube.

Uma pequena atualização:

O ShellHub atribui uns nomes bem complicados nos hostnames (ele coloca algo como 00-ac-29-4b-01). Assim, seu endereço de para acesso terá a seguinte construção:

    <seu login>.<hostname>@cloud.shellhub.io

No meu caso, seria algo como:

    jaymebc.00-ac-29-4b-01@cloud.shellhub.io

Nada prático para guardar.

É possível melhorar esse nome. Em Devices, clique nos 3 pontos da conexão que deseje renomear e depois em Details:


Na janela que se abrirá, clique em Rename, escolha o nome e pronto.

Por enquanto é isso.

quinta-feira, 13 de janeiro de 2022

Dica - Como pausar a saída do terminal no Linux

 Pessoal,

Por vezes precisamos acessar o Terminal / Shell / Console / CMD do sistema para alguma função não disponível na interface para o usuário.

No Mac, quando uso o Terminal, seja acessando o próprio Mac, seja acessando algum servidor via SSH, quando solicito algum comando cuja resposta é maior que a tela apresentada (mais linhas que a tela do Terminal), basta rolar a tela do Terminal para cima ou para baixo para acessar o que já impresso mas não está mais aparecendo na tela. Fácil.

No Ubuntu com interface gráfica, funciona do mesmo modo. No Windows a mesma coisa acontece.

Alguns comandos permitem passar o "/p"com parâmetro para pausar a listagem da tela (ou seja, rola uma tela por vez).

Entretanto quando eu uso o console do Proxmox, não existe essa opção de rolar a tela. Se o que você queria ler já passou, já era!

Descobri, todavia, como contornar esse problema de um jeito bem simples!

Ao final do comando, acrescente "| more".

# ifconfig -a | more
# ls | more

Pronto, esse post era só isso mesmo!

Obs 1) Este link tem os principais controles do CMD do Windows (antigo e saudoso DOS).

segunda-feira, 13 de setembro de 2021

Proxmox - instalando o Docker e o Portainer no Ubuntu

Pessoal,

Continuando a migração para o Proxmox, vou instalar o Docker e o Portainer no Ubuntu Server.

O TrueNAS é uma poço sem fundo de memória. Tudo que você colocar de RAM, ele vai usar! O Ubuntu Server, ao contrário, gasta pouco. Qualquer miserê de memória deixa ele feliz e saltitante. Assim, prefiro instalar o Docker e rodar algumas coisas nele que criar outra VM que vai sugar ainda mais memória e espaço em disco. Além disso, com o Portainer (que fui conhecer no OMV), a administração do Docker fica bem legal.

O Portainer é  uma interface para facilitar a instalação e administração dos conteiners do Docker. Fica muito mais fácil.

Assim, para instalar, vá ao Shell do Ubuntu Server e digite os comandos abaixo para instalar o Docker CE (Community Edition), o Docker Compose e, por fim, o Portainer.

Você também pode usar o SSH/Putty para copiar os comandos e colar no Shell do MacOS, Linux ou Windows, a seu gosto.


Instalando o Docker CE:

Primeiro, atualize o Ubuntu Server e instale os pré-requisitos do sistema:
sudo apt update
sudo apt upgrade
sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
Agora instale a chave GPG do Docker:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
E agora instale o repositório Docker (eu prefiro sempre a versão estável):
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
Atualize novamente o repositório com:
sudo apt update
E agora certifique-se que o Docker está sendo instalado a partir do repositório do Docker e não do repositório do Ubuntu com:
apt-cache policy docker-ce
A saída deve ser assim, mostrando várias versões disponíveis:


Repare na terceira linha que mostra a versão instalada do meu Docker. Se você nunca instalou, deve receber uma coisa mostrando que não está instalado ainda, tipo isso aqui:


Para instalar a versão estável mais recente, use isso:
sudo apt install docker-ce
E verifique o status do serviço com:
sudo systemctl status docker

Deve sair algo assim, mostrando que está ok:


Pronto, Docker instalado. Para testar se está tudo ok, rode um Docker para testar:
sudo docker run hello-world
E deve sair mais ou menos isso:


Fácil, né? Vamos seguir.


Instale o Docker Compose:

Vou instalar o Docker Compose a partir do repositório deles no GitHub. Vá na página deles e descubra qual é a última versão:


Agora instale com:
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
Depois de instalar, aplique as permissões para o binário e crie o link para /usr/binary:
sudo chmod +x /usr/local/bin/docker-compose
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
Para saber se deu certo, use o comando abaixo:
docker-compose --version
A resposta deve ser algo assim:


Configurar o Portainer:

Para instalar o Portainer, usaremos o Docker:
cd ~/
docker volume create portainer_data
docker run -d -p 8000:8000 -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer
Agora acesse o Portainer pela porta 9000. Aqui em casa, o Ubuntu está rodando no 192.168.1.44. Assim, digite:

    <ip_do_seu_Ubuntu>:9000


Pronto! Crie a senha e entre. Como estamos instalando o Portainer na mesma máquina onde está o Docker, escolha para administrar localmente a aplicação:




Pronto!

No próximo post, vamos reinstalar o Plex.