跳到主要内容

从 Marzban 迁移

本指南将引导您使用 Remnawave 迁移工具,将数据从 Marzban 面板迁移到 Remnawave 面板。

1. 服务器准备

1.1. 安装必要的依赖

通过更新系统包并安装 Git 和 wget,确保您的服务器已安装必要的工具。

# Update system packages
sudo apt-get update

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

运行 git --versionwget --version 以确认安装成功。

2. 下载迁移工具

2.1. 下载最新版本

从 GitHub 发布页面下载预编译的 Remnawave 迁移工具。

# 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. 解压工具

解压下载的压缩包以访问二进制文件。

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

解压后,您应该能在目录中看到 remnawave-migrate 二进制文件。使用 ls -l 验证。

3. 配置设置

3.1. 设置迁移参数

迁移工具使用命令行标志进行配置。以下是包含所有必需参数的示例命令。请将占位符值替换为您实际的服务器详细信息。

./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. 配置选项

该工具支持以下标志及其对应的环境变量:

标志环境变量描述默认值
--panel-typePANEL_TYPE源面板类型(marzbanmarzneshinmarzban
--panel-urlPANEL_URL源面板 URL(例如 https://marzban.example.com-
--panel-usernamePANEL_USERNAME源面板管理员用户名-
--panel-passwordPANEL_PASSWORD源面板管理员密码-
--remnawave-urlREMNAWAVE_URL目标面板 URL(例如 https://remnawave.example.com-
--remnawave-tokenREMNAWAVE_TOKEN目标面板 API 令牌(用作 Authorization Bearer)-
--batch-sizeBATCH_SIZE每批处理的用户数量100
--last-usersLAST_USERS仅迁移最后 N 个用户(0 = 所有用户)0
--preferred-strategyPREFERRED_STRATEGY流量重置策略(NO_RESET, DAY, WEEK, MONTH-
--source-headersSOURCE_HEADERS源面板的附加请求头-
--dest-headersDEST_HEADERSRemnawave 的附加请求头(例如 X-Api-Key)-
--preserve-statusPRESERVE_STATUS保留源面板的用户状态false
--preserve-subhashPRESERVE_SUBHASH保留源面板的用户订阅 URL 哈希false
--internal-squadINTERNAL_SQUAD要分配的内部组的 UUID(逗号分隔)-
--external-squadEXTERNAL_SQUAD分配给所有创建用户的外部组的 UUID-
提示

如果您使用的是通过 Caddy 提供额外安全性的 Remnawave,需要按照以下步骤操作:

  1. 登录 Auth Portal 并导航到 API Keys
  2. 签发一个新的 API 密钥
  3. 使用 --dest-headers 标志以以下格式传递该密钥:
    --dest-headers="X-Api-Key:api-key-from-auth-portal"
提示
  • 使用 --last-users=5 进行少量用户的测试迁移。
  • 从 Remnawave 面板设置(例如在 API 或集成下)获取您的 Remnawave API 令牌。
  • 如果未指定 --preferred-strategy,将使用 Marzban 的原始策略。YEAR 策略将转换为 NO_RESET

3.3. 将用户分配到组

您可以自动将所有迁移的用户分配到内部和/或外部组:

# 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. 迁移后验证

4.1. 需要检查的内容

迁移后,在 Remnawave 面板上验证以下内容:

  1. 用户数量:确保迁移的用户数量与源数量一致。
  2. 数据完整性
    • 用户名
    • 密码(Trojan、VLESS UUID、Shadowsocks)
    • 流量限制和重置策略
    • 过期日期
    • 用户状态(如果使用了 --preserve-status
    • 订阅 URL 哈希(如果使用了 --preserve-subhash
    • 组分配(如果使用了 --internal-squad--external-squad
提示

登录 Remnawave 面板,随机抽查几个用户以确认数据准确性。

5. 支持旧版 Marzban 订阅页面

迁移到 Remnawave 后,确保旧版 Marzban 订阅页面支持和渲染的唯一方式是使用 https://github.com/remnawave/subscription-page/ 的存储库。

5.1. 默认 Docker Compose 配置

默认情况下,订阅页面服务的 docker-compose.yml 文件如下所示:

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. 针对 Marzban 兼容性的调整

在迁移过程中,您需要确保与 Marzban 订阅路径的兼容性,并启用 Marzban 订阅链接的解密。将默认配置中的 environment 部分替换为以下内容:

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

配置选项说明

变量描述示例值
REMNAWAVE_PANEL_URLRemnawave 面板 URL,可以是 http://remnawave:3000https://panel.example.comhttp://remnawave:3000
APP_PORT订阅页面服务运行的端口。3010
MARZBAN_LEGACY_LINK_ENABLED启用对旧版 Marzban 订阅链接的支持。必须设置为 true 才能使用以下选项。true
MARZBAN_LEGACY_SECRET_KEY来自 Marzban 数据库的密钥,用于解密旧版链接所必需。secret
REMNAWAVE_API_TOKEN从 Remnawave 面板仪表板("API Tokens" 下)生成的 API 令牌。token
CUSTOM_SUB_PREFIX订阅 URL 的自定义前缀,以匹配您的 Marzban 设置(例如 sub)。sub
提示
  • 如果 MARZBAN_LEGACY_LINK_ENABLED 设置为 true,则必须提供所有后续变量(MARZBAN_LEGACY_SECRET_KEYREMNAWAVE_API_TOKENCUSTOM_SUB_PREFIX)。
  • 要获取 MARZBAN_LEGACY_SECRET_KEY,请使用以下语句查询 Marzban 数据库:
    SELECT secret_key FROM jwt LIMIT 1;
    例如,如果您的 Marzban 数据库位于名为 marzban-mysql 的 Docker 容器中,请使用以下命令连接:
    docker exec -it marzban-mysql mysql -uroot -pPassword
    marzban-mysqlPassword 替换为您的实际容器名称和 root 密码。
  • 在 Remnawave 仪表板的 "API Tokens" 部分生成 REMNAWAVE_API_TOKEN

5.3. 验证旧版支持

部署更新的配置后:

  1. 重启 remnawave-subscription-page 服务:
    docker compose up -d --force-recreate
  2. 测试旧版 Marzban 订阅链接,确保它能正确解析并在 Remnawave 订阅页面上显示用户数据。