Pular para o conteúdo principal

Migrar do Marzban

Este guia orienta você no processo de migração de dados de um painel Marzban para um painel Remnawave usando a ferramenta de migração do Remnawave.

1. Preparação do Servidor

1.1. Instalando as Dependências Necessárias

Certifique-se de que seu servidor tenha as ferramentas necessárias instaladas, atualizando os pacotes do sistema e instalando Git e wget.

# Update system packages
sudo apt-get update

# Install Git and wget
sudo apt-get install -y git wget
dica

Execute git --version e wget --version para confirmar a instalação bem-sucedida.

2. Baixando a Ferramenta de Migração

2.1. Baixando o Último Lançamento

Baixe a ferramenta de migração Remnawave pré-compilada da página de lançamentos do GitHub.

# Create and navigate to a working directory
mkdir -p /opt/remnawave && cd /opt/remnawave

# Download the latest version (v2.1.0 as of this guide)
wget https://github.com/remnawave/migrate/releases/download/v2.1.0/remnawave-migrate-v2.1.0-linux-amd64.tar.gz

2.2. Extraindo a Ferramenta

Descompacte o arquivo baixado para acessar o binário.

# Extract the tarball
tar -xf remnawave-migrate-v2.1.0-linux-amd64.tar.gz
dica

Após a extração, você deve ver o binário remnawave-migrate no seu diretório. Use ls -l para verificar.

3. Configuração

3.1. Configurando os Parâmetros de Migração

A ferramenta de migração usa flags de linha de comando para configuração. Abaixo está um exemplo de comando com todos os parâmetros necessários. Substitua os valores de espaço reservado pelos detalhes reais do seu servidor.

./remnawave-migrate \
--panel-type=marzban \
--panel-url=https://your-marzban-server \
--panel-username=admin \
--panel-password=your-admin-password \
--remnawave-url=https://your-remnawave-server \
--remnawave-token=your-remnawave-token \
--preserve-status

3.2. Opções de Configuração

A ferramenta suporta os seguintes flags e suas variáveis de ambiente correspondentes:

