跳转到内容

部署指南

本指南涵盖 meridian deploy 的每个选项。如果这是你的第一次部署,从快速开始开始。

meridian deploy 198.51.100.10

一个服务器既是控制平面(Remnawave 面板)又是出口。Meridian 构建 meridian setup 生成的同样已审核拓扑,并用检查点应用它。在打印”完成”之前,它会通过交付的订阅推送真实流量。

不指定 IP 直接运行 meridian deploy,它会提示。添加 --yes 跳过确认:

meridian deploy 198.51.100.10 --client-name alice --yes

Meridian 使用 SSH 密钥登录。许多 VPS 提供商只给您一个 root 密码,所以当服务器拒绝您的密钥但接受密码时,交互式的 meridian deploy 会询问:

→ This server accepts only a password. Create a key for Meridian and install it now? [y/N]

回答 y 并输入密码(输入内容不可见)。Meridian 会在 ~/.config/meridian/ssh/meridian_ed25519 创建自己的密钥,将其加入服务器的 authorized_keys,检查它能否登录,把它保存到服务器配置中,然后继续。密码只用于这一条命令,从不保存或记录。主机密钥会先被验证,因此密码只会发送给您已接受其指纹的服务器。meridian setup 在您添加服务器时提供同样的功能。

没有终端、使用 --yes 或使用 --json 时,Meridian 从不提示:它会停止并给出手动命令。先安装一次您自己的密钥,然后重新运行:

ssh-copy-id root@198.51.100.10

加固会在部署后关闭密码登录,所以请保留密钥:之后的命令会自动使用它。

标志默认值说明
--sni HOST(自动)伪装目标。不指定时,部署会优先选择服务器所在子网内的网站,然后是 www.google.com、dl.google.com、www.cloudflare.com
--domain DOMAIN(无)你的域名:XHTTP 迁移到该域名上并新增 WSS,二者都经由 Cloudflare CDN
--hysteria2/--no-hysteria2启在 UDP/443 上提供 Hysteria2 作为最后的回退
--client-name NAMEdefault第一个客户端的名称
--display-name NAME(无)连接页面的标签
--icon EMOJI_OR_URL(无)页面图标 — 表情符号或图片 URL
--color PALETTEocean页面色彩主题 (ocean/sunset/forest/lavender/rose/slate)
--user USERrootSSH 用户(非 root 用户需无密码 sudo)
--ssh-port PORT22SSH 端口(如果不是 22)
--harden / --no-harden启仅 SSH 密钥登录、fail2ban 和 UFW 防火墙。--no-harden 用于与其他服务共享的服务器
--warp / --no-warp关通过 Cloudflare WARP 发送出站流量
--geo-block / --no-geo-block启通过代理阻止俄罗斯域名和 IP
--client-ips / --no-client-ips关让面板看到每个客户端的真实 IP(见客户端 IP)
--country CC自动查询显示在连接名称中的国家,例如 DE。Meridian 根据地址注册机构信息查询;如果不对,请手动指定
--yes跳过确认提示

脚本和 UI 的标志(--json、--events、--request、--dry-run)在 CLI 参考中描述。

伪装目标(SNI)是你的服务器所模仿的网站。它不是你拥有的域名 — 它是一个支持 TLS 1.3 的真实网站。任何探测你的服务器的人都会看到该网站的真实证书。

最好的目标就在你的服务器旁边。审查者看到的是 SNI 和你服务器 IP 的组合;当该网站的 DNS 确实指向同一网络时,这个组合看起来就是普通流量,而 VPS 地址上出现一个知名的国外网站则会很显眼。

不指定 --sni 时,首次部署会扫描服务器所在子网内的此类网站(约一分钟),保留 DNS 指向该子网、且通过 Reality 的 TLS 1.3 和 HTTP/2 检查的网站,然后回退到 www.google.com、dl.google.com 和 www.cloudflare.com,并使用真实流量能通过的第一个目标。meridian node add 以同样的方式选择邻近网站。用 --sni 指定的目标永远不会被替换;如果流量失败,部署会停止并告诉你。重新部署会保留已保存的目标。

想自己查看候选网站,可以扫描服务器的 IPv4 邻域:

meridian scan 198.51.100.10

扫描在服务器上运行固定的、校验和验证的 RealiTLScanner 构建,列出它找到的附近的证书域。然后用你的选择部署:

meridian deploy 198.51.100.10 --sni dl.google.com

要手动检查一个目标,运行 meridian check 198.51.100.10 --sni HOST。避免 apple.com 和 icloud.com — 它们的网络与 VPS 提供商不匹配。

当 meridian test --probe 报告伪装 SNI 被封锁时,无需重新部署即可把出口切换到另一个目标。Meridian 会拒绝 apple.com、icloud.com 和 www.microsoft.com(其证书对 Reality 来说太大),检查出口能否以 TLS 1.3 和 HTTP/2 访问新站点,显示审查并应用。旧名称会立即被替换而不是并存,因为一个 Reality 侦听器只模仿一个站点。应用在下次订阅刷新(每 6 小时)或用户手动刷新订阅时切换。中继请使用 meridian relay sni RELAY NEW_SNI。

meridian node sni 198.51.100.10 www.cloudflare.com
  • 伪装目标 (--sni) — 你不拥有的真实网站。Reality 模仿它。
  • 域名 (--domain) — 你确实拥有的域名,指向你的服务器。XHTTP 和 Hysteria2 移到它,它还添加通过 Cloudflare CDN 的 WSS 路径。详见域名模式。
meridian deploy 198.51.100.10 --no-hysteria2

