想自己搭一条节点,但连 SSH 是什么都不知道?这篇只做一件事:让你从一台空白 VPS 开始,跟着复制粘贴,搭好一条 Marzban + VLESS TCP REALITY 节点,再导入手机或电脑使用。

本文核对时间为 2026 年 5 月 25 日。Marzban 官方最新正式版为 v0.8.4(发布于 2025 年 1 月 9 日)。Reality 是当前比较适合抗干扰场景的配置之一,但请记住:不存在保证永久不被干扰、永久不失效的节点方案

本教程用于合法的个人网络连接与隐私保护用途。请遵守所在地法律法规和 VPS 服务商规则,不要公开分享后台账号、节点链接或备份文件。

这篇教程最终能做出什么?

跟着做完,你会得到:

  • 一台自己控制的 VPS;
  • 一个可以在网页里创建用户的 Marzban 面板;
  • 一条使用 443 端口的 VLESS TCP REALITY 节点;
  • 一个可以导入到手机、Windows 或 Mac 客户端的连接链接。

为了让第一次搭建尽量少踩坑,本篇不让你先买域名、不让你先申请证书,也不让你理解一大堆术语。你只需要按顺序做,不要跳步骤。

开始前只准备 3 样东西

1. 一台 VPS

购买 VPS 时,选择一台有独立 IPv4 的服务器,并安装纯净系统。系统建议选择:

  • Ubuntu 22.04 或 Ubuntu 24.04;
  • 或 Debian 12。

新手购买后,只需要在商家后台找到并记下这 3 项:

服务器 IP:例如 123.123.123.123
用户名:通常是 root
密码:商家发给你的 root 密码

2. 一台电脑

第一次搭建推荐用 Windows 或 Mac 电脑完成,因为复制命令和打开面板更简单。

3. 一个导入节点的软件

最省事的选择是 Hiddify App,一个软件可覆盖 Windows、macOS、Android 与 iOS:

VPS 怎么选?给新手的两个入口

下面两个链接是本站推荐链接,购买可能为本站带来推广收益。价格、库存、线路名称和实际体验请以下单页面为准。

官方主页也一并附上,便于核对品牌信息:

买好 VPS 并重装成纯净系统后,继续下一步。

第 1 步:确认服务器开放了两个端口

在 VPS 商家的防火墙或安全组页面中,确认下面两个 TCP 端口允许访问:

22    用来连接服务器
443   用来运行节点

本教程不会把面板的 8000 端口直接开放到公网。我们会用一条更安全、也能直接抄的命令打开面板。

第 2 步:第一次用 SSH 连接服务器

Windows 用户

  1. 点击开始菜单,搜索并打开 PowerShell 或终端。
  2. 把下面命令中的 123.123.123.123 换成你的服务器 IP,然后回车:
ssh -L 8000:127.0.0.1:8000 root@123.123.123.123

Mac 用户

  1. 打开终端应用。
  2. 把下面命令中的 IP 换成你的服务器 IP,然后回车:
ssh -L 8000:127.0.0.1:8000 root@123.123.123.123

第一次连接时会看到什么?

如果窗口询问是否继续连接,输入:

yes

接着输入商家提供的 root 密码。输入密码时屏幕不会显示星号,也不会显示字符,这是正常现象,输入完按回车即可。

当你看到类似 root@服务器名称:~# 的文字,就代表成功进入服务器了。后面所有命令都粘贴在这个窗口里执行。

喜欢图形界面的读者,也可以使用 Termius 连接 SSH。官方地址:https://termius.com/download。不过首次搭建仍建议使用电脑终端,方便使用本文的面板安全访问方式。

第 3 步:复制命令安装 Marzban

在刚刚连上的黑色窗口中,依次粘贴下面两段命令。第一段准备下载工具:

apt update -y && apt install -y curl
如果你看到 131 packages can be upgraded,或者 Debian 12 出现 stable 变为 oldstable 的提示,不代表命令失败。只要最后出现 Setting up curl,就可以继续下一段。Debian 12 被 Debian 13 接替后显示 oldstable 属于正常现象。

第二段调用 Marzban 官方安装脚本。由于本文第 2 步使用的是 root 登录,请复制下面这条不带 sudo 的命令:

bash -c "$(curl -sL https://github.com/Gozargah/Marzban-scripts/raw/master/marzban.sh)" @ install
如果你曾按带 sudo 的命令执行,并看到 -bash: sudo: command not found,原因是你已经使用 root 账号登录,而纯净系统没有预装 sudo。不用单独安装 sudo,直接重新执行上面不带 sudo 的命令即可。

