双 VPS Hysteria 2 双跳跃主备高可用架构与全自动容灾实战指南
# 双 VPS Hysteria 2 双跳跃主备高可用架构与全自动容灾实战指南
> **前言**:本文记录了一套基于 **Hysteria 2(QUIC)协议** 的企业级高可用网络拓扑落地实操。
方案采用“双机端口跳跃 + 搬瓦工顶级线路主力 + RackNerd 备用容灾 + 软路由内核级 Fallback 自动切换”,
既支持在外手机/电脑单机直连,又支持家庭软路由全屋无感透明分流。
文中对每一步命令的底层机理、验证手段及常见异常进行了系统拆解。
---
## 阶段零:整体架构与容灾拓扑设计
```text
┌────────────────────────────────────────────────────────┐
│ 客户端 / 软路由接入 │
└───────────┬────────────────────────────────┬───────────┘
│ │
┌─────────────────────┴───────┐ ┌───────────────┴─────────────────────┐
│ 场景 A:手机/笔记本外出直连 │ │ 场景 B:家庭软路由 (OpenClash TUN) │
│ (v2rayNG / 小火箭 / Verge) │ │ Fake-IP 模式 + 自动健康探测 Fallback│
└─────────────┬───────────────┘ └───────────────┬─────────────────────┘
│ │
┌───────────────────────┴────────────────────────────────────────┴───────────────────────┐
│ 双节点拓扑 │
▼ ▼
┌──────────────────────────────────────┐ ┌──────────────────────────────────────┐
│ ① 搬瓦工 (BWG) —— 主力节点 │ │ ② RackNerd (RN) —— 备用容灾节点 │
│ - 线路:CN2 GIA / 9929 顶级优化链路 │ │ - 线路:普通国际骨干网 (如 163) │
│ - 端口:监听 8443 + 端口跳跃 20000-50000│ │ - 端口:监听 443 + 端口跳跃 20000-50000 │
│ - 带宽参数:100M 上行 / 1000M 下行 │ │ - 带宽参数:50M 上行 / 300M 下行 │
│ - 目标:日常独占千兆,抗晚高峰 QoS │ │ - 目标:主力中断 2.5 秒内无感漂移接管│
└──────────────────────────────────────┘ └──────────────────────────────────────┘
```
### 核心参数规划速查
| 参数项 | 主力 VPS (搬瓦工 BWG) | 备用 VPS (RackNerd RN) | 规划原理说明 |
| :--- | :--- | :--- | :--- |
| **主监听端口** | UDP `<BWG_HY2_PORT>` (如 8443) | UDP 443 | 搬瓦工监听 8443 避开 Web 占用的 443;RN 直接监听标准 443 |
| **端口跳跃范围** | UDP `20000:50000` | UDP `20000:50000` | 客户端动态跳跃,彻底规避晚高峰运营商单端口 QoS 恶性限速 |
| **带宽声明限额** | `100 mbps / 1000 mbps` | `50 mbps / 300 mbps` | 优质线路释放千兆能力;普通线路限制速率防止 Bufferbloat 拥塞 |
| **证书机制** | 自签 ECC 证书 + 64位指纹固定 | 自签 ECC 证书 + 64位指纹固定 | 零域名成本,免证书维护,杜绝自签客户端红框警告与 MITM 劫持 |
---
## 阶段一:主力 VPS(搬瓦工 BWG)部署
### 步骤 1.1:通过终端建立安全连接
在本地 Windows CMD 或 PowerShell 中执行:
```cmd
ssh -p <BWG_SSH_PORT> root@<BWG_SERVER_IP>
```
* **原理解析**:`ssh` 基于非对称加密与服务器协商会话密钥。首次连接提示 `Are you sure you want to continue connecting (yes/no)?` 时输入 `yes`,公钥指纹会被记入本地 `~/.ssh/known_hosts` 防范中间人劫持。Linux 终端在输入密码时不显示星号或光标移动,属于安全防窥设计。
* **成功验证**:终端前缀变为 `root@hostname:~#`。
* **常见问题与排错**:
* *报错*:`Host key verification failed`。
* *原因*:VPS 重装过系统,本地记录的旧公钥指纹与当前指纹冲突。
* *解决*:在本地 CMD 中执行 `ssh-keygen -R <BWG_SERVER_IP>` 清空旧指纹后重连。
### 步骤 1.2:环境初始化与官方核心安装
```bash
apt-get update && apt-get install -y curl openssl
bash <(curl -fsSL https://get.hy2.sh/)
```
* **原理解析**:
* `curl -fsSL`:`-f` 遇到 HTTP 错误静默退出;`-sS` 静默执行但保留致命错误输出;`-L` 自动跟随重定向。
* `<(...)`(进程替换):利用 Linux 虚拟文件描述符将脚本数据流直接喂给 Bash 在内存中流式执行,**不向磁盘写入临时 `.sh` 脚本,防止脏文件残留**。
* 脚本会自动拉取最新 Go 二进制放入 `/usr/local/bin/hysteria`,创建受限系统用户 `hysteria:hysteria` 实施权限隔离,并注册 Systemd 服务。
* **成功验证**:执行 `hysteria version`,终端回显输出 `Hysteria 2.x.x` 版本信息。
* **常见问题与排错**:
* *报错*:连接 GitHub 脚本地址提示超时。
* *解决*:执行 `echo "nameserver 8.8.8.8" > /etc/resolv.conf` 临时指定公共 DNS 解析后重试。
### 步骤 1.3:生成 100 年自签名 ECC 证书
```bash
mkdir -p /etc/hysteria
openssl req -x509 -nodes -newkey ec:<(openssl ecparam -name prime256v1) \
-keyout /etc/hysteria/server.key \
-out /etc/hysteria/server.crt \
-subj "/CN=www.bing.com" -days 36500
chown -R hysteria:hysteria /etc/hysteria
chmod 600 /etc/hysteria/server.key
```
* **原理解析(为什么必须选 ECC prime256v1?)**:
* NIST P-256(`prime256v1`)提供 256 位密钥长度,安全强度等同于传统 RSA 3072 位,但证书体积大幅压缩。
* QUIC 协议初次握手(1-RTT / 0-RTT)的数据包能维持在网络标准 MTU(1500 字节)内,**防止跨洋 UDP 报文被切片丢弃导致的握手卡顿**。
* `-subj "/CN=www.bing.com"` 伪装域名,有效期 100 年实现终生免维护;`chmod 600` 锁定私钥仅拥有者可读。
* **成功验证**:执行 `ls -lh /etc/hysteria/`,确认目录下存在 `server.crt` 和权限为 `-rw-------` 的 `server.key`。
### 步骤 1.4:写入主力节点服务端配置
```bash
cat << 'EOF' > /etc/hysteria/config.yaml
listen: :<BWG_HY2_PORT>
tls:
cert: /etc/hysteria/server.crt
key: /etc/hysteria/server.key
auth:
type: password
password: <YOUR_BWG_PASSWORD>
masquerade:
type: proxy
proxy:
url: https://www.bing.com
rewriteHost: true
quic:
initStreamReceiveWindow: 8388608
maxStreamReceiveWindow: 8388608
initConnReceiveWindow: 20971520
maxConnReceiveWindow: 20971520
bandwidth:
up: 100 mbps
down: 1000 mbps
ignoreClientBandwidth: false
EOF
```
* **原理解析**:
* `cat << 'EOF'`:HereDoc 单引号模式,强制屏蔽变量解析,防止密码中的 `$`, `!` 等特殊字符被系统误解析吞噬。
* `masquerade`:主动探测反制。当网络探针向端口发起常规 HTTP/3 请求时,服务端将其作为透明代理反代给必应官网,对外部探测呈现正常的 Web 站点表现。
* `quic` 窗口优化:在中美跨洋长延迟链路下(RTT 约 160ms~200ms),大单流(8MB)与大连接窗口(20MB)可消除 BDP(带宽时延积)瓶颈,防止发包端在等待 ACK 确认时出现流水线停顿。
* `bandwidth`:声明千兆下行,确保充分利用家庭宽带。
* **成功验证**:执行 `cat /etc/hysteria/config.yaml`,确认输出格式缩进完整无误。
### 步骤 1.5:配置内核级端口跳跃与规则落盘(持久化)
```bash
# 1. 动态抓取主公网网卡名
INTERFACE=$(ip route show default | awk '{print $5}')
# 2. 注入 NAT PREROUTING 规则(将 20000-50000 UDP 重定向至本地实际监听端口)
iptables -t nat -A PREROUTING -i $INTERFACE -p udp --dport 20000:50000 -j REDIRECT --to-ports <BWG_HY2_PORT>
# 3. 安装规则固化工具并持久化落盘
apt-get update && apt-get install -y iptables-persistent
netfilter-persistent save
```
* **原理解析(授人以渔:端口跳跃如何规避 QoS?)**:
* 国内运营商流控系统(DPI)会对单一五元组(IP+端口)持续大流量的 UDP 实施恶性限速。让客户端在 `20000-50000` 端口之间动态发包,流控会将其误判为独立的短连接,从而绕过限速策略。
* Linux 内核 Netfilter 在数据包刚进网卡时通过 `REDIRECT` 动作将目标端口重写为服务端的实际端口,**服务端只需监听一个端口,即可接管 30,000 个端口的流量**。
* `netfilter-persistent save` 会将内存规则落盘至 `/etc/iptables/rules.v4`,防止 VPS 重启失效。
* **安装时的交互弹窗避坑**:
* **弹窗一(蓝底提示 `Save current IPv4 rules?`)**:敲 **Enter** 确认选 `<Yes>`;若随后出现 IPv6 同样回车选 `<Yes>`。
* **弹窗二(紫底黑框提示 `needrestart` / `Which services should be restarted?`)**:按一次键盘 **Tab 键** 将高亮焦点切到底部的 **`<Ok>`**,敲 **Enter** 确认退出。
* **成功验证**:执行 `iptables -t nat -L -n -v`,在 `Chain PREROUTING` 下能看到:
```text
REDIRECT udp -- eth0 * 0.0.0.0/0 0.0.0.0/0 udp dpts:20000:50000 redir ports <BWG_HY2_PORT>
```
### 步骤 1.6:启动服务并提取证书防伪指纹
```bash
systemctl daemon-reload
systemctl enable --now hysteria-server
systemctl status hysteria-server --no-pager
# 提取证书 SHA-256 唯一指纹
openssl x509 -in /etc/hysteria/server.crt -outform DER | sha256sum | awk '{print $1}'
```
* **原理解析(证书固定 Certificate Pinning)**:
* 自签证书因缺少公共权威 CA 机构背书,移动端客户端默认会报红甚至拦截握手。
* 通过提取证书的 SHA-256 唯一哈希摘要并在客户端进行指纹固定(Pinning),握手时客户端会直接比对公钥哈希,有 1 位不符便立即熔断。**零成本消除安全警告,并具备防御中间人劫持的能力**。
* **成功验证**:
* 服务状态输出包含绿色的 `active (running)`,且日志显示已在指定端口监听 UDP。
* 终端打印出一条 64 位的哈希字符串,复制保存至备忘录备用。
---
## 阶段二:备用 VPS(RackNerd RN)部署与普通线路调优
在 RackNerd VPS 上重复步骤 1.1 至 1.3 完成环境安装与自签证书签发。
### 步骤 2.1:写入备用节点配置(防 Bufferbloat 拥塞)
```bash
cat << 'EOF' > /etc/hysteria/config.yaml
listen: :443
tls:
cert: /etc/hysteria/server.crt
key: /etc/hysteria/server.key
auth:
type: password
password: <YOUR_RN_PASSWORD>
masquerade:
type: proxy
proxy:
url: https://www.bing.com
rewriteHost: true
quic:
initStreamReceiveWindow: 8388608
maxStreamReceiveWindow: 8388608
initConnReceiveWindow: 20971520
maxConnReceiveWindow: 20971520
bandwidth:
up: 50 mbps
down: 300 mbps
ignoreClientBandwidth: false
EOF
```
* **原理解析(为什么备用节点带宽不能标千兆?)**:
* 普通 163 骨干网晚高峰回国丢包率偏高。如果虚标千兆带宽,Hysteria 2 会以激进速率强行发包,超出跨洋路由器的承载上限,导致数据包在队列中积压超时被丢弃(Bufferbloat 缓冲区膨胀),引发严重的重传风暴与数千毫秒延迟。
* 将其限定在 `50M/300M`,能在保证流畅播放 4K 视频的同时维持流控平稳。
### 步骤 2.2:配置端口跳跃并固化
```bash
INTERFACE=$(ip route show default | awk '{print $5}')
iptables -t nat -A PREROUTING -i $INTERFACE -p udp --dport 20000:50000 -j REDIRECT --to-ports 443
apt-get update && apt-get install -y iptables-persistent
netfilter-persistent save
```
* **成功验证**:执行 `iptables -t nat -L -n -v`,确认包含 `udp dpts:20000:50000 redir ports 443`。
### 步骤 2.3:启动备用服务并抓取指纹
```bash
systemctl daemon-reload
systemctl enable --now hysteria-server
openssl x509 -in /etc/hysteria/server.crt -outform DER | sha256sum | awk '{print $1}'
```
* **成功验证**:服务运行正常,记录该 VPS 对应的 64 位 SHA-256 指纹。
---
## 阶段三:双机自动化运维:看门狗与内存/日志维护脚本
两台 VPS 均需配置此定时维护脚本,以防范低配小内存机器因 Go 堆内存未立即归还导致的 OOM 杀进程,以及系统日志撑满小磁盘。
### 步骤 3.1:写入全能维护脚本
在两台 VPS 终端中执行:
```bash
cat << 'EOF' > /usr/local/bin/hy2-maintenance.sh
#!/usr/bin/env bash
LOG_TAG="[HY2-MAINTENANCE]"
# 1. 看门狗模块:进程异常退出时毫秒级自动拉起
watchdog() {
if ! systemctl is-active --quiet hysteria-server; then
echo "$(date '+%Y-%m-%d %H:%M:%S') $LOG_TAG 异常:检测到服务离线,正在紧急重启..."
systemctl restart hysteria-server
sleep 2
if systemctl is-active --quiet hysteria-server; then
echo "$(date '+%Y-%m-%d %H:%M:%S') $LOG_TAG 成功:服务已恢复拉起。"
else
echo "$(date '+%Y-%m-%d %H:%M:%S') $LOG_TAG 严重:服务拉起失败,请人工排查!"
fi
fi
}
# 2. 深度维护模块:清理日志、回收内存与周期重启
deep_clean() {
echo "$(date '+%Y-%m-%d %H:%M:%S') $LOG_TAG 执行系统深度维护..."
# 限制 systemd-journald 日志在 100MB / 7 天内
command -v journalctl &> /dev/null && journalctl --vacuum-size=100M --vacuum-time=7d > /dev/null 2>&1
# 安全截断超过 20MB 的历史系统大文本日志(不破坏已有写入文件描述符)
for log_file in /var/log/*.log /var/log/syslog /var/log/messages /var/log/auth.log; do
if [ -f "$log_file" ] && [ $(stat -c%s "$log_file" 2>/dev/null || echo 0) -gt 20971520 ]; then
truncate -s 0 "$log_file"
fi
done
# 周期轻量重启服务释放 Go 堆内存池,并同步磁盘写入回收内核缓存
systemctl restart hysteria-server
sync
echo 3 > /proc/sys/vm/drop_caches
echo "$(date '+%Y-%m-%d %H:%M:%S') $LOG_TAG 深度维护任务全部完成。"
}
case "$1" in
check) watchdog ;;
clean) deep_clean ;;
*) echo "用法: $0 {check|clean}"; exit 1 ;;
esac
EOF
chmod +x /usr/local/bin/hy2-maintenance.sh
```
* **原理解析(为什么必须用 `truncate -s 0` 而不是 `rm`?)**:
* 如果直接用 `rm` 删除正在被内核写入的文件(如 `syslog`),进程依然持有文件描述符,磁盘空间**不会被真正释放**,反而会产生僵尸句柄。
* `truncate -s 0` 将文件长度瞬间截断为 0 字节,既能立刻释放空间,又不会损坏已有写句柄。
### 步骤 3.2:挂载 Crontab 定时调度
```bash
(crontab -l 2>/dev/null; echo "*/5 * * * * /usr/local/bin/hy2-maintenance.sh check >> /var/log/hy2-watchdog.log 2>&1"; echo "0 4 * * 1 /usr/local/bin/hy2-maintenance.sh clean >> /var/log/hy2-maintenance.log 2>&1") | crontab -
```
* **原理解析**:
* 每 5 分钟执行一次 `check`(看门狗巡检,异常退出 5 分钟内自愈)。
* 每周一凌晨 04:00 执行一次 `clean`(网络低峰期整理内存并轮转日志)。
* **成功验证**:执行 `crontab -l`,正确打印出上述两行配置。
---
## 阶段四:方案一 —— 移动单机客户端直连(外出差旅)
适用于手机蜂窝网络或笔记本在外直连。
### 步骤 4.1:拼接带指纹固定与端口跳跃的标准 URL
将参数替换为真实值后,拼接为标准链接:
* **搬瓦工主力节点(含端口跳跃与指纹固定)**:
```text
hy2://<BWG_PASSWORD>@<BWG_SERVER_IP>:<BWG_HY2_PORT>/?sni=bing.com&pinSHA256=<BWG_FINGERPRINT>&mport=20000-50000#BWG-Primary
```
* **RackNerd 备用节点(含端口跳跃与指纹固定)**:
```text
hy2://<RN_PASSWORD>@<RN_SERVER_IP>:443/?sni=www.bing.com&pinSHA256=<RN_FINGERPRINT>&mport=20000-50000#RN-Backup
```
### 步骤 4.2:各平台客户端导入配置速查
* **Android (v2rayNG / NekoBox)**:
* 复制链接,打开 v2rayNG 点击右上角 `+` -> **【从剪贴板导入】**。
* 由于参数中携带了 `pinSHA256`,客户端直接校验公钥指纹,**不会触发不受信任自签证书的红色拦截**。
* **iOS (Shadowrocket / 小火箭)**:
* 从剪贴板导入,进入节点编辑详情,确认开启“允许不安全(Allow Insecure)”,并在端口处确认已填写跳跃端口范围 `20000-50000`。
* **Windows / macOS (Clash Verge Rev)**:
* 直接加载后文软路由相同的 YAML 规则文件,开启系统代理接管。
* **成功验证**:手机切断 Wi-Fi 走 5G 移动网络,开启客户端代理,访问 `https://ip.sb`,显示的出口 IP 与所选 VPS 物理 IP 一致。
---
## 阶段五:方案二 —— 软路由全屋透明代理与无感容灾(家庭网关)
### 步骤 5.1:停用旧代理插件(消除防火墙与端口死锁)
若软路由上此前运行着 **ShadowSocksR Plus+** 或 PassWall:
1. 进入 OpenWrt 后台:**【服务】** -> **【ShadowSocksR Plus+】**。
2. 客户端主服务器下拉切换为 **“停用”**,取消自动切换勾选,点击 **【保存并应用】**。
* **原理解析**:旧插件会在防火墙注入全局 REDIRECT 链,并强占系统的 53 DNS 端口。若同时开启两个代理插件,规则相互抢占会导致整个局域网瞬间瘫痪断网。
### 步骤 5.2:通过 SSH 写入软路由配置(绕过 LuCI 100KB 截断限制)
在 OpenWrt 网页后台在线编辑大文本配置时,极易触发 `At reading part data, byte offset 102910, the value exceeds the maximum allow size` 错误。
* **根因**:OpenWrt 新版 LuCI 框架针对网页文本框设置了 **100KB 单字段限制**。
* **解决之道**:打开电脑 CMD,执行 `ssh root@<ROUTER_IP>` 登录软路由,直接在终端中写入配置:
```bash
mkdir -p /etc/openclash/config
cat << 'EOF' > /etc/openclash/config/config.yaml
# ===================================================
# 基础运行与监听设置
# ===================================================
port: 7890
socks-port: 7891
redir-port: 7892
mixed-port: 7893
tproxy-port: 7895
allow-lan: true
mode: rule
log-level: info
ipv6: false
external-controller: 0.0.0.0:9090
# ===================================================
# DNS 系统 (TUN 虚拟网卡 + Fake-IP 模式)
# ===================================================
dns:
enable: true
listen: 0.0.0.0:1053
ipv6: false
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16
fake-ip-filter:
- "*.lan"
- "localhost.ptlogin2.qq.com"
nameserver:
- 223.5.5.5
- 119.29.29.29
fallback:
- 8.8.8.8
- 1.1.1.1
# ===================================================
# 节点集群定义(双机均启用端口跳跃)
# ===================================================
proxies:
# 搬瓦工:千兆主力 + 20000-50000 端口跳跃
- name: "BWG-Hy2-Primary"
type: hysteria2
server: <BWG_SERVER_IP>
port: <BWG_HY2_PORT>
ports: 20000-50000
password: <YOUR_BWG_PASSWORD>
sni: bing.com
skip-cert-verify: true
alpn:
- h3
up: "100 Mbps"
down: "1000 Mbps"
fast-open: true
# RackNerd:防 QoS 备用 + 20000-50000 端口跳跃
- name: "RN-Hy2-Backup"
type: hysteria2
server: <RN_SERVER_IP>
port: 443
ports: 20000-50000
password: <YOUR_RN_PASSWORD>
sni: www.bing.com
skip-cert-verify: true
alpn:
- h3
up: "50 Mbps"
down: "300 Mbps"
fast-open: true
# ===================================================
# 容灾核心:自动故障转移策略组 (Fallback)
# ===================================================
proxy-groups:
- name: "自动故障转移"
type: fallback
url: "https://www.gstatic.com/generate_204"
interval: 180 # 每 3 分钟执行一次健康心跳
timeout: 2500 # 单次握手超时 2.5 秒即标记为故障熔断
proxies:
- "BWG-Hy2-Primary" # 排在首位:只要畅通,独占 100% 流量
- "RN-Hy2-Backup" # 排在次位:主力异常时毫秒级自动漂移接管
- name: "节点选择"
type: select
proxies:
- "自动故障转移"
- "BWG-Hy2-Primary"
- "RN-Hy2-Backup"
- DIRECT
# ===================================================
# 路由分流规则 (国内直连,国外走容灾组)
# ===================================================
rules:
- GEOIP,lan,DIRECT,no-resolve
- IP-CIDR,223.5.5.5/32,DIRECT,no-resolve
- IP-CIDR,119.29.29.29/32,DIRECT,no-resolve
- GEOIP,CN,DIRECT
- MATCH,节点选择
EOF
```
* **原理解析(授人以渔:为什么 Fake-IP + Fallback 能做到无感容灾?)**:
* **Fake-IP 机制**:内网主机请求外部域名时,软路由立即下发私有网段保留地址(`198.18.0.x`),终端拿到后无需等待远端查询即建立连接。软路由接收到原始 IP 包后在底层隧道直接用域名进行路由转发,实现 **0ms 域名响应并彻底免疫国内 DNS 劫持污染**。
* **Fallback 容灾机制**:Meta 内核按照配置列表的先后顺序作为优先级。只有当排在第一位的主力节点无法通过 HTTP 探测时,内核才会临时切换到备用节点;主力恢复后自动切回。
* **成功验证**:执行 `ls -lh /etc/openclash/config/config.yaml`,确认文件已生成且大小在 2KB 左右。
### 步骤 5.3:重载核心与应用核验
1. 打开软路由后台:**【服务】** -> **【OpenClash】**。
2. 在 **【运行状态】** 界面,确认配置文件已选中 `config.yaml`,点击 **【应用配置】**。
3. 等待 5~10 秒,左上角状态变为绿色的 **“运行中”**。
4. 点击右侧面板按钮 **【Metacubexd】** 进入 Web 仪表盘:
* 切换至 **Proxies(代理)** 页面,找到 **“自动故障转移”** 策略组。
* 点击右上角测速小图标,确认两个节点均返回绿色的低延迟读数。
> **技术原理说明:为什么重载 OpenClash 时 SSH 终端会提示 `Connection closed by remote host`?**
> 这是完全正常的底层网络行为。当 OpenClash 重启并重新加载 TUN 虚拟网卡与防火墙规则时,软路由内部的连接跟踪表(`conntrack`)会被刷新,之前建立的所有 TCP 长连接(包括当前的 SSH 终端会话)会被内核发送 RST 报文主动重置。此时直接重新发起 SSH 连接即可。
---
## 阶段六:全链路容灾切换演练(实战验收)
按以下步骤在生产环境中闭环测试高可用自动切换逻辑:
1. **常态基准确认**:电脑端持续播放一段 4K 视频,访问 `https://ip.sb` 确认当前出口为 **搬瓦工主力 IP**。
2. **切断主力节点**:通过终端连接到搬瓦工 VPS,执行停服命令:
```bash
systemctl stop hysteria-server
```
3. **验证秒级漂移**:在软路由 Metacubexd 仪表盘中,或直接刷新 `https://ip.sb`,观察到出口 IP 在数秒内**自动变更为 RackNerd 备用 IP**,此时视频播放依旧平滑,全屋局域网无断网弹窗。
4. **恢复主力节点**:回到搬瓦工 VPS 终端,执行启动命令:
```bash
systemctl start hysteria-server
```
5. **验证自动回切**:等待下一个探测周期,软路由检测到主力恢复,策略组高亮自动重新跳回主力节点,出口 IP 恢复为搬瓦工。
6. **验证端口跳跃实时命中**:
在搬瓦工 VPS 执行以下命令:
```bash
iptables -t nat -L -n -v | grep <BWG_HY2_PORT>
```
随着电脑端缓冲视频,最左侧的 **pkts(数据包量)** 与 **bytes** 呈现出上千或上万量级的持续递增,证明软路由发出的流量已成功在 `20000-50000` 动态跳跃并被内核重定向至主监听端口。
---
## 阶段七:常见故障与排查速查表
| 故障现象 | 根因排查方向 | 解决方案 |
| :--- | :--- | :--- |
| **手机 v2rayNG 提示证书不安全并弹红框阻断** | 节点使用了自签证书但未绑定指纹 | 确保导入的 URL 中包含 `pinSHA256=<64位指纹>` 参数并重新导入。 |
| **保存 OpenClash 配置提示 `byte offset ... exceeds maximum`** | LuCI 引擎对单表单限制 100KB 大小 | 避免在网页编辑大配置文件,通过 SSH 终端执行 `cat << 'EOF'` 直接落盘写入。 |
| **开启 OpenClash 后全屋断网打不开网页** | 原旧插件(如 SSR+)未停止,端口与防火墙规则抢占 | 彻底停用 SSR+ 并保存应用,随后重启 OpenClash。 |
| **VPS 重启后端口跳跃失效,节点连不上** | 防火墙规则仅保留在内存中,未持久化落盘 | 执行 `apt-get install -y iptables-persistent && netfilter-persistent save`。 |
| **VPS 运行几个月后莫名掉线** | 小内存 VPS 发生 OOM,或日志填满磁盘 | 部署本文第三阶段的看门狗与日志维护 Crontab 脚本。 |
| **执行 `netfilter-persistent save` 报错 command not found** | 未安装持久化组件 | 执行 `apt-get update && apt-get install -y iptables-persistent` 补装工具。 |双 VPS Hysteria 2 双跳跃主备高可用架构与全自动容灾实战指南
https://rainboundlab.com/archives/shuang-vps-hysteria-2-shuang-tiao-yue-zhu-bei-gao-ke-yong-jia-gou-yu-quan-zi-dong-rong-zai-shi-zhan-zhi-nan
评论