每次部署都在 UDP/443 上提供 Hysteria2,使用你域名的证书或没有域名时的服务器 IP 证书。其流量用 salamander 混淆包装,所以审查者看到随机 UDP 而不是 QUIC。它可以在有损或高延迟网络上有帮助;当 UDP 被阻止时,应用回退到其前面列出的 TCP 方法。--no-hysteria2 关闭它。Hysteria2 不通过中继。

个性化连接页面,让接收者知道谁设置了他们的 VPN:

meridian deploy 198.51.100.10 --display-name "Alice 的 VPN" --icon 🚀 --color sunset
  • --display-name — 显示在页面标题和标题中
  • --icon — 显示在页面顶部的表情符号或图片 URL
  • --color — 强调色盘:ocean(默认)、sunset、forest、lavender、rose、slate

品牌定制保存在 cluster.yml 中,应用于每个客户端的连接页面。

要重新部署,运行相同的命令。Meridian 保持保存的路径、密钥和用户,所以现有链接继续工作。不指定 --sni 的重新部署保持保存的伪装目标。

在每次部署的末尾,Meridian 打印确切的重新部署命令及你的当前设置。用不同标志再次运行它改变服务器以匹配:添加或删除 --domain 或 --no-hysteria2 添加或删除这些路径。

meridian deploy 仅重新部署已经是你舰队中出口的服务器。要添加另一个服务器,使用 meridian node add NEW_IP。

不确定服务器是否合适?

meridian check 198.51.100.10

检查伪装目标、端口 443 是否空闲且可从外部访问、可选的域名 DNS、OS、磁盘空间和时钟偏差,无需安装任何东西。

meridian deploy 198.51.100.10 --user ubuntu

命令通过 sudo 运行,所以用户需要无密码 sudo。

如果你以 root 身份登录到服务器:

meridian deploy local

这跳过 SSH。check local、scan local 和 doctor local 工作方式相同,部署后,服务器上的后续命令也可本地运行。仍然建议从你自己的机器运行 Meridian,因为 meridian test 需要外部角度。

WARP 通过 Cloudflare 发送你的服务器的出站流量,所以网站看到 Cloudflare 地址而不是你的 VPS IP。

meridian deploy 198.51.100.10 --warp

WARP 有帮助时: 网站阻止数据中心 IP 范围,或当你想隐藏 VPS 地址不被目标网站看到。

你不需要它时: 大多数网站无需它也能正常工作,它添加一个跳跃(VPS → Cloudflare → 目标)。

Meridian 在代理模式下安装 cloudflare-warp 客户端(SOCKS5 在 127.0.0.1:40000),使其成为 Xray 的出站。传入连接不受影响。WARP 免费且不需要 Cloudflare 账户。

要仅发送选定的网站通过 WARP 并保持其他所有内容直接,改为在出口上添加路由而不是为所有流量打开 WARP。Meridian 在第一次路由需要时在出口上设置 WARP:

meridian route add exit-1 --via warp chatgpt.com netflix.com
meridian route add exit-1 --via block geosite:category-ads-all
meridian route list
meridian route remove exit-1 warp

值是域名(包括子域名)、geosite:NAME 列表或来自库存 v2fly 数据文件的 geoip:NAME 列表;一个路由包含一种。--via direct 在 WARP 出口上反向做:这些目标跳过 WARP。路由按您添加它们的顺序应用,在出口的默认出站之前,在地理封锁之前。这些路由位于服务器上;它们与在用户设备上发送俄罗斯网站直接的客户端侧规则分开。

默认情况下,服务器通过代理阻止俄罗斯域名(geosite:category-ru)和俄罗斯 IP 范围(geoip:ru)。这让你的 VPS IP 远离俄罗斯服务日志,降低被发现和阻止的机会。

如果你的用户需要通过 Meridian 访问这些网站,关闭它:

meridian deploy 198.51.100.10 --no-geo-block

要在保持阻止的同时打开俄罗斯网站直接访问,详见分流路由。

默认情况下,面板不会知道你的用户从哪里连接:每个 TCP 连接都经由服务器上的 nginx 到达 Xray,所以 Remnawave 记录的是服务器自己的地址。这样更保护隐私,不会保存任何关于用户位置的信息。

Remnawave 的按用户 IP 限制和连接日志需要真实地址。用下面的命令开启:

meridian deploy 198.51.100.10 --client-ips

nginx 随后会把每个客户端的地址传给 Xray 和面板。Hysteria2 是直接的 UDP 连接,始终显示真实地址。经由中继的连接显示中继的地址,经由 Cloudflare CDN 的 WebSocket 或 XHTTP 显示 Cloudflare 的地址。该设置对整个舰队生效;要关闭,不带该标志重新部署即可。

出口运行后,在国内服务器上添加中继,这样如果出口 IP 被阻止,用户保持有访问方式。详见中继指南。

meridian relay add 203.0.113.10 --exit 198.51.100.10

Meridian 安装 Remnawave 作为其面板。面板由 nginx 在随机秘密路径上反向代理,与连接页面路径分开,所以你分享的链接永不显示它。meridian panel 打印 URL 和管理员登录(--show-password 用于密码)。

像对待密码一样对待面板路径。CLI 使用相同的面板 API,所以 CLI 变更显示在面板中。Meridian 拥有它创建的主机、配置和模板:如果你在面板中编辑那些,meridian plan 报告差异,下次应用恢复 Meridian 的版本。客户端状态、限制、过期和您自己添加的用户是您的;详见 Web 面板。

Meridian 固定了它已测试的 Remnawave 版本。meridian fleet upgrade 会把你的服务器升级到同一主版本内最新的 Remnawave,无需等待 Meridian 更新。如果你自己升级 Remnawave,Meridian 不会降级它。