等待安装跑完。当窗口不断显示日志时,按键盘上的 Ctrl + C 退出日志查看即可,不会卸载面板。

然后创建有管理权限的后台管理员账号。下面命令中的 --sudoMarzban 面板管理员权限选项,并不是 Linux 的 sudo 命令,请保留:

marzban cli admin create --sudo

根据提示填写用户名和密码。这个密码是面板后台密码,请单独保存,不要和别人共享。

第 4 步:安全打开 Marzban 面板

不要关闭刚才的终端窗口。现在在同一台电脑的浏览器中打开:

http://127.0.0.1:8000/dashboard/

输入你刚创建的管理员账号和密码登录。

这里使用的是你电脑到服务器之间的 SSH 安全通道,所以不需要把 8000 面板端口暴露给全网。以后想再次管理面板时,先重新执行第 2 步的 SSH 命令,再访问这个地址即可。

第 5 步:生成 Reality 需要的两串内容

回到 SSH 终端窗口,先粘贴下面命令:

docker exec marzban-marzban-1 xray x25519

窗口会返回两行内容,大致如下:

Private key: 一长串字符
Public key: 一长串字符

只复制并暂存 Private key 后面那串字符,下一步会用到。Public key 不需要手动填写,Marzban 会自动处理。

再执行下面命令:

openssl rand -hex 8

它会输出一串短字符,把它也暂存下来。这串内容下文叫作 shortId

第 6 步:把面板切换成 VLESS Reality 节点

回到 Marzban 网页面板:

  1. 点击右上角的设置按钮,进入 Core Settings
  2. 先把编辑框中原来的全部内容复制到本地记事本保存一份,出错时可以还原。
  3. 本步骤只适合刚安装、还没有正式用户的新面板。选中编辑框全部原内容,替换为下方整段配置。
  4. 把配置里的 替换成你的PrivateKey 换成第 5 步得到的 Private key。
  5. 替换成你的shortId 换成第 5 步得到的 shortId。
{
  "log": {
    "loglevel": "warning"
  },
  "routing": {
    "rules": [
      {
        "ip": ["geoip:private"],
        "outboundTag": "BLOCK",
        "type": "field"
      }
    ]
  },
  "inbounds": [
    {
      "tag": "VLESS TCP REALITY",
      "listen": "0.0.0.0",
      "port": 443,
      "protocol": "vless",
      "settings": {
        "clients": [],
        "decryption": "none"
      },
      "streamSettings": {
        "network": "tcp",
        "tcpSettings": {},
        "security": "reality",
        "realitySettings": {
          "show": false,
          "dest": "www.microsoft.com:443",
          "xver": 0,
          "serverNames": ["www.microsoft.com"],
          "privateKey": "替换成你的PrivateKey",
          "shortIds": ["替换成你的shortId"]
        }
      },
      "sniffing": {
        "enabled": true,
        "destOverride": ["http", "tls", "quic"]
      }
    }
  ],
  "outbounds": [
    {
      "protocol": "freedom",
      "tag": "DIRECT"
    },
    {
      "protocol": "blackhole",
      "tag": "BLOCK"
    }
  ]
}

确认两个替换位置不再保留中文占位文字后,点击保存,并按页面提示重启 Core 或重启服务。

如果需要用命令重启,在 SSH 窗口输入:

marzban restart

第 7 步:在面板中创建自己的连接

回到 Marzban 首页,按下面内容创建用户:

  1. 点击 Create User 或创建用户按钮。
  2. 用户名随便取一个容易认的名字,例如 myphone
  3. 选择 VLESS TCP REALITY 这个入站。
  4. 如果页面显示 Flow 选项,选择 xtls-rprx-vision
  5. 流量限制和到期时间自己需要时再填写;只给自己测试可以先不限制。
  6. 点击创建或保存。

创建成功后,打开这个用户的分享信息,复制以 vless:// 开头的链接,或者显示二维码让手机扫描。

请检查连接链接中是否包含:

服务器IP:443
security=reality

如果链接里的地址意外显示成 127.0.0.1,把它改成你的服务器公网 IP 再导入客户端。

第 8 步:导入 Hiddify 并测试连接

  1. 从官方地址安装 Hiddify App:https://github.com/hiddify/hiddify-app/releases
  2. 打开应用,点击添加配置或加号。
  3. 选择从剪贴板导入,把刚复制的 vless 链接导入;手机也可以直接扫二维码。
  4. 点击连接按钮。
  5. 打开一个网页测试是否可以正常访问。

