從 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 --version 和 wget --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-type | PANEL_TYPE | 來源面板類型(marzban 或 marzneshin) | marzban |
--panel-url | PANEL_URL | 來源面板 URL(例如 https://marzban.example.com) | - |
--panel-username | PANEL_USERNAME | 來源面板管理員使用者名稱 | - |
--panel-password | PANEL_PASSWORD | 來源面板管理員密碼 | - |
--remnawave-url | REMNAWAVE_URL | 目標面板 URL(例如 https://remnawave.example.com) | - |
--remnawave-token | REMNAWAVE_TOKEN | 目標面板 API 令牌(用作 Authorization Bearer) | - |
--batch-size | BATCH_SIZE | 每批處理的使用者數量 | 100 |
--last-users | LAST_USERS | 僅遷移最後 N 個使用者(0 = 所有使用者) | 0 |
--preferred-strategy | PREFERRED_STRATEGY | 流量重置策略(NO_RESET, DAY, WEEK, MONTH) | - |
--source-headers | SOURCE_HEADERS | 來源面板的附加請求標頭 | - |
--dest-headers | DEST_HEADERS | Remnawave 的附加請求標頭(例如 X-Api-Key) | - |
--preserve-status | PRESERVE_STATUS | 保留來源面板的使用者狀態 | false |
--preserve-subhash | PRESERVE_SUBHASH | 保留來源面板的使用者訂閱 URL 雜湊 | false |
--internal-squad | INTERNAL_SQUAD | 要指派的內部群組的 UUID(逗號分隔) | - |
--external-squad | EXTERNAL_SQUAD | 指派給所有建立使用者的外部群組的 UUID | - |
提示
如果您使用的是透過 Caddy 提供額外安全性的 Remnawave,需要按照以下步驟操作:
- 登入 Auth Portal 並導覽至 API Keys
- 簽發一個新的 API 金鑰
- 使用 --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 面板上驗證以下內容:
- 使用者數量:確保遷移的使用者數量與來源數量一致。
- 資料完整性:
- 使用者名稱
- 密碼(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_URL | Remnawave 面板 URL,可以是 http://remnawave:3000 或 https://panel.example.com | http://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_KEY、REMNAWAVE_API_TOKEN和CUSTOM_SUB_PREFIX)。 - 要取得
MARZBAN_LEGACY_SECRET_KEY,請使用以下語句查詢 Marzban 資料庫:例如,如果您的 Marzban 資料庫位於名為SELECT secret_key FROM jwt LIMIT 1;marzban-mysql的 Docker 容器中,請使用以下命令連接:將docker exec -it marzban-mysql mysql -uroot -pPasswordmarzban-mysql和Password替換為您的實際容器名稱和 root 密碼。 - 在 Remnawave 儀表板的 "API Tokens" 部分產生
REMNAWAVE_API_TOKEN。
5.3. 驗證舊版支援
部署更新的設定後:
- 重新啟動
remnawave-subscription-page服務:docker compose up -d --force-recreate - 測試舊版 Marzban 訂閱連結,確保它能正確解析並在 Remnawave 訂閱頁面上顯示使用者資料。