FlagVariável de AmbienteDescriçãoPadrão
--panel-typePANEL_TYPETipo do painel de origem (marzban ou marzneshin)marzban
--panel-urlPANEL_URLURL do painel de origem (ex.: https://marzban.example.com)-
--panel-usernamePANEL_USERNAMENome de usuário admin do painel de origem-
--panel-passwordPANEL_PASSWORDSenha admin do painel de origem-
--remnawave-urlREMNAWAVE_URLURL do painel de destino (ex.: https://remnawave.example.com)-
--remnawave-tokenREMNAWAVE_TOKENToken de API do painel de destino (usado como Authorization Bearer)-
--batch-sizeBATCH_SIZENúmero de usuários a processar por lote100
--last-usersLAST_USERSMigrar apenas os últimos N usuários (0 = todos os usuários)0
--preferred-strategyPREFERRED_STRATEGYEstratégia de reset de tráfego (NO_RESET, DAY, WEEK, MONTH)-
--source-headersSOURCE_HEADERSCabeçalhos adicionais para o painel de origem-
--dest-headersDEST_HEADERSCabeçalhos adicionais para o Remnawave (ex.: X-Api-Key)-
--preserve-statusPRESERVE_STATUSPreservar status do usuário do painel de origemfalse
--preserve-subhashPRESERVE_SUBHASHPreservar hash da URL de assinatura do usuário do painel de origemfalse
--internal-squadINTERNAL_SQUADUUID(s) do(s) grupo(s) interno(s) a atribuir (separados por vírgula)-
--external-squadEXTERNAL_SQUADUUID do grupo externo a atribuir a todos os usuários criados-
dica

Se você estiver usando o Remnawave com segurança adicional fornecida pelo Caddy, siga estas etapas:

  1. Faça login no Auth Portal e navegue até API Keys
  2. Emita uma nova chave de API
  3. Passe esta chave usando o flag --dest-headers no seguinte formato:
    --dest-headers="X-Api-Key:api-key-from-auth-portal"
dica
  • Use --last-users=5 para uma migração de teste com um subconjunto pequeno de usuários.
  • Obtenha seu token de API do Remnawave nas configurações do painel Remnawave (ex.: em API ou Integrações).
  • Se --preferred-strategy não for especificado, a estratégia original do Marzban será usada. A estratégia YEAR é convertida para NO_RESET.

3.3. Atribuindo Usuários a Grupos

Você pode atribuir automaticamente todos os usuários migrados a grupos internos e/ou externos:

# Assign to a single internal squad
./remnawave-migrate \
[other flags...] \
--internal-squad=e5201a6a-c50e-4b58-9ecb-a4c26c5e74c8

# Assign to multiple internal squads
./remnawave-migrate \
[other flags...] \
--internal-squad=uuid1,uuid2,uuid3

# Assign to an external squad
./remnawave-migrate \
[other flags...] \
--external-squad=f6302b7b-d61f-5c69-0fdc-b5d37d6e85d9

# Assign to both internal and external squads
./remnawave-migrate \
[other flags...] \
--internal-squad=uuid1,uuid2 \
--external-squad=uuid3

4. Verificação Pós-Migração

4.1. O Que Verificar

Após a migração, verifique o seguinte no painel Remnawave:

  1. Contagem de Usuários: Certifique-se de que o número de usuários migrados corresponde à origem.
  2. Integridade dos Dados:
    • Nomes de usuário
    • Senhas (Trojan, VLESS UUID, Shadowsocks)
    • Limites de tráfego e estratégias de reset
    • Datas de expiração
    • Status dos usuários (se --preserve-status foi usado)
    • Hashes de URL de assinatura (se --preserve-subhash foi usado)
    • Atribuições de grupo (se --internal-squad ou --external-squad foi usado)
dica

Faça login no painel Remnawave e verifique aleatoriamente alguns usuários para confirmar a precisão dos dados.

5. Suporte a Páginas de Assinatura Legadas do Marzban

Após migrar para o Remnawave, a única maneira de garantir suporte e renderização de páginas de assinatura legadas do Marzban é usando o repositório em https://github.com/remnawave/subscription-page/.

5.1. Configuração Padrão do Docker Compose

Por padrão, o arquivo docker-compose.yml para o serviço de página de assinatura é assim:

services:
remnawave-subscription-page:
image: remnawave/subscription-page:latest
container_name: remnawave-subscription-page
hostname: remnawave-subscription-page
restart: always
environment:
- APP_PORT=3010
- REMNAWAVE_PANEL_URL=http://remnawave:3000
ports:
- '127.0.0.1:3010:3010'
networks:
- remnawave-network
networks:
remnawave-network:
driver: bridge
external: true

5.2. Ajustando para Compatibilidade com Marzban

Durante a migração, você precisa garantir compatibilidade com os caminhos de assinatura do Marzban e habilitar a descriptografia dos links de assinatura do Marzban. Substitua a seção environment na configuração padrão pelo seguinte:

services:
remnawave-subscription-page:
image: remnawave/subscription-page:latest
container_name: remnawave-subscription-page
hostname: remnawave-subscription-page
restart: always
environment:
- APP_PORT=3010
- REMNAWAVE_PANEL_URL=http://remnawave:3000
- MARZBAN_LEGACY_LINK_ENABLED=true
- MARZBAN_LEGACY_SECRET_KEY=secret
- REMNAWAVE_API_TOKEN=token
- CUSTOM_SUB_PREFIX=sub
ports:
- '127.0.0.1:3010:3010'
networks:
- remnawave-network
networks:
remnawave-network:
driver: bridge
external: true

Explicação das Opções de Configuração

VariávelDescriçãoValor de Exemplo
REMNAWAVE_PANEL_URLURL do Painel Remnawave, pode ser http://remnawave:3000 ou https://panel.example.comhttp://remnawave:3000
APP_PORTA porta em que o serviço de página de assinatura é executado.3010
MARZBAN_LEGACY_LINK_ENABLEDHabilita suporte para links de assinatura legados do Marzban. Deve ser true para usar as opções abaixo.true
MARZBAN_LEGACY_SECRET_KEYA chave secreta do seu banco de dados Marzban, necessária para descriptografar links legados.secret
REMNAWAVE_API_TOKENO token de API gerado no painel do Remnawave (em "API Tokens").token
CUSTOM_SUB_PREFIXUm prefixo personalizado para URLs de assinatura para corresponder ao seu setup do Marzban (ex.: sub).sub
dica
  • Se MARZBAN_LEGACY_LINK_ENABLED for definido como true, todas as variáveis subsequentes (MARZBAN_LEGACY_SECRET_KEY, REMNAWAVE_API_TOKEN e CUSTOM_SUB_PREFIX) devem ser fornecidas.
  • Para recuperar o MARZBAN_LEGACY_SECRET_KEY, consulte seu banco de dados Marzban com:
    SELECT secret_key FROM jwt LIMIT 1;
    Por exemplo, se seu banco de dados Marzban estiver em um contêiner Docker chamado marzban-mysql, conecte-se a ele usando:
    docker exec -it marzban-mysql mysql -uroot -pPassword
    Substitua marzban-mysql e Password pelo nome real do seu contêiner e senha root.
  • Gere o REMNAWAVE_API_TOKEN no painel do Remnawave na seção "API Tokens".

5.3. Verificando o Suporte Legado

Após implantar a configuração atualizada:

  1. Reinicie o serviço remnawave-subscription-page:
    docker compose up -d --force-recreate
  2. Teste um link de assinatura antigo do Marzban para garantir que ele seja resolvido corretamente e exiba dados do usuário na página de assinatura do Remnawave.