如果你更习惯其他客户端,下面是常见开源客户端的官方项目页:

不要从不明网盘或群文件下载安装包,优先从官方项目或官方商店下载。

连不上时,只按这 5 条排查

1. SSH 根本连不上

核对服务器 IP、用户名 root 和密码;再到商家防火墙页面确认 TCP 22 已开放。如果新服务器密码已经混乱,最省时间的做法通常是重装纯净系统后重新开始。

2. 浏览器打不开面板

确认第 2 步的 SSH 窗口没有关闭,然后在 SSH 窗口执行:

marzban status

仍打不开时执行:

marzban restart

再刷新面板地址。

3. 客户端导入了,但一直超时

先到 VPS 商家防火墙页面确认 TCP 443 已开放。然后核对配置中两处内容是否粘贴正确:Private key 与 shortId。最后检查创建用户时是否选择了 VLESS TCP REALITY 和 xtls-rprx-vision。

4. 保存 Core Settings 后面板报错

把第 6 步提前备份的原始配置粘回去保存,然后重新检查 JSON 是否少了逗号、引号,或者还保留着中文占位内容。

5. 以后想登录面板却忘了地址

重新连接 SSH:

ssh -L 8000:127.0.0.1:8000 root@你的服务器IP

保持窗口开启,然后访问:

http://127.0.0.1:8000/dashboard/

搭好以后至少做两件事

1. 先做一次备份

在 SSH 窗口执行:

marzban backup

备份文件可能包含你的节点资料,不要公开上传或发给陌生人。

2. 更新前先备份,再更新

以后要更新面板时,依次执行:

marzban backup
marzban update

遇到问题可以查看日志:

marzban logs

进阶升级:搭好之后怎么更安全、更方便?

前面的基础方案已经能用,而且面板只通过 SSH 隧道访问,适合只给自己使用的读者。下面的升级项不是必须一次做完,请先确认基础节点已成功连接,再选择需要的项目逐一操作。

先选路线:保留 443 节点,还是公开 HTTPS 面板?

这一步非常重要,因为同一台服务器的同一个端口不能同时交给两个程序使用。

方案节点端口面板访问方式适合谁
A. 保持基础方案(推荐先用)Reality 使用 443SSH 隧道访问本机地址自用、希望最少改动、优先保留 443 节点
B. 域名 HTTPS 面板Reality 改用 8443,Caddy 使用 80/443直接打开 HTTPS 域名需要多设备管理面板或使用 HTTPS 订阅入口

不要在 Reality 仍占用 443 的情况下,直接照抄 Caddy 监听 443 的配置;服务会因为抢占端口而无法正常启动。

升级 1:只开放真正需要的端口

无论选择哪条路线,都建议在 VPS 防火墙中只放行所需端口。本节以 Ubuntu/Debian 常用的 UFW 为例。

先安装并放行 SSH,务必把这一步放在启用防火墙之前:

apt update -y && apt install -y ufw
ufw allow 22/tcp

如果选择 方案 A:Reality 继续使用 443,面板继续走 SSH 隧道,执行:

ufw allow 443/tcp
ufw enable
ufw status verbose

如果选择 方案 B:Caddy 公开 HTTPS 面板,Reality 改到 8443,执行:

ufw allow 80/tcp
ufw allow 443/tcp
ufw allow 8443/tcp
ufw enable
ufw status verbose

这里不需要开放 8000。如果你之前在服务商安全组里放行了 8000,确认新访问方式可用后将它关闭。

升级 2:给面板配置域名和 HTTPS(选择方案 B 才操作)

这一步的效果是:你可以从 https://panel.example.com/dashboard/ 登录面板,订阅地址也能使用 HTTPS。这里的 SSL 是保护面板与订阅入口;Reality 节点自身不依靠这个证书工作。

你需要先准备一个域名,例如 panel.example.com,并在域名解析处创建一条 A 记录,指向你的 VPS 公网 IP。等待解析生效后再继续。

2.1 先把 Reality 节点从 443 改到 8443

在 Marzban 面板的 Core Settings 中找到之前粘贴的 VLESS TCP REALITY 配置,将这一行:

"port": 443,

改为:

"port": 8443,

保存并重启 Core。随后重新打开用户的分享链接并重新导入客户端,因为节点端口已经变化。确认客户端还能连接后,再继续配置面板 HTTPS。

2.2 在服务器上备份当前面板文件

在 SSH 窗口执行:

cd /opt/marzban
cp docker-compose.yml docker-compose.yml.bak.$(date +%F)
cp .env .env.bak.$(date +%F)

2.3 添加 Caddy 自动申请证书

官方文档推荐的新手 SSL 做法是 Caddy,它会自动申请和维护证书。打开 Docker 配置文件:

nano /opt/marzban/docker-compose.yml

把原有 marzban 服务保留,并参考下方结构添加 Caddy 服务与底部的共享数据卷。如果你的原文件里已有额外设置,不要直接删掉:

services:
  marzban:
    image: gozargah/marzban:latest
    restart: always
    env_file: .env
    network_mode: host
    volumes:
      - /var/lib/marzban:/var/lib/marzban
    depends_on:
      - caddy
  caddy:
    image: caddy
    restart: always
    ports:
      - 80:80
      - 443:443
    volumes:
      - /var/lib/marzban:/var/lib/marzban
      - ./Caddyfile:/etc/caddy/Caddyfile
      - caddy_volume:/data
      - caddy_volume:/config

volumes:
  caddy_volume:

Ctrl + O、回车保存,再按 Ctrl + X 退出。

新建 Caddy 配置文件,把域名改成你自己的真实域名:

nano /opt/marzban/Caddyfile

粘贴:

panel.example.com {
    reverse_proxy unix//var/lib/marzban/marzban.socket
}

保存退出。注意文件名必须是大写 C 开头的 Caddyfile

2.4 设置 HTTPS 订阅地址并重启

编辑环境文件:

nano /opt/marzban/.env

添加或修改下面两行,将域名换为自己的域名:

UVICORN_UDS=/var/lib/marzban/marzban.socket
XRAY_SUBSCRIPTION_URL_PREFIX=https://panel.example.com

同时确认下面两个设置保持关闭状态;如文件中没有,可添加:

DEBUG=false
DOCS=false

保存后运行:

marzban restart
marzban status
marzban logs

然后访问:

https://panel.example.com/dashboard/

若能看到安全锁标志并成功登录,HTTPS 面板就配置完成了。确认 HTTPS 可用后,不要再对公网开放面板的 8000 端口。

2.5 HTTPS 无法打开时先查这三项

  1. 域名 A 记录是否确实指向你的服务器 IP。
  2. 服务商防火墙与 UFW 是否都允许 TCP 80 和 TCP 443。
  3. Reality 节点是否已经改为 8443,没有继续和 Caddy 抢占 443。

官方还提供了手动证书、Uvicorn 和 HAProxy 的方式,但对第一次升级的读者而言,Caddy 步骤更少,建议先把这一种跑通。

升级 3:强化 SSH 登录,防止密码被反复尝试

SSH 是你管理服务器的入口。最稳妥的方向是使用 SSH 密钥登录,并在确认密钥成功后关闭密码登录。

3.1 在自己的电脑生成密钥

在你自己的电脑终端中执行,不是在 VPS 里执行:

ssh-keygen -t ed25519

一路按回车即可。Mac 或 Linux 用户可用下方命令上传公钥:

ssh-copy-id root@你的服务器IP

Windows 用户可以在 Termius 中创建并添加 SSH Key,官方入口:https://termius.com/download

3.2 必须先测试密钥能否登录

保留当前已经连上的 SSH 窗口不要关闭,再打开第二个终端窗口测试:

ssh root@你的服务器IP

只有在新窗口不需要 root 密码也能登录成功时,才继续下一步。测试失败就先停在这里,不要关闭密码登录。

3.3 关闭密码登录

在 VPS 中先备份 SSH 配置:

cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak.$(date +%F)
nano /etc/ssh/sshd_config

找到或新增下面两行:

PermitRootLogin prohibit-password
PasswordAuthentication no

保存后先检测配置,再重载 SSH:

sshd -t && systemctl reload ssh

不要马上关闭当前终端,再开一个新窗口确认仍能用密钥登录。确认成功后,服务器就不再接受 root 密码直接登录。

升级 4:安装 Fail2Ban,自动临时屏蔽暴力尝试

Fail2Ban 会根据 SSH 失败登录日志,暂时封禁反复尝试密码的来源 IP。它不能替代强密码或 SSH 密钥,但可以减少反复扫描。

apt install -y fail2ban
cat > /etc/fail2ban/jail.local <<'EOF'
[sshd]
enabled = true
maxretry = 5
findtime = 10m
bantime = 1h
EOF
systemctl enable --now fail2ban
fail2ban-client status sshd

升级 5:备份、更新和敏感信息保护

至少在第一次配置完成后和每次更新前各做一次备份:

marzban backup

需要定期备份时,可以查看官方脚本提供的备份服务命令:

marzban backup-service

必须注意:备份里可能包含数据库、订阅信息、证书和配置。备份文件不要公开上传,也不要发送到公共群组。

更新面板和 Xray 前,建议按这个顺序操作:

marzban backup
marzban update
marzban core-update
marzban status

更新后重新测试后台登录、自己的客户端连接与订阅链接。个人使用不要安装官方标记为开发中的 dev 版本。

升级 6:多设备、多用户和流量限制

即便只有自己使用,也建议不同设备创建不同用户,例如 iphone、windows、ipad。这样其中一台设备的链接泄露时,只需要停用一个用户,不会影响其他设备。

在面板里可以继续为每个用户设置:

  • 流量额度;
  • 到期时间;
  • 单独停用或重新生成连接。

不要把自己的节点链接发到公开频道、评论区或截图中;一条连接链接被别人拿到,就相当于别人也拿到了你的节点使用权。

升级 7:用户多了再考虑 MySQL 与多节点

只给自己或少量家人使用时,官方默认的 SQLite 已经够用。只有当你开始管理很多用户或多个节点时,再考虑 MySQL:

bash -c "$(curl -sL https://github.com/Gozargah/Marzban-scripts/raw/master/marzban.sh)" @ install --database mysql

这条命令适合新安装;已有数据的面板不要直接重装覆盖,应先完整备份并查阅迁移方案。

如果要在不同地区增加节点,可继续阅读官方 Marzban-node 文档:

初学者建议先稳定维护好一台服务器,再扩展第二台。

进阶完成后的检查单

  • [ ] 只放行当前方案需要的端口,公网没有开放面板 8000。
  • [ ] 选择 HTTPS 面板时,域名访问正常,节点已从 443 改为 8443 并重新导入测试。
  • [ ] 环境文件中 DEBUG 与 DOCS 都设置为 false。
  • [ ] SSH 密钥登录经过第二个窗口验证后,才关闭密码登录。
  • [ ] Fail2Ban 已运行,并可以看到 SSH 防护状态。
  • [ ] 每次更新前备份,且备份不会公开泄露。
  • [ ] 每台设备使用独立用户,泄露时可以单独撤销。

所用项目与工具的官方地址

用途项目或工具官方地址
节点管理面板Marzbanhttps://github.com/Gozargah/Marzban
安装脚本Marzban-scriptshttps://github.com/Gozargah/Marzban-scripts
官方安装文档Marzban Documentationhttps://gozargah.github.io/marzban/en/docs/installation
Reality 配置示例Xray Inbounds 文档https://gozargah.github.io/marzban/en/docs/xray-inbounds
HTTPS 面板说明Marzban SSL 文档https://gozargah.github.io/marzban/en/examples/marzban-ssl
备份说明Marzban Backup 文档https://gozargah.github.io/marzban/en/examples/backup
多节点说明Marzban-node 文档https://gozargah.github.io/marzban/en/docs/marzban-node
面板底层核心Xray-corehttps://github.com/XTLS/Xray-core
容器运行环境Dockerhttps://docs.docker.com/
命令下载工具curlhttps://curl.se/
密钥与证书工具OpenSSLhttps://www.openssl.org/
命令行文本编辑器GNU nanohttps://www.nano-editor.org/
Ubuntu 防火墙说明UFWhttps://ubuntu.com/server/docs/how-to/security/firewalls/
SSH 图形客户端(可选)Termiushttps://termius.com/download
自动 HTTPS 反向代理Caddyhttps://caddyserver.com/docs/
SSH 服务文档OpenSSHhttps://www.openssh.com/manual.html
SSH 防暴力尝试Fail2Banhttps://github.com/fail2ban/fail2ban
全平台导入客户端Hiddify Apphttps://github.com/hiddify/hiddify-app
Windows 备选客户端v2rayNhttps://github.com/2dust/v2rayN
Android 备选客户端v2rayNGhttps://github.com/2dust/v2rayNG
VPS 推荐DMIThttps://www.dmit.io/
VPS 推荐RackNerdhttps://www.racknerd.com/

最后提醒

如果你只是第一次自建,不要一上来研究几十种协议和脚本。先按本文完成一条 VLESS TCP REALITY,确认电脑和手机都能连接,再考虑域名、HTTPS 面板、多节点与定期维护。

本文版本核对日期为 2026 年 5 月 25 日。如果你在更晚时间阅读,正式动手前请先查看 Marzban 官方发布页:https://github.com/Gozargah/Marzban/releases


相关阅读

最后修改:2026 年 05 月 26 日
如果觉得我的文章对你有用,请随意赞赏